【Django】DjangoアプリをRenderにデプロイする方法

Django

こんにちは、かつコーチです。

ローカル環境でDjangoアプリが動くようになると、次にぶつかる壁が「これをインターネット上に公開するにはどうすればいいのか」という疑問です。
AWSやHerokuなど選択肢は色々ありますが、初めてのデプロイには設定がシンプルなRenderがおすすめです。

この記事では、DjangoアプリをRenderにデプロイするための手順を、つまずきやすいポイントも含めて解説します。

Renderとは?なぜ初心者に向いているのか

Renderの位置づけ

Renderとは、Webアプリケーションを簡単に公開できるクラウドホスティングサービスです。
GitHubリポジトリと連携し、コードをpushするだけで自動的にビルド・デプロイが行われる仕組みを持っています。

サーバーの構築やネットワークの設定を細かく行う必要がなく、PaaS(Platform as a Service)と呼ばれる、アプリを動かす土台ごと提供してくれるタイプのサービスです。

他のデプロイ先との比較

選択肢特徴向いているケース
Render設定項目が少なく、無料枠でも試しやすい初めてのデプロイ、個人開発・学習用途
Heroku老舗のPaaS。無料プランは廃止済みすでにHerokuの知見があるチーム
AWS(EC2/Elastic Beanstalk)自由度が高い分、設定項目が多く学習コストが高い本格的な本番運用、細かいインフラ制御が必要な場合
PythonAnywherePython特化で手軽だが、機能はシンプルごく小規模なアプリ、学習目的

「まずは公開できる状態を体験したい」という初心者の最初の一歩としては、設定項目が少なく無料枠もあるRenderが取り組みやすいでしょう。

Renderへのデプロイ手順

手順1:本番用の設定を追加する

デプロイの前に、本番環境向けのパッケージを追加します。
静的ファイルの配信にはwhitenoise、本番用サーバーにはgunicornを使うのが定番です。

pip install gunicorn whitenoise dj-database-url psycopg2-binary
pip freeze > requirements.txt

settings.pyに本番向けの設定を追加します。

# settings.py
import os
import dj_database_url

DEBUG = os.environ.get("DEBUG", "False") == "True"
ALLOWED_HOSTS = os.environ.get("ALLOWED_HOSTS", "").split(",")

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "whitenoise.middleware.WhiteNoiseMiddleware",  # SecurityMiddlewareの直後に追加
    # ...既存のミドルウェア
]

STATIC_ROOT = BASE_DIR / "staticfiles"
STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"

DATABASES = {
    "default": dj_database_url.config(
        default=f"sqlite:///{BASE_DIR / 'db.sqlite3'}"
    )
}

手順2:ビルドコマンドと起動コマンドを用意する

Renderには「ビルド時に何をするか」を指示するスクリプトが必要です。
プロジェクトのルートにbuild.shを作成します。

#!/usr/bin/env bash
# build.sh
set -o errexit

pip install -r requirements.txt
python manage.py collectstatic --no-input
python manage.py migrate

実行権限も付けておきます。

chmod +x build.sh

手順3:Renderでサービスを作成する

  1. Renderにサインアップし、GitHubアカウントと連携する
  2. デプロイしたいリポジトリを選択し、「Web Service」として新規作成する
  3. 以下の項目を設定する
項目設定値の例
Build Command./build.sh
Start Commandgunicorn config.wsgi:application
EnvironmentPython 3

config.wsgiの部分は、プロジェクト作成時のプロジェクト名に合わせて読み替えてください。

手順4:環境変数を設定する

Renderの管理画面から、以下のような環境変数を登録します。

DEBUG=False
ALLOWED_HOSTS=your-app-name.onrender.com
SECRET_KEY=(ランダムな文字列を生成して設定)
DATABASE_URL=(PostgreSQLを追加した場合、自動で設定される)

SECRET_KEYをコード中にハードコーディングせず環境変数から読み込む設定にしておくことで、GitHubにキーを公開してしまう事故を防げます。

よくあるつまずきポイント・エラー対処

❌ Before:静的ファイル(CSS)が反映されずデザインが崩れる

デプロイ直後、多くの人が最初にぶつかるのが「ページは表示されるのに、CSSが読み込まれずデザインが崩れている」という現象です。

筆者も初めてRenderにデプロイした際、まさにこの状態になり、真っ白なページに戸惑いました。
原因はwhitenoiseの設定漏れと、collectstaticを実行していなかったことでした。

✅ After:collectstaticとwhitenoiseの設定を確認する

原因を切り分けるには、まずビルドログにcollectstaticが実行されているかを確認します。

# build.shに以下が含まれているか確認
python manage.py collectstatic --no-input

加えて、MIDDLEWAREWhiteNoiseMiddlewareSecurityMiddlewareの直後に入っているか、STATICFILES_STORAGEが正しく設定されているかを見直します。
この2点を修正してから再デプロイすると、正しくCSSが反映されるようになりました。

「デプロイしたらデザインが崩れた」というのは非常によくある事象なので、慌てずにcollectstaticとミドルウェアの設定を順番に確認する癖をつけておくと安心です。

DisallowedHostエラーが出た場合

もう一つよく遭遇するのが、以下のエラーです。

DisallowedHost at /
Invalid HTTP_HOST header: 'your-app-name.onrender.com'. You may need to add 'your-app-name.onrender.com' to ALLOWED_HOSTS.

これはALLOWED_HOSTSにRenderが割り当てたドメインを追加していないことが原因です。
環境変数ALLOWED_HOSTSにデプロイ先のドメインを正しく設定すれば解消します。

まとめ

この記事のポイント

  • Renderは設定がシンプルで、初めてのデプロイ練習に向いているPaaS
  • gunicornwhitenoisedj-database-urlを使って本番用の設定を整える
  • build.shでビルドコマンドをまとめ、Renderの管理画面でビルド・起動コマンドを設定する
  • SECRET_KEYなどの機密情報は環境変数として管理し、コードに含めない
  • CSSが崩れたらcollectstaticwhitenoiseの設定、白紙エラーならALLOWED_HOSTSをまず疑う

次に読むべき記事

環境変数の管理をより丁寧に行いたい方は、「django-environと.envで環境変数・秘密情報を管理する」の記事もあわせてご覧ください。
ローカル環境と本番環境の設定をスマートに切り替える方法を解説しています。

タグ: Django, 初心者向け, デプロイ

タイトルとURLをコピーしました