通常、メンテナンス中にオリジナルのエラーページを表示するためには、Apache や Nginx などの Web サーバーの設定を変更してやる必要があります。
しかし、Django を使って Web サイトを運営しているならサーバーの設定を一切変更せずにメンテナンスモードを設定することができます。
最も簡単な方法は 「django-maintenancemode」 を使うことでしょう。
Python 2 と Python 3 の両方に対応しています。
django-maintenancemode をインストール
まず、pip で django-maintenancemode をインストールする。
pip install django-maintenancemode
settings.py を編集
settings.py
の INSTALLED_APPS と MIDDLEWARE_CLASSES に下記を追加する。
# settings.py
INSTALLED_APPS = [
...
'maintenancemode',
]
MIDDLEWARE_CLASSES = [
...
'django.contrib.auth.middleware.AuthenticationMiddleware',
'maintenancemode.middleware.MaintenanceModeMiddleware',
]
メンテナンス中のエラーページを作成
メンテナンスモード中は 503エラー (Service Unavailable) が出力されます。
503エラー用のテンプレート 503.html
を作成し、テンプレートツリーの一番上に設置します。 (これが唯一の作業らしい作業です)
<!-- 503.html -->
...
<h1>サーバーメンテナンス中です</h1>
只今サーバーメンテナンス中です。。。
...
これで設定は完了。
使い方
メンテナンスモード有効にするためには settings.py
に MAINTENANCE_MODE = True
を追加する方法もありますが、便利なコマンドが用意されているのでそれを使うのが良いでしょう。
# メンテナンスモードの 有効/無効 を切り替える
python manage.py maintenance <on|off>
メンテナンスモード中は、スタッフ権限を持つユーザーでログインしている場合のみサイトにアクセスできるようになり、それ以外の場合は全てのページで 503.html
が表示されます。
おわりに
以上、Django を使ってメンテナンスモードを有効にする方法でした。
サーバーの設定ファイルを一切触ること無くメンテナンスモードを設定できるのは素晴らしいですね。