Django アプリをデプロイする
Railway を使って Django アプリをデプロイする手順を解説します。データベース設定、静的ファイル、Celery との連携まで、実践的な方法を学びます。
著者: AIイノベーションズ 阿部隼也(X / Twitter)Django アプリをデプロイする
Django は、迅速な開発とクリーンなデザインを実現するためのツールを提供する、強力な Python ウェブフレームワークです。認証、ルーティング、データベース管理などのタスクを効率化し、開発者がアプリケーションの構築に集中できるようにします。
Django アプリを作成する
既にローカルまたは GitHub に Django アプリがある場合は、この手順をスキップして「Django アプリを Railway にデプロイする」に進んでください。
新しい Django アプリを作成するには、Python と Django がインストールされていることを確認してください。
1. 仮想環境の作成と有効化
# 仮想環境を作成
python -m venv env
# 仮想環境を有効化 (macOS/Linux)
source env/bin/activate
# (Windows の場合)
# env\Scripts\activate
2. Django のインストールとプロジェクト作成
# Django をインストール
python -m pip install django
# 新しい Django プロジェクトを作成
django-admin startproject liftoff
3. ローカルでの実行確認
cd liftoff
python manage.py runserver
ブラウザで http://127.0.0.1:8000
にアクセスし、「The install worked successfully! Congratulations!」と表示されれば成功です。
データベース、静的ファイル、依存関係の設定
1. 必要なパッケージをインストール
manage.py
があるディレクトリで、以下のパッケージをインストールします。
python -m pip install gunicorn whitenoise psycopg[binary,pool]
- gunicorn: 本番環境用のウェブサーバー
- whitenoise: 静的ファイルを配信するためのパッケージ
- psycopg: Django が PostgreSQL と連携するためのアダプター
2. データベース設定
liftoff/settings.py
を開き、データベース設定を PostgreSQL に変更します。
import os
from pathlib import Path
# 環境変数のデフォルト値を設定
os.environ.setdefault("PGDATABASE", "liftoff_dev")
os.environ.setdefault("PGUSER", "username")
os.environ.setdefault("PGPASSWORD", "")
os.environ.setdefault("PGHOST", "localhost")
os.environ.setdefault("PGPORT", "5432")
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ["PGDATABASE"],
'USER': os.environ["PGUSER"],
'PASSWORD': os.environ["PGPASSWORD"],
'HOST': os.environ["PGHOST"],
'PORT': os.environ["PGPORT"],
}
}
ローカルの PostgreSQL で liftoff_dev
データベースを作成し、PGUSER
と PGPASSWORD
を自分の環境に合わせて変更してください。
3. マイグレーションの実行
python manage.py migrate
4. 静的ファイルの設定
liftoff/settings.py
で静的ファイルの設定を行います。
STATIC_URL = 'static/'
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
MIDDLEWARE
に whitenoise.middleware.WhiteNoiseMiddleware
を追加します。
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
# ...
]
5. ALLOWED_HOSTS
の更新
ALLOWED_HOSTS = ["*"]
6. requirements.txt
の作成
pip freeze > requirements.txt
Django アプリを Railway にデプロイする
デプロイ方法は複数ありますが、ここでは GitHub リポジトリからのデプロイを説明します。
1. GitHub リポジトリからデプロイ
- Railway で新しいプロジェクトを作成し、「Deploy from GitHub repo」を選択します。
- 自分の Django プロジェクトのリポジトリを選びます。
- 「Add Variables」をクリックし、環境変数を設定します。
2. データベースサービスの追加
- プロジェクトのキャンバスで「+ New」→「Database」→「Add PostgreSQL」を選択します。
- これで PostgreSQL データベースサービスが作成されます。
3. 環境変数の設定
- アプリサービスの「Variables」タブで、以下の変数を設定します。
Postgres
は自分のデータベースサービス名に置き換えてください。PGDATABASE
:${{Postgres.PGDATABASE}}
PGUSER
:${{Postgres.PGUSER}}
PGPASSWORD
:${{Postgres.PGPASSWORD}}
PGHOST
:${{Postgres.PGHOST}}
PGPORT
:${{Postgres.PGPORT}}
4. デプロイと公開
- 「Deploy」ボタンをクリックしてデプロイを開始します。
- デプロイ完了後、サービスの「Settings」タブ→「Networking」で「Generate Domain」をクリックし、公開 URL を生成します。
Celery との連携
Celery を使ってバックグラウンドタスクやスケジュールされたジョブを実行する場合、サービスを「App」「Cron」「Worker」の3つに分割します。
- Redis サービスの追加: Celery のブローカーとして Redis を追加します。
- App Service: HTTP リクエストを処理します。
- Cron Service: Celery Beat を実行し、スケジュールされたタスクを管理します。
celery -A liftoff beat -l info
を起動コマンドに設定します。 - Worker Service: Celery Worker を実行し、バックグラウンドジョブを処理します。
celery -A liftoff worker -l info
を起動コマンドに設定します。
各サービスに適切な環境変数を設定することで、連携が完了します。
これで、Django アプリケーションが Railway 上で稼働し始めます。詳細な設定や他のデプロイ方法については、公式ドキュメントを参照してください。
PR