パッケージ化して本番公開 — Railway へのデプロイ

この章では、本番環境の設定方法を学び、Django ブログアプリを Railway にデプロイして、公開アクセスリンクを取得します。


本番環境の設定

開発環境では DEBUG=True の場合、Django は詳細なエラーメッセージとデバッグページを表示します。

本番環境では DEBUG を必ずオフにし、セキュリティオプションを適切に設定する必要があります。

settings.py の本番設定

例

# ファイルパス: blog_project/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、画像)を直接提供できるようにします。

例

# ファイルパス: blog_project/settings.py

# 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 のようなフルスタックアプリケーションのサポートが充実しています。

デプロイ手順

  1. アクセスし、railway.appGitHub アカウントでログインします
  2. 「New Project」→「Deploy from GitHub repo」をクリックし、django-blog リポジトリを選択します
  3. Railway は Procfile を自動的に検出し、起動コマンドを認識します
  4. Variables で環境変数を設定します
  5. Deploy をクリックし、ビルドとデプロイが完了するまで待ちます

環境変数の設定

変数名值説明
SECRET_KEYランダムに生成された長い文字列Django のセキュリティキー
DEBUGFalseデバッグモードをオフにする
ALLOWED_HOSTS.railway.appRailway ドメインからのアクセスを許可

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 によるワンクリックデプロイです。

その他の拡張