Python

FastAPI-App online stellen.

Lege requirements.txt, ein Procfile mit $PORT und eine run-zero.yaml an. Das Buildpack installiert die Pakete und startet Uvicorn, Flask läuft genauso mit gunicorn.

Braucht den Tarif Entwickler, kostenlos gibt es nur Websites. Preise · Grenzen vorab prüfen

  • FastAPI und Flask getestet
  • Procfile wie bei Heroku
  • HTTPS ab dem ersten Deploy
claude · run-zero-examples/python-fastapi

> Deploye den Ordner python-fastapi auf run.zero.

runzero_create_appfertigexample-fastapi

runzero_push_filesfertigein Commit

runzero_deployfertigDienste angelegt

runzero_wait_for_buildfertiglive

live unter https://web-example-fastapi-84f30cf3.run-zero.de

Die Sitzung, mit der die Live-Demo entstanden ist, mit den echten MCP-Tools.
Ablauf

In vier Schritten live.

Getestet mit dem Beispiel, das live läuft.

  1. 01

    Abhängigkeiten festhalten

    requirements.txt im Wurzelverzeichnis lässt das Buildpack Python erkennen. Pipfile und pyproject.toml erkennt es laut Doku auch.

  2. 02

    Procfile schreiben

    Der Prozess web bekommt die Adresse und muss auf 0.0.0.0:$PORT lauschen.

    Procfile
    web: uvicorn main:app --host 0.0.0.0 --port $PORT
  3. 03

    run-zero.yaml anlegen

    Ein Dienst, Port 8080.

    run-zero.yaml
    version: "1"services:  web:    port: 8080
  4. 04

    Konto anlegen und deployen

    Lege ein Konto an, verbinde deinen Agenten mit dem Befehl und melde dich in Claude Code mit /mcp und Authenticate an.

    • Dann schreibst du dem Agenten: Deploye dieses Repo auf run.zero.
    Ohne Agent

    Lege die App im Dashboard an und verbinde dein GitHub-Repo. Jeder Push baut neu.

    Claude Code verbinden
    claude mcp add --transport http \  -s user run-zero \  https://api.run-zero.de/mcp \  --client-id runzero-cli \  --callback-port 53761

Nach 1 bis 3 Minuten läuft die App unter https://web-<app>.run-zero.de. Prüfe eine Route deiner App, im Beispiel /api/health. Ist der Build rot, nennt runzero_get_build_logs den Grund.

Dateien

Drei Dateien plus Konfiguration.

Genau so liegen sie im Beispiel, das live läuft.

Die App mit / und /api/health, /docs kommt von FastAPI.

Beispiel auf GitHub(öffnet in neuem Tab)
python-fastapi/main.py
# Minimal FastAPI app for run.zero. Uvicorn binds to $PORT, see Procfile.import platformfrom fastapi import FastAPIfrom fastapi.responses import HTMLResponseapp = FastAPI(title="FastAPI on run.zero")@app.get("/", response_class=HTMLResponse)def index() -> str:    return """<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>FastAPI on run.zero</title></head><body style="font-family:system-ui,sans-serif;max-width:640px;margin:64px auto;padding:0 24px"><h1>FastAPI on run.zero</h1><p>This Python app was built by a Paketo buildpack and runs under Uvicorn.</p><p><a href="/api/health">/api/health</a> · <a href="/docs">/docs</a></p></body></html>"""@app.get("/api/health")def health() -> dict:    return {"status": "ok", "runtime": f"python {platform.python_version()}", "platform": "run.zero"}

fastapi und uvicorn mit fester Version.

Beispiel auf GitHub(öffnet in neuem Tab)
python-fastapi/requirements.txt
fastapi==0.115.6uvicorn==0.34.0
Frameworks

Dieselbe Zeile, anderer Server.

Nur das Procfile ändert sich.

FastAPIweb: uvicorn main:app --host 0.0.0.0 --port $PORT
Flaskweb: gunicorn app:app --bind 0.0.0.0:$PORT
Django, nicht getestetweb: gunicorn projekt.wsgi --bind 0.0.0.0:$PORT
Grenzen

Was heute nicht geht.

Damit der erste Build durchläuft.

  • Braucht den Tarif Entwickler

    Free hat keine Apps mit Server und kein Postgres, der Deploy bricht dort ab.

    Preise ansehen
  • Python-Version

    Die Live-Demo läuft mit der Standardversion des Buildpacks, zum Zeitpunkt des Tests 3.11.

  • Dateien brauchen ein Volume

    Ohne volumes: überleben SQLite-Dateien und Uploads keinen Neustart. Mit Volume nur ab Tarif Entwickler, getestet haben wir es mit dem PocketBase-Image.

  • Django nicht getestet

    FastAPI und Flask laufen live. Für Django zeigen wir nur den Startbefehl.

Betrieb

Was du nicht mehr selbst machst.

Build, HTTPS, Datenbank und Backups laufen auf der Plattform.

  • Daten bleiben in Deutschland

    Server und Backups bei Hetzner in Nürnberg. Mit Auftragsverarbeitungsvertrag.

  • HTTPS automatisch

    Jeder Dienst bekommt eine Adresse unter run-zero.de, eigene Domains ein Zertifikat von Let’s Encrypt.

  • Postgres als Add-on

    Ein Eintrag in run-zero.yaml, DATABASE_URL kommt als Umgebungsvariable.

  • Kein Lock-in

    Dein Code bleibt in deinem Repo, die Datenbank gibt es als Dump zum Download.

Fragen.

Zu Python.

Geht das mit Flask?

Ja. Das Heroku-Beispiel ist eine Flask-App mit gunicorn und Postgres, sie läuft live.

Wie verbinde ich Postgres aus Python?

Hänge das Postgres-Add-on an. psycopg nimmt DATABASE_URL samt sslmode=require ohne Änderung an.

Kann ich einen Worker starten?

Weitere Prozesstypen im Procfile laufen laut Doku ohne eingehende Adresse. Getestet haben wir hier nur den Prozess web.

Ist /docs öffentlich?

Ja, FastAPI liefert /docs mit aus. Schalte es mit docs_url=None ab, wenn du es nicht willst.

Weitere Anleitungen

Alle Anleitungen

Dein Code. Live auf run.zero.

Kostenlos gibt es eine Website, ohne Kreditkarte. Apps mit Server, Datenbank und eigene Domain gibt es ab dem Tarif Entwickler.