本文へスキップ

Python ​

zbpack は requirements.txt、pyproject.toml(Poetry、uv、PDM)、Pipfile のいずれかを持つ Python アプリをビルドします。FastAPI、Django、Flask を検出し、それぞれに本番用のサーバーを選びます。

フレームワークzbpack が使う起動コマンド
FastAPIuvicorn main:app --host 0.0.0.0 --port 8080
Djangogunicorn --bind :8080 <project>.wsgi
Flaskgunicorn --bind :8080 main:app

Python のバージョンはデフォルトで 3.13 です。.python-version、pyproject.toml、または ZBPACK_PYTHON_VERSION で変更できます。別の方法で起動するには、Settings → Build → zbpack options で ZBPACK_START_COMMAND を設定します。

FastAPI ​

python
# main.py
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def root():
    return {"message": "Hello from FastAPI"}
txt
# requirements.txt
fastapi
uvicorn[standard]

zbpack は main.py、app.py、server.py、app/__init__.py のうち最初に見つかったファイルと、その中で FastAPI(...) を代入した変数(上の例では app)を使います。app/main.py のような別の構成なら、起動コマンドを設定してください。

sh
ZBPACK_START_COMMAND=uvicorn app.main:app --host 0.0.0.0 --port 8080

Django ​

プロジェクトには manage.py と、requirements.txt の gunicorn が必要です。

txt
django
gunicorn

本番の設定は settings.py で変数から読み込みます。

python
import os

SECRET_KEY = os.environ.get("DJANGO_SECRET_KEY", "")
DEBUG = os.environ.get("DJANGO_DEBUG") == "1"
ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS", "").split(",")
CSRF_TRUSTED_ORIGINS = os.environ.get("DJANGO_CSRF_TRUSTED_ORIGINS", "").split(",")

そして Variable タブで設定します。

sh
DJANGO_SECRET_KEY=${PASSWORD}
DJANGO_ALLOWED_HOSTS=${ZENAVO_WEB_DOMAIN}
DJANGO_CSRF_TRUSTED_ORIGINS=${ZENAVO_WEB_URL}

(WEB はサービスのポートの名前です。Networking タブに表示される名前を使ってください。)

静的ファイル ​

settings.py に STATIC_URL と STATIC_ROOT の両方があると、zbpack はビルド中に python manage.py collectstatic --noinput を実行し、gunicorn の前段の nginx でファイルを配信します。settings.py に WhiteNoise のミドルウェアがあれば、WhiteNoise に任せます。

python
STATIC_URL = "static/"
STATIC_ROOT = BASE_DIR / "staticfiles"

ビルドにはサービスの変数がひとつもないので、settings.py は変数なしでも読み込める必要があります。上のように DJANGO_SECRET_KEY は os.environ[...] ではなく os.environ.get(...) で読んでください。

マイグレーション ​

マイグレーションにはデータベースが必要ですが、ビルドからは届かないので、起動時に実行します。

sh
ZBPACK_START_COMMAND=python manage.py migrate --noinput && gunicorn --bind :8080 mysite.wsgi

データベースに接続する ​

プロジェクトに PostgreSQL を追加し、その接続文字列を使います。たとえば dj-database-url や SQLAlchemy で:

sh
DATABASE_URL=${POSTGRESQL_CONNECTION_STRING}
python
import dj_database_url

DATABASES = {"default": dj_database_url.config(conn_max_age=600)}

ドライバーもインストールしてください。PostgreSQL なら psycopg[binary]、MySQL と MariaDB なら mysqlclient か PyMySQL です。

よくある問題 ​

症状原因
起動時に ModuleNotFoundErrorパッケージが requirements.txt(または pyproject.toml)にありません。
Django が 400 Bad Request を返すドメインが ALLOWED_HOSTS にありません。
Django のフォームが CSRF verification failed で失敗するhttps:// のアドレスが CSRF_TRUSTED_ORIGINS にありません。
FastAPI のデプロイが healthy にならないアプリのオブジェクトが main:app にありません。ZBPACK_START_COMMAND を設定してください。
負荷がかかるとワーカーが強制終了されるgunicorn のワーカー数に対してサービスのメモリが足りません。--workers を減らすか、サービスのメモリを増やしてください。

Zeabur とは関係ありません。