【Django入門19】Djangoのデプロイ|ローカル開発から本番環境への移行方法

デプロイとは?

デプロイの基本概念

デプロイとは、開発したアプリケーションをインターネット上で公開し、ユーザーがアクセスできるようにするプロセスのことです。Djangoアプリケーションをローカル環境で開発した後、本番環境(クラウドサーバやVPSなど)にデプロイすることで、実際に運用が可能になります。

なぜデプロイが重要なのか?

  • ユーザーがアクセス可能に:ローカルで動作しているアプリケーションを公開し、実際に利用してもらうために必須です。
  • セキュリティ対策:本番環境に適したセキュリティ設定を適用します。
  • パフォーマンス最適化:ローカル環境とは異なるリソース設定で最適化します。

本番環境の選定と準備

サーバーの選択肢

Djangoのデプロイに適したサーバーには、次のような選択肢があります:

  • クラウドサービス:AWS、Google Cloud、Azureなど。
  • VPS(仮想プライベートサーバー):さくらのVPS、ConoHaなど。
  • PaaS(Platform as a Service):Heroku、Renderなど。

必要なソフトウェアのインストール

Djangoアプリをデプロイするには、サーバーに以下のソフトウェアをインストールする必要があります。

  • Python:DjangoはPythonで動作するため、インストールが必須です。
  • Git:コードの管理やデプロイに便利です。
  • データベース:PostgreSQLやMySQLなどの本番環境用データベース。
  • Webサーバー:Gunicorn(アプリケーションサーバー)やNginx(リバースプロキシとして使用)。

サーバーにPythonをインストールする例(Ubuntuの場合):

sudo apt update
sudo apt install python3 python3-venv python3-pip

アプリケーションの準備

requirements.txtの作成

Djangoプロジェクトで使用しているパッケージを本番環境にもインストールするために、requirements.txtを作成します。

pip freeze > requirements.txt

例:requirements.txtの内容

Django==4.1
psycopg2==2.9.3  # PostgreSQLを使う場合
gunicorn==20.1.0  # 本番環境用のアプリケーションサーバー

静的ファイルの収集

Djangoの静的ファイル(CSS、JavaScript、画像など)を1か所にまとめて本番環境で配信できるようにします。

python manage.py collectstatic

このコマンドにより、STATIC_ROOTに指定したディレクトリに静的ファイルがコピーされます。

環境変数の設定

環境変数とは?

環境変数は、機密情報(データベースのパスワード、シークレットキーなど)や本番環境固有の設定を安全に管理するために使用されます。

.envファイルの作成

本番環境に適した環境変数を.envファイルにまとめ、Djangoで読み込むようにします。

.envファイルの例

SECRET_KEY=本番用のシークレットキー
DEBUG=False
DATABASE_URL=postgres://user:password@localhost:5432/mydatabase

Djangoで環境変数を読み込む設定(settings.py):

import os
from dotenv import load_dotenv

load_dotenv()

SECRET_KEY = os.getenv('SECRET_KEY')
DEBUG = os.getenv('DEBUG', 'False') == 'True'

データベースの設定

本番環境用データベースの設定

本番環境では、SQLiteではなくPostgreSQLやMySQLなどのデータベースを使用することが推奨されます。

settings.pyの例(PostgreSQLの場合):

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

マイグレーションの適用

データベースのテーブル構造を反映するために、マイグレーションを実行します。

python manage.py migrate

GunicornとNginxの設定

Gunicornのインストールと起動

Gunicornは、Djangoアプリケーションを本番環境で動作させるためのアプリケーションサーバーです。

pip install gunicorn

Gunicornを起動するには次のコマンドを実行します。

gunicorn myproject.wsgi:application --bind 0.0.0.0:8000
  • myproject.wsgi:application:Djangoアプリのエントリーポイント。
  • --bind 0.0.0.0:8000:指定したポートでリクエストを受け付けます。

Nginxの設定

Nginxは、リバースプロキシとして動作し、Gunicornからの応答をクライアントに返します。

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;
    }

    location /static/ {
        alias /path/to/staticfiles/;
    }
}

設定後、Nginxを再起動します。

sudo systemctl restart nginx

セキュリティ設定

ファイアウォールの設定

サーバーへの不正アクセスを防ぐために、必要なポートのみを開放します。

例:UFW(Ubuntu Firewall)の設定

sudo ufw allow 22  # SSH
sudo ufw allow 80  # HTTP
sudo ufw allow 443 # HTTPS
sudo ufw enable

HTTPSの導入

本番環境では、SSL証明書を使ってHTTPSを有効にすることが推奨されます。Let’s Encryptなどの無料のSSL証明書を利用するのが一般的です。

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com

アプリケーションの再起動と動作確認

デプロイが完了したら、サーバーを再起動してWebブラウザでアプリケーションにアクセスし、動作を確認します。

sudo systemctl restart gunicorn

まとめ

Djangoアプリのデプロイは、設定とステップを正確に実行することでスムーズに行えます。ローカル環境から本番環境へ移行する際には、環境変数の設定、データベースの移行、セキュリティ対策などを忘れずに行いましょう。