DjangoをRenderにdeployしてみる - deploy編(2/2)
This content is not available in your language yet.
前の記事からの続きです。
https://wp.netplan.co.jp/archives/4146
Render用に環境変数を整える
セクション「Render用に環境変数を整える」settings.py
DEBUG = 'RENDER' not in os.environSECRET_KEY = os.environ.get('SECRET_KEY')ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS')
RENDER_EXTERNAL_HOSTNAME = os.environ.get('RENDER_EXTERNAL_HOSTNAME')if RENDER_EXTERNAL_HOSTNAME: ALLOWED_HOSTS.append(RENDER_EXTERNAL_HOSTNAME)環境変数にRENDERが定義されていたら DEBUG=False にする。
ALLOWED_HOSTSにRENDER_EXTERNAL_HOSTNAMEを追加する。
PostgreSQLサポートを追加
セクション「PostgreSQLサポートを追加」Render側のデータベース PostgreSQL に合わせてローカル環境に PostgreSQL をインストールします。
https://docs.render.com/deploy-django#adding-postgresql-support
pip install dj-database-url psycopg2-binarypip freeze > requirements.txtbrewを使って PostgreSQL をインストール(MacOS)
https://qiita.com/sakana_gao/items/999bbb1cad90dc35a8b4
brew install postgresqlPostgreSQLサービスを起動
brew services start postgresqlデータベースを作成
CREATE DATABASE postgresdb;CREATE USER postgres WITH PASSWORD 'postgres';ALTER ROLE postgres SET client_encoding TO 'utf8';ALTER ROLE postgres SET default_transaction_isolation TO 'read committed';ALTER ROLE postgres SET timezone TO 'UTC';GRANT ALL PRIVILEGES ON DATABASE postgresdb TO postgres;settings.pyを編集
import dj_database_url ... 'default': dj_database_url.config(default='postgresql://postgres:postgres@wp.netplan.co.jp:5432/postgresdb', conn_max_age=600 )マイグレーション
python manage.py migratestaticファイル提供の設定
セクション「staticファイル提供の設定」https://docs.render.com/deploy-django#updating-an-existing-django-project
pip install 'whitenoise[brotli]'pip freeze > requirements.txtsettings.pyにwhitenoiseを追加
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', ...]build.shを作成(下記の内容を貼り付け)
#!/usr/bin/env bash# Exit on errorset -o errexit
# Modify this line as needed for your package manager (pip, poetry, etc.)pip install -r requirements.txt
# Convert static asset filespython manage.py collectstatic --no-input
# Apply any outstanding database migrationspython manage.py migratebuild.shの実行を可能にする。
chmod a+x build.shgunicorn, uvicornをインストール
pip install gunicorn uvicornpip freeze > requirements.txtローカルで起動してみる。
python -m gunicorn myrender.asgi:application -k uvicorn.workers.UvicornWorkerRenderへデプロイ
セクション「Renderへデプロイ」https://docs.render.com/deploy-django#deploying-to-render
render.yamlを作成
セクション「render.yamlを作成」databases: - name: postgresdb plan: free databaseName: myrender user: postgres
services: - type: web plan: free name: myrender runtime: python buildCommand: "./build.sh" startCommand: "python -m gunicorn myrender.asgi:application -k uvicorn.workers.UvicornWorker" envVars: - key: DATABASE_URL fromDatabase: name: postgresdb property: connectionString - key: SECRET_KEY generateValue: true - key: WEB_CONCURRENCY value: 4上記の中で DATABASE_URL, SECRET_KEY はRender側から提供されます。
Render側のデータベースを作成
セクション「Render側のデータベースを作成」https://docs.render.com/databases#create-your-database
RenderのdashboardからPostgreSQLデータベースを作成します。
Freeプランを選択
データベースを作成すると Internal Database URL の値で環境変数 DATABASE_URL が自動生成されます。
BlueprintのResourcesで対象のサービスをクリック。
Environmentメニューを開く。
画面下の方の
Linked Environment GroupsEnvironment groups are collections of environment variables and secret files that you can share across multiple services.ここで作成したEnv Groupをサービスにリンクする。
Blueprint instanceを追加
セクション「Blueprint instanceを追加」GitHubリポジトリに接続します。
blueprintのプロジェクト名を入力して Apply をクリックすると、
*.onrender.com のようなURLで公開されます。


