VercelにDjangoをデプロイする
Vercelは簡単にGitHubと連携できるホスティングサービスであり、無料でも充分に動作します。
主にNext.jsやNuxt.jsなどのjavascript系の言語での動作例や解説はあるものの、他言語での説明資料や動作例が充実していません。
VercelはPythonにも対応しており、DjangoをVercel上で動作させることも可能です。
今回はVercel上にDjangoをデプロイさせる方法についてまとめました。
Vercel上でも以下のような初期ページが生成されることを目的としています。
Djangoのプロジェクトを用意
まずはDjango
の環境をローカルで構築しましょう。
Pythonのバージョンは3.9
にして、Vercel上でも同じバージョンで動かします。
Django
のバージョンは最新の4.0.5
にします。
$ python --version
Python 3.9.0
$ pip install Django==4.0.5
以下のコマンドでDjangoのプロジェクトを作成します。カレントディレクトリ上にconfig
とmanage.py
が作成されるはずです。
$ django-admin startproject config .
$ ls
config
manage.py
requirements.txtを作成
requirements.txt
をカレントディレクトリ上に作成します。
$ touch requirements.txt
$ ls
requirements.txt
config
manage.py
requirements.txt
の中身にはインストールをしたDjango==4.0.5
を加えます。
Django==4.0.5
settings.pyの編集
config/settings.py
の内容を以下のように編集します。
# ALLOWED_HOSTS = []を以下のようにして、vercel.appでも開けるようにする
ALLOWED_HOSTS = [
'*',
'.vercel.app'
]
# LANGUAGE_CODEとTIME_ZONEを以下のように変更して日本語表示にする
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
DATABASESを空にする
初期設定であるdb.sqlite3
を使用する場合は、以下のように内容を空にします。
DATABASES = {}
静的ファイルのビルドのためにSTATIC_ROOTを設定
python manage.py collectstatic
を使用するためにもSTATIC_ROOT
を設定します。
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
静的ファイルをビルドするスクリプトを用意
vercelにデプロイされたタイミングでbuild_files.sh
というシェルスクリプトのファイルが実行されるようにします。
$ touch build_files.sh
ファイルの中身としては、Djangoがインストールされて、collectstatic
を実行することで静的ファイルをビルドします。
pip install -r requirements.txt
python3.9 manage.py collectstatic
Vercel.jsonを作成
vercelにデプロイするための設定ファイルとしてvercel.json
を作成します。
$ touch vercel.json
$ ls
build_files.sh
config
manage.py
requirements.txt
vercel.json
vercel.json
の中身としては以下のようになります。
{
"regions": [
"hnd1"
],
"builds": [
{
"src": "config/wsgi.py",
"use": "@vercel/python",
"config": {
"maxLambdaSize": "15mb",
"runtime": "python3.9"
}
},
{
"src": "build_files.sh",
"use": "@vercel/static-build",
"config": {
"distDir": "static"
}
}
],
"routes": [
{
"src": "/static/(.*)",
"dest": "/static/$1"
},
{
"src": "/(.*)",
"dest": "config/wsgi.py"
}
]
}
configの中にあるruntimeを以下のようにすることで、python3.9
上で実行するようにします。
{
"src": "config/wsgi.py",
"use": "@vercel/python",
"config": {
"maxLambdaSize": "15mb",
"runtime": "python3.9"
}
}
vercel.jsonの設定項目としては以下の公式のドキュメントが参考になります。
config/wsgi.pyファイルを編集する
最後にconfig/wsgi.py
ファイルを編集して、最後の行にapp = application
を加えます。
"""
WSGI config for config project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
application = get_wsgi_application()
app = application
app = application
Vercel上でデプロイする
いよいよデプロイを行ってきます。
上記にアクセスしてダッシュボードを開きます。そこから「+ New Project」をクリックして開き、「Import Git Repository」から対象のリポジトリを選択します。
「Deploy」をクリックすることでデプロイが実行され、一番上のような初期のDjangoの画面が表示されるはずです。
参考記事
Discussion