【Django入門】DjangoアプリをWeb開発環境で開発、公開するまでの手順-ステップ2(GitHub、Git、Render)

※ 当サイトではアフィリエイト広告を利用しています。リンクは広告リンクも含みます。

この記事は約9分で読めます。

PaizaCloudまたはGitHub CodespacesからGitHubを経由してRenderへデプロイする方法です。
GitとGitHubに関してはRenderへデプロイするための「コードの転送手段」として利用しますので、それぞれの詳しい解説はありません。
でもGitを使ったことない方にはとっかかりとしてちょうどいい教材になると思います。
手順のみご紹介します。

完成品お名前.comVPSにデプロイ ← Renderとは関係ないが同じものをデプロイしてます。
完成品Renderデプロイ(表示するまで数分かかることがあります。毎月20日~月末は停止します。)

前回(ステップ1)では、PaizaCloudやGitHub Codespacesで開発環境を構築し、Djangoアプリの動作確認や静的ファイルの設定(WhiteNoise)まで行いました。
今回はその続きとして、作成したアプリをGitHub経由でRenderにデプロイ(公開)する手順を解説します。

前回の記事はこちらになります。

【Django入門】DjangoアプリをWeb開発環境で開発、公開するまでの手順-ステップ1(GitHub Codespaces、PaizaCloud)
無料のWeb開発環境(PaizaCloudやGitHub Codespaces)でDjangoアプリを開発する簡単な手順になります。この記事ではDjangoのプログラムの内容の詳しい解説はありません。Djangoアプリをサーバーでデプロイ(…
広告
MINISFORUM日本公式ストア

デプロイの全体の流れ

PaizaCloud / GitHub Codespaces
        ↓(git push)
      GitHub(リポジトリ)
        ↓(自動デプロイ)
       Render(公開)

RenderはGitHubのリポジトリと直接連携するため、Herokuのような専用CLIは不要です。
git push でGitHubを更新するだけで、Renderが自動的に最新コードをデプロイしてくれます。

settings.py変更

ALLOWED_HOSTS = []に許可するサーバー設定

本番環境では ALLOWED_HOSTS に実際のドメインを指定します。
ただし、Renderのデプロイ先URLは事前に確定しているため、以下のように設定します。

# settings.py
# Renderのデプロイ後に発行されるURL(例)と開発環境のホストを許可
ALLOWED_HOSTS = ['自分のアプリ名(後述のデプロイのところでNAMEに書いた名前).onrender.com', 'localhost', '127.0.0.1']
Pythonで作ったものを公開(デプロイ)、Webサービスの基礎すべて無料でやってみた!【Django】
PythonでWebサービスを作り無料サーバーにアップするところまで紹介します。パソコンにインストすることなく無料のWEBサービスのみ使用大手でよくある無料だけどクレジットカード登録しないとアカウントができないとかもない。Django(We…

補足
Renderのアプリ名は後で決めるため、最初は ['*'] のままデプロイして動作確認後に修正してもOKです。
開発環境(PaizaCloud・Codespaces)では DEBUG = True のままで問題ありません。

DEBUG = False

本番環境では DEBUG = False にします。DEBUG = True のままにすると、エラー発生時に内部情報が表示されてしまいます。

DEBUG = False

DEBUG = True でエラー発生時の画面:

DEBUG = Falseにするとエラーコードだけになります。

補足
Renderでは環境変数で DEBUG を切り替えることができます。詳しくは後述の「Renderの環境変数設定」をご覧ください。

Renderへデプロイするために必要なファイルを追加

2つのファイルを用意します。追加したらGitHubにPUSHする必要があります。
目次へ

requirements.txt

プロジェクトルートにrequirements.txt を作成します。
中身は以下:

django
gunicorn
whitenoise
python-dotenv

build.sh

プロジェクトルートに build.sh を作成します。
Renderのビルド時に実行されるシェルスクリプトです。

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

pip install -r requirements.txt
python manage.py collectstatic --no-input
  • set -o errexit : エラーが発生したらスクリプトを停止する設定。
  • collectstatic : 静的ファイルを staticfiles に集めるコマンド(ステップ1で説明済み)。

注意
build.sh はテキストエディタで作成し、改行コードが LF(Unix形式)になっていることを確認してください。
PaizaCloud・Codespacesのターミナルで作成すれば自動的にLFになります。

Renderの仕組み(概要)

Renderは、GitHubのリポジトリと連携して自動デプロイを行うPaaS(Platform as a Service)です。

  • GitHubにコードをプッシュすると、Renderが build.sh を実行してビルドします。
  • ビルド完了後、gunicorn hajimete_pj.wsgi コマンドでWebサーバーが起動します。
  • 無料プランでは一定時間アクセスがないとスリープし、次のアクセス時に起動します(数分かかる場合があります)。

GitHubへプッシュ

GitHub Codespacesの場合

GitHubレポジトリへPushに書いてあります。

PaizaCloudの場合

PaizaCloudからGitHubへPushする方法に書いてあります。

Renderへデプロイ

Renderアカウントの作成

Render にアクセスし、GitHubアカウントでサインアップします。

GitHubと連携

画面右上のプロフィールアイコンをクリックし、「Account Settings」を選択します。
「Git Deployment Credentials」 セクションを使用します。

  1. 「Add credential」をクリック
  2. 「GitHub」を選択
  3. GitHubの認証画面が開くので、そこでRenderへのアクセスを許可します。
  4. Repository accessでOnly select repositories→対象のレポジトリを選びsavedします。

これが完了すると、GitHub AppsとしてRenderが登録され、リポジトリの一覧が表示されるようになります。

Web Serviceの作成

  1. Renderのダッシュボードで「New +」→「Web Service」をクリック
  2. 先ほどのGitHubリポジトリ(例hajimete_rep)を選択
    • 出ない場合、Searchの右のCredencialsをクリック→「Configure on GitHub」でRepository accessが出るので、先ほどのGitHubリポジトリ(hajimete_rep)を選択。
    • ここのやり方は、しょっちゅう変わるので都度、検索してください。
  3. 以下のように設定します:
項目設定値
Namehajimete-app(任意、URLの一部になります。)
RegionSingapore(日本に近いため)
Branchmaster または main(GitHubのブランチに合わせる)
LanguagePython 3
Build Command./build.sh
Start Commandgunicorn hajimete_pj.wsgi
Instance TypeFree(これを選ばないとデプロイするとAdd cardの画面が出てくる)
  1. 環境変数の設定(下記)
  2. Deploy Web Service」をクリック

環境変数の設定

「Environment Variables」は以下の環境変数を追加します:
環境変数欄追加は「Add EnvironmentVariable」

変数名設定値
PYTHON_VERSION3.12.0(使用しているPythonのバージョン)
SECRET_KEYDjangoの秘密鍵(settings.pySECRET_KEY の値または.envに書いた値)

SECRET_KEYに関しては、こちら↓を参考にしてください。

Pythonで作ったものを公開(デプロイ)、Webサービスの基礎すべて無料でやってみた!【Django】
PythonでWebサービスを作り無料サーバーにアップするところまで紹介します。パソコンにインストすることなく無料のWEBサービスのみ使用大手でよくある無料だけどクレジットカード登録しないとアカウントができないとかもない。Django(We…

デプロイの確認

「Events」タブでビルドのログが確認できます。
==> Build successful 🎉 と表示されればデプロイ成功です。
画面上部のURLをクリックしてアプリが表示されることを確認しましょう。

注意
無料プランでは初回ビルドに数分かかることがあります。
また、一定時間アクセスがないとスリープ状態になり、次のアクセス時に起動まで数分かかります。

目次へ

コード修正方法

コードを修正してRenderに反映させる手順は以下の通りです。

PaizaCloudで修正した場合

ターミナルで以下を実行します:

git status
git add .
git commit -m "修正内容のコメント"
git push origin master

GitHubにプッシュすると、Renderが自動的に新しいコードを検知してデプロイを開始します。

GitHub Codespacesで修正した場合

git add .
git commit -m "修正内容のコメント"
git push origin main

Codespacesの場合はアクセストークンが不要なため、よりシンプルです。

GitHubのWeb画面で直接修正する場合

GitHubでファイルを選択し、右上の鉛筆マーク(Edit this file)をクリックすれば直接編集できます。
編集後、「Commit changes」にコメントを書いて「Commit changes」をクリックすれば保存されます。
この場合もRenderの自動デプロイが走ります。

RenderでAdminに入れない

Renderへのデプロイ後にAdminページ(/admin/)を使いたい場合は、データベースのマイグレーションが必要です。

無料プランはコマンド入力できないので、以下の実行ができません。

python manage.py migrate
python manage.py createsuperuser

(無料プランで可能な対策)環境変数を使って自動(非対話)で作成する

Djangoには、環境変数にあらかじめ値をセットしておくことで、文字入力を求めずにスーパーユーザーを一発で作成する機能(createsuperuser --noinput)があります。

  1. Renderのダッシュボードで環境変数を設定する
    対象のWeb Serviceの 「Environment」 クリックし、以下の3つの環境変数を追加して保存します。
    • DJANGO_SUPERUSER_USERNAME : (例: admin
    • DJANGO_SUPERUSER_EMAIL : (例: admin@example.com
    • DJANGO_SUPERUSER_PASSWORD : (例: 強固なパスワード
  2. 「Save, rebuild, and deploy」で環境変数を保存
  3. スタートコマンドを以下のように書き換える
python manage.py migrate && python manage.py createsuperuser --noinput || true && gunicorn hajimete_pj.wsgi
  • ※末尾に || true を挟んでいるのは、2回目以降の起動時に「そのユーザーは既に存在します」というエラーで全体の起動がストップするのを防ぐためです。|| true(オア・トゥルー)は、「もし手前のコマンドが失敗(エラー)しても、それを無視して強制的に成功扱いにして次に進め!」という、Linuxやターミナルでよく使われるテクニックです。

補足
Renderの無料プランではデータが永続化されないことがあります(インスタンスが再起動するたびにリセット)。
データベースを永続化したい場合は、Renderの「PostgreSQL」サービスを別途追加するか、外部データベースサービスを利用してください。

Djangoのプログラミング部分についての記事は、こちらになります。
この記事を書いたイチゲを応援する(質問でもokです)
Vプリカでのお支払いがおすすめです。
MENTAやってます(ichige)

コメント

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