開発運用

Django ASGI デプロイガイド

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を使ってインストールできます。

    bash
    pip install uvicorn
  • Nginx
    Nginxはリバースプロキシサーバーとして使用され、HTTPリクエストをUvicornに転送します。これを使用して、負荷分散やセキュリティの強化を行います。

    bash
    sudo apt-get install nginx
  • Gunicorn(必要に応じて)
    Gunicornは、WSGIサーバーとしてDjangoを動作させるために使うこともできますが、ASGIサーバーとしてUvicornを使用する場合は必須ではありません。

2. Djangoプロジェクトの設定

2.1 プロジェクトの作成と設定

Djangoプロジェクトを作成し、ASGI対応に設定します。

bash
django-admin startproject myproject cd myproject

次に、ASGI設定を行います。Django 3.0以降では、デフォルトでASGIに対応しています。asgi.pyを設定します。

myproject/asgi.py:

python
import 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のインストールとセットアップ:

bash
sudo apt-get install postgresql postgresql-contrib sudo -u postgres psql
sql
CREATE 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)にデータベースの設定を追加します。

python
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'myprojectdb', 'USER': 'myprojectuser', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '5432', } }

2.3 必要なパッケージのインストール

DjangoとPostgreSQLを接続するためにpsycopg2パッケージをインストールします。

bash
pip install psycopg2

次に、マイグレーションを実行してデータベースをセットアップします。

bash
python manage.py migrate

3. UvicornとNginxの設定

3.1 Uvicornの設定

Uvicornを使用してDjangoのASGIアプリケーションを提供します。プロジェクトのルートディレクトリで以下のコマンドを実行します。

bash
uvicorn myproject.asgi:application --host 0.0.0.0 --port 8000

これで、UvicornがDjangoアプリケーションを提供する準備が整いました。

3.2 Nginxの設定

Nginxをリバースプロキシとして設定し、Uvicornで動作しているDjangoアプリケーションにリクエストを転送します。

まず、Nginxの設定ファイルを編集します。通常、設定ファイルは/etc/nginx/sites-available/にあります。新しい設定ファイルを作成して、次の内容を追加します。

nginx
server { 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/にシンボリックリンクを作成します。

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

設定をリロードしてNginxを再起動します。

bash
sudo systemctl reload nginx

3.3 Gunicornの設定(オプション)

Uvicornを使う場合、Gunicornは必須ではありませんが、より多くの制御を加えるために使用することもできます。GunicornとUvicornを組み合わせて使用する場合、以下のコマンドでGunicornを起動します。

bash
gunicorn myproject.asgi:application -w 4 -k uvicorn.workers.UvicornWorker

4. SSL設定(オプション)

本番環境では、SSLを使ってHTTPSで通信を暗号化することが重要です。ここでは、Let’s Encryptを使った無料のSSL証明書の取得手順を紹介します。

4.1 Certbotのインストール

まず、Certbotをインストールします。

bash
sudo apt-get install certbot python3-certbot-nginx

4.2 SSL証明書の取得

次に、Certbotを使ってSSL証明書を取得し、Nginxに設定を追加します。

bash
sudo certbot --nginx -d example.com

これで、SSLが設定され、HTTPS通信が有効になります。

5. 最後に

本番環境にDjangoアプリケーションをデプロイするには、次の点を確認してください:

  • PostgreSQLが適切に設定され、Djangoがデータベースに接続できること。
  • UvicornがDjangoのASGIアプリケーションを提供し、Nginxがそのリクエストをリバースプロキシしていること。
  • 必要に応じてSSL証明書を導入し、セキュリティを強化すること。

この手順を踏むことで、DjangoのASGIアプリケーションをPostgreSQL、Nginx、Uvicornを使って本番環境にデプロイすることができます。

Back to top button