DjangoアプリケーションをPostgreSQLデータベース、Nginx、Gunicornを使用して本番環境にデプロイするための完全なガイドを、以下にステップごとに詳細に解説します。これにより、あなたのアプリケーションは効率的に動作し、安全に公開される準備が整います。
1. Djangoアプリケーションの準備
まず、Djangoアプリケーションを作成しておきます。以下の手順で進めます。
1.1 仮想環境の作成
Djangoアプリケーションを本番環境で実行する前に、仮想環境を作成して依存関係を管理することが推奨されます。
bashpython3 -m venv myenv
source myenv/bin/activate
1.2 Djangoと必要なパッケージのインストール
Djangoをはじめ、必要なパッケージをインストールします。
bashpip install django psycopg2 gunicorn
psycopg2
: PostgreSQLデータベースとDjangoを接続するためのドライバgunicorn
: WSGIサーバー。Djangoアプリケーションを本番環境で実行するために必要django
: Webアプリケーションのフレームワーク
1.3 Djangoプロジェクトの作成
次に、Djangoプロジェクトを作成します。
bashdjango-admin startproject myproject
cd myproject
1.4 データベース設定
Djangoのデフォルト設定ではSQLiteが使用されていますが、本番環境ではPostgreSQLを使用するため、設定を変更します。myproject/settings.py
ファイルを開き、データベースの設定を以下のように変更します。
pythonDATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}
1.5 PostgreSQLデータベースの作成
PostgreSQLデータベースを作成し、ユーザーを設定します。
bashsudo -u postgres psql
次に、データベースとユーザーを作成します。
sqlCREATE DATABASE mydatabase;
CREATE USER myuser WITH PASSWORD 'mypassword';
ALTER ROLE myuser SET client_encoding TO 'utf8';
ALTER ROLE myuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myuser SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
データベースの作成が完了したら、Djangoでマイグレーションを実行して、必要なテーブルを作成します。
bashpython manage.py migrate
2. Gunicornの設定
2.1 Gunicornのインストール
本番環境では、Djangoを直接実行するのではなく、Gunicornを使用します。まず、Gunicornをインストールします。
bashpip install gunicorn
2.2 Gunicornを使用してDjangoを実行
アプリケーションをローカルでテストするために、以下のコマンドでGunicornを実行します。
bashgunicorn --workers 3 myproject.wsgi:application
--workers 3
は使用するワーカーの数です。通常、CPUのコア数に応じて調整します。
3. Nginxの設定
3.1 Nginxのインストール
Nginxをインストールして、Djangoアプリケーションに対するリバースプロキシとして設定します。
bashsudo apt update sudo apt install nginx
3.2 Nginxの設定ファイルを作成
Nginxの設定ファイルを作成し、Djangoアプリケーションをプロキシするように設定します。新しい設定ファイルを作成します。
bashsudo nano /etc/nginx/sites-available/myproject
以下の内容を設定ファイルに追加します。
nginxserver {
listen 80;
server_name your_domain_or_IP;
location / {
proxy_pass http://127.0.0.1:8000; # Gunicornがリッスンしているポート
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
3.3 設定ファイルを有効にする
作成した設定ファイルを sites-enabled
にリンクし、Nginxを再起動します。
bashsudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo systemctl restart nginx
3.4 ファイアウォール設定
もしファイアウォールが有効になっている場合、80番ポート(HTTP)を開放します。
bashsudo ufw allow 'Nginx Full'
4. 静的ファイルとメディアファイルの設定
4.1 静的ファイルの収集
Djangoアプリケーションで静的ファイルを提供するためには、collectstatic
コマンドを実行する必要があります。
bashpython manage.py collectstatic
これにより、STATIC_ROOT
に指定したディレクトリに静的ファイルが集められます。settings.py
で静的ファイルの設定を確認してください。
pythonSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
4.2 Nginxで静的ファイルを提供
Nginxで静的ファイルを提供するために、設定ファイルを変更します。先ほどの設定ファイルに以下の行を追加します。
nginxlocation /static/ {
alias /path/to/your/project/staticfiles/;
}
これにより、Nginxが静的ファイルを効率的に提供します。
5. GunicornとNginxの自動起動設定
5.1 GunicornのSystemdサービスファイルを作成
Gunicornがサーバー起動時に自動的に起動するように設定します。/etc/systemd/system/gunicorn.service
ファイルを作成します。
bashsudo nano /etc/systemd/system/gunicorn.service
以下の内容を追加します。
ini[Unit]
Description=gunicorn daemon for Django project
After=network.target
[Service]
User=your_user
Group=www-data
WorkingDirectory=/path/to/your/project
ExecStart=/path/to/your/venv/bin/gunicorn --workers 3 --bind unix:/path/to/your/project/gunicorn.sock myproject.wsgi:application
[Install]
WantedBy=multi-user.target
5.2 Gunicornサービスの起動
サービスを有効化し、起動します。
bashsudo systemctl start gunicorn
sudo systemctl enable gunicorn
これで、サーバー再起動後もGunicornが自動的に起動します。
6. 最後の確認
すべての設定が完了したら、ウェブブラウザを開き、サーバーのIPアドレスまたはドメイン名を入力して、Djangoアプリケーションが正常に動作することを確認してください。
このガイドに従うことで、DjangoアプリケーションをPostgreSQL、Nginx、Gunicornを使用して本番環境にデプロイすることができます。