パッケージ化して本番公開 — Railway へのデプロイ
この章では、本番環境の設定方法を学び、Django ブログアプリを Railway にデプロイして、公開アクセスリンクを取得します。
本番環境の設定
開発環境では DEBUG=True の場合、Django は詳細なエラーメッセージとデバッグページを表示します。
本番環境では DEBUG を必ずオフにし、セキュリティオプションを適切に設定する必要があります。
settings.py の本番設定
例
import os
# セキュリティキーは環境変数から読み取る(コードにハードコードしないこと)
SECRET_KEY = os.environ.get('SECRET_KEY', '开发环境默认密钥')
# DEBUG は環境変数で制御する
DEBUG = os.environ.get('DEBUG', 'True').lower() == 'true'
# アクセスを許可するホスト名
ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS', '127.0.0.1,localhost').split(',')
# 静的ファイル収集ディレクトリ
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') # プロジェクトルートディレクトリ配下の staticfiles/
STATIC_URL = '/static/'
SECRET_KEYSECRET_KEY は Django で最も重要なセキュリティキーであり、セッションや CSRF トークンなどの暗号化に使用されます。絶対にコードにハードコードしたり Git にコミットしたりしてはいけません。本番環境では環境変数を介して注入します。
依存関係の管理と requirements.txt
依存関係のリストを生成します。デプロイプラットフォームはこれを使用してプロジェクトに必要なパッケージをインストールします。
(venv) $ pip freeze > requirements.txt
ファイルの内容を確認し、以下の重要な依存関係が含まれていることを確認します:
Django>=5.0,<6.0 gunicorn>=21.0 # 生产级 WSGI 服务器 whitenoise>=6.0 # 静态文件服务(可选)
gunicorn がない場合は、先にインストールします:
(venv) $ pip install gunicorn (venv) $ pip freeze > requirements.txt
Gunicorn + Whitenoise の設定
Django に組み込まれているrunserver本番環境には適していません。
GunicornPython の本番向け WSGI サーバーであり、同時リクエストを処理します。
WhitenoiseGunicorn が静的ファイル(CSS、JS、画像)を直接提供できるようにします。
例
# Whitenoise ミドルウェアは SecurityMiddleware の後、他のミドルウェアの前に置く必要があります
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware', # 追加:静的ファイルミドルウェア
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
プロジェクトのルートディレクトリに作成し、ProcfileRailway にアプリの起動方法を伝えます:
web: gunicorn blog_project.wsgi --log-file -
静的ファイルの収集
本番環境では、Django は静的ファイルの提供を自動的に行わないため、次を使用する必要がありますcollectstatic統合ディレクトリに収集します。
(venv) $ python manage.py collectstatic
このコマンドは、Admin バックエンドの静的ファイル、blog アプリの静的ファイルをすべて、STATIC_ROOTディレクトリ(staticfiles/)にコピーします。
開発環境では通常 collectstatic を実行する必要はありません(Django が各アプリの static ディレクトリを自動的に検索します)。ただし、デプロイ前には必ず実行し、すべての静的ファイルが Web サーバーが使用する単一のディレクトリに集約されるようにする必要があります。
プロジェクトを GitHub にプッシュ
.gitignore の作成
機密ファイルや一時ファイルがコミットされないようにします:
venv/ __pycache__/ *.pyc db.sqlite3 staticfiles/ .env
GitHub へのプッシュ
$ git init $ git add . $ git commit -m "初始化 Django 博客项目" $ git branch -M main $ git remote add origin https://github.com/你的用户名/django-blog.git $ git push -u origin main
Railway へのデプロイ
Railway新しいクラウドデプロイプラットフォームであり、Django のようなフルスタックアプリケーションのサポートが充実しています。
デプロイ手順
- アクセスし、railway.appGitHub アカウントでログインします
- 「New Project」→「Deploy from GitHub repo」をクリックし、django-blog リポジトリを選択します
- Railway は Procfile を自動的に検出し、起動コマンドを認識します
- Variables で環境変数を設定します
- Deploy をクリックし、ビルドとデプロイが完了するまで待ちます
環境変数の設定
| 変数名 | 值 | 説明 |
|---|---|---|
| SECRET_KEY | ランダムに生成された長い文字列 | Django のセキュリティキー |
| DEBUG | False | デバッグモードをオフにする |
| ALLOWED_HOSTS | .railway.app | Railway ドメインからのアクセスを許可 |
SECRET_KEY をすばやく生成する:
$ python -c "import secrets; print(secrets.token_urlsafe(50))"
デプロイが成功すると、次のようなリンクが取得できます:https://django-blog.up.railway.app
Railway の無料枠には制限があります(月額 $5 または 500 時間)。テストや学習目的の場合は、使い終わったらプロジェクトを一時停止してください。Heroku は無料プランを廃止したため、このチュートリアルでは代替として Railway を推奨しています。
次の学習ステップ
| 学習分野 | 対象者 | 推奨される開始点 |
|---|---|---|
| Django REST Framework (DRF) | フロントエンドフレームワーク(Vue3/React)用の API バックエンドを構築する必要がある | Serializer と ViewSet を学び、ブログを API サービスに変換する |
| PostgreSQL | 本番レベルのデータベースが必要 | SQLite を置き換え、django-environ を使用してデータベース設定を管理する |
| Celery 非同期タスク | バックグラウンドタスク(メール送信、レポート生成)が必要 | Redis + Celery を導入し、非同期タスクキューを実装する |
| Django + Vue3/React の前後端分離 | 前後端分離アーキテクチャを希望する | DRF で API バックエンドを構築し、Vue3/React でフロントエンドを構築し、fetch で通信する |
章のまとめ
この章では、最後のステップを完了しました:本番環境の設定(SECRET_KEY/DEBUG/ALLOWED_HOSTS)、requirements.txt の生成、Gunicorn + Procfile の設定、GitHub へのプッシュ、Railway によるワンクリックデプロイです。
その他の拡張