DjangoのASGIアプリケーションをPostgreSQLデータベース、Nginxサーバー、およびUvicornを使用して本番環境にデプロイする手順を、完全かつ包括的に解説します。このガイドは、開発環境から本番環境への移行をスムーズに行えるよう、必要な手順をステップバイステップで説明します。
1. 環境構築
まずは、必要なソフトウェアをすべてインストールしましょう。これには、Python、PostgreSQL、Nginx、Uvicorn、Gunicornなどが含まれます。
1.1 必要なソフトウェアのインストール
-
Python 3.9+
Pythonの公式サイトから最新版をインストールします。 -
PostgreSQL
PostgreSQLはデータベースの管理システムであり、Djangoアプリケーションのバックエンドに使用します。 -
Uvicorn
UvicornはASGIサーバーとして、Djangoアプリケーションを動作させるために使用します。pip
を使ってインストールできます。bashpip install uvicorn
-
Nginx
Nginxはリバースプロキシサーバーとして使用され、HTTPリクエストをUvicornに転送します。これを使用して、負荷分散やセキュリティの強化を行います。bashsudo apt-get install nginx
-
Gunicorn(必要に応じて)
Gunicornは、WSGIサーバーとしてDjangoを動作させるために使うこともできますが、ASGIサーバーとしてUvicornを使用する場合は必須ではありません。
2. Djangoプロジェクトの設定
2.1 プロジェクトの作成と設定
Djangoプロジェクトを作成し、ASGI対応に設定します。
bashdjango-admin startproject myproject
cd myproject
次に、ASGI設定を行います。Django 3.0以降では、デフォルトでASGIに対応しています。asgi.py
を設定します。
myproject/asgi.py
:
pythonimport os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_asgi_application()
2.2 PostgreSQLの設定
次に、PostgreSQLデータベースの設定を行います。まずはPostgreSQLデータベースを作成し、Djangoと接続します。
PostgreSQLのインストールとセットアップ:
bashsudo apt-get install postgresql postgresql-contrib sudo -u postgres psql
sqlCREATE DATABASE myprojectdb;
CREATE USER myprojectuser WITH PASSWORD 'password';
ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myprojectuser SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE myprojectdb TO myprojectuser;
次に、Djangoの設定ファイル(settings.py
)にデータベースの設定を追加します。
pythonDATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myprojectdb',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '5432',
}
}
2.3 必要なパッケージのインストール
DjangoとPostgreSQLを接続するためにpsycopg2
パッケージをインストールします。
bashpip install psycopg2
次に、マイグレーションを実行してデータベースをセットアップします。
bashpython manage.py migrate
3. UvicornとNginxの設定
3.1 Uvicornの設定
Uvicornを使用してDjangoのASGIアプリケーションを提供します。プロジェクトのルートディレクトリで以下のコマンドを実行します。
bashuvicorn myproject.asgi:application --host 0.0.0.0 --port 8000
これで、UvicornがDjangoアプリケーションを提供する準備が整いました。
3.2 Nginxの設定
Nginxをリバースプロキシとして設定し、Uvicornで動作しているDjangoアプリケーションにリクエストを転送します。
まず、Nginxの設定ファイルを編集します。通常、設定ファイルは/etc/nginx/sites-available/
にあります。新しい設定ファイルを作成して、次の内容を追加します。
nginxserver {
listen 80;
server_name example.com; # サーバー名やドメイン名を記入
location / {
proxy_pass http://127.0.0.1:8000;
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;
}
location /static/ {
alias /path/to/your/project/static/;
}
location /media/ {
alias /path/to/your/project/media/;
}
}
次に、設定ファイルを/etc/nginx/sites-enabled/
にシンボリックリンクを作成します。
bashsudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
設定をリロードしてNginxを再起動します。
bashsudo systemctl reload nginx
3.3 Gunicornの設定(オプション)
Uvicornを使う場合、Gunicornは必須ではありませんが、より多くの制御を加えるために使用することもできます。GunicornとUvicornを組み合わせて使用する場合、以下のコマンドでGunicornを起動します。
bashgunicorn myproject.asgi:application -w 4 -k uvicorn.workers.UvicornWorker
4. SSL設定(オプション)
本番環境では、SSLを使ってHTTPSで通信を暗号化することが重要です。ここでは、Let’s Encryptを使った無料のSSL証明書の取得手順を紹介します。
4.1 Certbotのインストール
まず、Certbotをインストールします。
bashsudo apt-get install certbot python3-certbot-nginx
4.2 SSL証明書の取得
次に、Certbotを使ってSSL証明書を取得し、Nginxに設定を追加します。
bashsudo certbot --nginx -d example.com
これで、SSLが設定され、HTTPS通信が有効になります。
5. 最後に
本番環境にDjangoアプリケーションをデプロイするには、次の点を確認してください:
- PostgreSQLが適切に設定され、Djangoがデータベースに接続できること。
- UvicornがDjangoのASGIアプリケーションを提供し、Nginxがそのリクエストをリバースプロキシしていること。
- 必要に応じてSSL証明書を導入し、セキュリティを強化すること。
この手順を踏むことで、DjangoのASGIアプリケーションをPostgreSQL、Nginx、Uvicornを使って本番環境にデプロイすることができます。