Flask
Deploye Flask mit gunicorn, Postgres, Migrationen und RQ- oder Celery-Workern.
Schritt für Schritt: Flask auf DigitalOcean deployen · Flask auf Hetzner deployen · Flask auf Vultr deployen · Flask auf OVHcloud deployen · Flask auf Scaleway deployen · Flask auf UpCloud deployen
- Erkannt anhand von
requirements.txtoderpyproject.toml, dieflaskaufführen. - Web: gunicorn auf
$PORTmitapp:app. Liegt deine App woanders, setze den Startbefehl auf deinmodule:callable(bei einer App-Factory"myapp:create_app()"). - Release: standardmäßig keiner. Mit Flask-Migrate setze ihn auf
flask db upgrade; mit Alembic aufalembic upgrade head. Einerelease:-Zeile imProcfilewird verwendet, falls vorhanden. - Datenbank:
psycopg→ Postgres, mit injiziertemDATABASE_URL. - Workers und Cron: RQ wird angeboten, wenn es eine Abhängigkeit ist. Für Celery füge
worker: celery -A myapp.celery workerzu deinemProcfilehinzu oder füge es im Tab Workers hinzu.
Workers sind ein zweiter Prozess derselben App
Flask hat keine eigene Worker-Konvention, daher wendet Railyard einfach direkt die 12-Factor-Regel an: Deklariere einen zweiten Prozess in deinem Procfile, und er skaliert unabhängig von web.
web: gunicorn app:app --bind 0.0.0.0:$PORT
worker: rq worker --url $REDIS_URL
Oder füge ihn im Tab Workers der App hinzu, ohne das Repo zu berühren, und skaliere beide über die CLI:
railyard scale my-app worker=2
RQ wird automatisch angeboten, wenn es eine Abhängigkeit ist; Celery wird für Flask nicht automatisch erkannt — es gibt keine einheitliche Konvention dafür, wo die Celery-App liegt — deklariere also einmalig selbst ihren Befehl. Siehe Workers und geplante Jobs für Cron: entweder ein geplanter Befehl dort, oder ein zweiter Worker-Prozess, der celery -A myapp.celery beat ausführt.
Konfiguration und Secrets
DATABASE_URL wird injiziert, sobald psycopg/psycopg2 eine Abhängigkeit ist, und REDIS_URL, sobald ein Redis-Client (redis, rq) es ist. Alles andere — SECRET_KEY, FLASK_ENV, Feature-Flags — ist eine normale Env-Variable unter Variables, oder railyard env:set my-app KEY=VALUE über die CLI, sodass dasselbe Image unverändert von Staging bis Produktion läuft: Dev/Prod-Parität, kein Branch zur Build-Zeit. Verweise auf eine Datenbank oder Redis, die als eigener Dienst auf dem Canvas laufen, mit ${{redis.RAILYARD_PRIVATE_URL}} — pro Umgebung aufgelöst. Siehe Variablen und Secrets.
So deployst du
- Aus einem Repo: Füge die Git-URL ein, oder wähle es aus der Liste, sobald GitHub verbunden ist — Railyard liest
requirements.txt/pyproject.toml, füllt gunicorn undDATABASE_URLaus und deployt bei jedem Push. - Über die CLI:
railyard create my-app https://github.com/me/my-app --addons postgres,redis, oderrailyard git:remote && git push railyard mainaus dem Repo heraus. - Ein Klick: Füge den Deploy-Button zu deiner README hinzu, oder veröffentliche im Template-Katalog, damit jeder es mit bereits ausgefüllten Addons und Variablen starten kann.