Langsung ke konten

Python ​

zbpack membangun aplikasi Python yang punya requirements.txt, pyproject.toml (Poetry, uv, PDM), atau Pipfile. zbpack mendeteksi FastAPI, Django, dan Flask, lalu memilih server produksi untuk masing-masing.

FrameworkPerintah start yang dipakai zbpack
FastAPIuvicorn main:app --host 0.0.0.0 --port 8080
Djangogunicorn --bind :8080 <project>.wsgi
Flaskgunicorn --bind :8080 main:app

Versi Python bawaannya 3.13; atur yang lain di .python-version, pyproject.toml, atau dengan ZBPACK_PYTHON_VERSION. Untuk menjalankan aplikasi dengan cara lain, atur ZBPACK_START_COMMAND di Settings → Build → zbpack options.

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 mengambil yang pertama ada dari main.py, app.py, server.py, dan app/__init__.py, serta variabel yang diberi FastAPI(...) di dalamnya (app di atas). Dengan struktur lain, seperti app/main.py, atur perintah start:

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

Django ​

Proyek memerlukan manage.py dan gunicorn di requirements.txt:

txt
django
gunicorn

Baca pengaturan produksi dari variabel di 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(",")

lalu atur di tab Variable:

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

(WEB adalah nama port layanan; gunakan nama yang tampil di tab Networking-nya.)

File statis ​

Bila settings.py mengatur STATIC_URL dan STATIC_ROOT sekaligus, zbpack menjalankan python manage.py collectstatic --noinput saat build dan menyajikan file dengan nginx di depan gunicorn, atau menyerahkannya ke WhiteNoise bila middleware-nya ada di settings.py:

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

Build tidak punya variabel layanan apa pun, jadi settings.py harus bisa dimuat tanpanya: baca DJANGO_SECRET_KEY dengan os.environ.get(...) seperti di atas, bukan os.environ[...].

Migrasi ​

Migrasi memerlukan database, yang tidak bisa dijangkau build, jadi jalankan saat start:

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

Hubungkan database ​

Tambahkan PostgreSQL ke proyek dan gunakan connection string-nya, misalnya dengan dj-database-url atau SQLAlchemy:

sh
DATABASE_URL=${POSTGRESQL_CONNECTION_STRING}
python
import dj_database_url

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

Pasang juga driver-nya: psycopg[binary] untuk PostgreSQL, mysqlclient atau PyMySQL untuk MySQL dan MariaDB.

Masalah umum ​

GejalaPenyebab
ModuleNotFoundError saat startPaketnya tidak ada di requirements.txt (atau pyproject.toml).
Django menjawab 400 Bad RequestDomain tidak ada di ALLOWED_HOSTS.
Form Django gagal dengan CSRF verification failedAlamat https:// tidak ada di CSRF_TRUSTED_ORIGINS.
Deployment FastAPI tidak pernah sehatObjek aplikasi tidak berada di main:app. Atur ZBPACK_START_COMMAND.
Worker dihentikan saat beban tinggiMemori layanan terlalu kecil untuk jumlah worker gunicorn. Kurangi --workers, atau beri layanan lebih banyak memori.

Tidak berafiliasi dengan Zeabur.