AIイノベーションズ
Railway/Guides

Django アプリをデプロイする

Railway を使って Django アプリをデプロイする手順を解説します。データベース設定、静的ファイル、Celery との連携まで、実践的な方法を学びます。

著者: AIイノベーションズ 阿部隼也X / Twitter

Railwayはこちら

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 データベースを作成し、PGUSERPGPASSWORD を自分の環境に合わせて変更してください。

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")]

MIDDLEWAREwhitenoise.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つに分割します。

  1. Redis サービスの追加: Celery のブローカーとして Redis を追加します。
  2. App Service: HTTP リクエストを処理します。
  3. Cron Service: Celery Beat を実行し、スケジュールされたタスクを管理します。celery -A liftoff beat -l info を起動コマンドに設定します。
  4. Worker Service: Celery Worker を実行し、バックグラウンドジョブを処理します。celery -A liftoff worker -l info を起動コマンドに設定します。

各サービスに適切な環境変数を設定することで、連携が完了します。


これで、Django アプリケーションが Railway 上で稼働し始めます。詳細な設定や他のデプロイ方法については、公式ドキュメントを参照してください。

Railwayはこちら

PR