開発運用

Django デプロイガイド

DjangoアプリケーションをPostgreSQLデータベース、Nginx、Gunicornを使用して本番環境にデプロイするための完全なガイドを、以下にステップごとに詳細に解説します。これにより、あなたのアプリケーションは効率的に動作し、安全に公開される準備が整います。


1. Djangoアプリケーションの準備

まず、Djangoアプリケーションを作成しておきます。以下の手順で進めます。

1.1 仮想環境の作成

Djangoアプリケーションを本番環境で実行する前に、仮想環境を作成して依存関係を管理することが推奨されます。

bash
python3 -m venv myenv source myenv/bin/activate

1.2 Djangoと必要なパッケージのインストール

Djangoをはじめ、必要なパッケージをインストールします。

bash
pip install django psycopg2 gunicorn
  • psycopg2: PostgreSQLデータベースとDjangoを接続するためのドライバ
  • gunicorn: WSGIサーバー。Djangoアプリケーションを本番環境で実行するために必要
  • django: Webアプリケーションのフレームワーク

1.3 Djangoプロジェクトの作成

次に、Djangoプロジェクトを作成します。

bash
django-admin startproject myproject cd myproject

1.4 データベース設定

Djangoのデフォルト設定ではSQLiteが使用されていますが、本番環境ではPostgreSQLを使用するため、設定を変更します。myproject/settings.py ファイルを開き、データベースの設定を以下のように変更します。

python
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'mydatabase', 'USER': 'myuser', 'PASSWORD': 'mypassword', 'HOST': 'localhost', 'PORT': '5432', } }

1.5 PostgreSQLデータベースの作成

PostgreSQLデータベースを作成し、ユーザーを設定します。

bash
sudo -u postgres psql

次に、データベースとユーザーを作成します。

sql
CREATE 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でマイグレーションを実行して、必要なテーブルを作成します。

bash
python manage.py migrate

2. Gunicornの設定

2.1 Gunicornのインストール

本番環境では、Djangoを直接実行するのではなく、Gunicornを使用します。まず、Gunicornをインストールします。

bash
pip install gunicorn

2.2 Gunicornを使用してDjangoを実行

アプリケーションをローカルでテストするために、以下のコマンドでGunicornを実行します。

bash
gunicorn --workers 3 myproject.wsgi:application
  • --workers 3 は使用するワーカーの数です。通常、CPUのコア数に応じて調整します。

3. Nginxの設定

3.1 Nginxのインストール

Nginxをインストールして、Djangoアプリケーションに対するリバースプロキシとして設定します。

bash
sudo apt update sudo apt install nginx

3.2 Nginxの設定ファイルを作成

Nginxの設定ファイルを作成し、Djangoアプリケーションをプロキシするように設定します。新しい設定ファイルを作成します。

bash
sudo nano /etc/nginx/sites-available/myproject

以下の内容を設定ファイルに追加します。

nginx
server { 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を再起動します。

bash
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled sudo systemctl restart nginx

3.4 ファイアウォール設定

もしファイアウォールが有効になっている場合、80番ポート(HTTP)を開放します。

bash
sudo ufw allow 'Nginx Full'

4. 静的ファイルとメディアファイルの設定

4.1 静的ファイルの収集

Djangoアプリケーションで静的ファイルを提供するためには、collectstaticコマンドを実行する必要があります。

bash
python manage.py collectstatic

これにより、STATIC_ROOTに指定したディレクトリに静的ファイルが集められます。settings.py で静的ファイルの設定を確認してください。

python
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

4.2 Nginxで静的ファイルを提供

Nginxで静的ファイルを提供するために、設定ファイルを変更します。先ほどの設定ファイルに以下の行を追加します。

nginx
location /static/ { alias /path/to/your/project/staticfiles/; }

これにより、Nginxが静的ファイルを効率的に提供します。


5. GunicornとNginxの自動起動設定

5.1 GunicornのSystemdサービスファイルを作成

Gunicornがサーバー起動時に自動的に起動するように設定します。/etc/systemd/system/gunicorn.service ファイルを作成します。

bash
sudo 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サービスの起動

サービスを有効化し、起動します。

bash
sudo systemctl start gunicorn sudo systemctl enable gunicorn

これで、サーバー再起動後もGunicornが自動的に起動します。


6. 最後の確認

すべての設定が完了したら、ウェブブラウザを開き、サーバーのIPアドレスまたはドメイン名を入力して、Djangoアプリケーションが正常に動作することを確認してください。


このガイドに従うことで、DjangoアプリケーションをPostgreSQL、Nginx、Gunicornを使用して本番環境にデプロイすることができます。

Back to top button