Heroku

Von Heroku nach Europa umziehen.

run.zero arbeitet wie Heroku mit Buildpacks, Procfile und DATABASE_URL, auf Servern in Deutschland. Neu ist nur eine run-zero.yaml, deine Daten ziehen aber nicht von selbst um.

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

  • Procfile bleibt
  • DATABASE_URL bleibt
  • Server in Nürnberg
claude · run-zero-examples/heroku-migration

> Deploye den Ordner heroku-migration auf run.zero.

runzero_create_appfertigexample-heroku

runzero_push_filesfertigein Commit

runzero_deployfertigDienste und Postgres angelegt

runzero_wait_for_buildfertiglive

live unter https://web-example-heroku-b24cc7f1.run-zero.de

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

Deine App in vier Schritten.

Getestet mit der Flask-App, die live läuft.

  1. 01

    Procfile prüfen

    Die Zeile web muss auf $PORT lauschen, wie auf Heroku. Sie bleibt unverändert.

  2. 02

    Add-ons übersetzen

    Heroku Postgres wird das Postgres-Add-on. Die Plattform setzt DATABASE_URL, du änderst keinen Code.

    run-zero.yaml
    version: "1"services:  web:    port: 8080addons:  db:    type: postgres    attachTo: [web]
  3. 03

    Config Vars übernehmen

    Werte aus heroku config setzt du als Secrets im Dashboard oder mit runzero_set_secrets. Der Dienst startet danach neu.

  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.

Daten umziehen: Diese Schritte bringen deine App, nicht deine Daten. Einen Dump-Import gibt es nicht, einzelne SQL-Befehle gehen über die SQL-Konsole oder runzero_db_query. Für eine große Datenbank ist das heute kein fertiger Umzug.

Dateien

Eine typische Heroku-App.

Flask, gunicorn und Postgres, neu ist nur die Konfiguration.

Dieselbe web-Zeile wie auf Heroku.

Beispiel auf GitHub(öffnet in neuem Tab)
heroku-migration/Procfile
web: gunicorn app:app --bind 0.0.0.0:$PORT

Zählt Besuche in Postgres über DATABASE_URL.

Beispiel auf GitHub(öffnet in neuem Tab)
heroku-migration/app.py
# A typical Heroku app: Flask, gunicorn from the Procfile, Postgres from DATABASE_URL.import osimport psycopgfrom flask import Flask, jsonifyapp = Flask(__name__)DATABASE_URL = os.environ.get("DATABASE_URL")def count_visit() -> int:    # run.zero injects DATABASE_URL with sslmode=require, psycopg accepts it as is.    with psycopg.connect(DATABASE_URL) as conn:        conn.execute("CREATE TABLE IF NOT EXISTS visits (id serial PRIMARY KEY, at timestamptz DEFAULT now())")        conn.execute("INSERT INTO visits DEFAULT VALUES")        return conn.execute("SELECT count(*) FROM visits").fetchone()[0]@app.get("/")def index():    visits = count_visit() if DATABASE_URL else "no database attached"    return f"""<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>From Heroku to run.zero</title></head><body style="font-family:system-ui,sans-serif;max-width:640px;margin:64px auto;padding:0 24px"><h1>From Heroku to run.zero</h1><p>Same Procfile, same DATABASE_URL. Visits stored in Postgres: <strong id="visits">{visits}</strong></p><p><a href="/api/health">/api/health</a></p></body></html>"""@app.get("/api/health")def health():    return jsonify(status="ok", database=bool(DATABASE_URL), platform="run.zero")

flask, gunicorn und psycopg.

Beispiel auf GitHub(öffnet in neuem Tab)
heroku-migration/requirements.txt
flask==3.1.0gunicorn==23.0.0psycopg[binary]==3.2.3
Übersetzung

Heroku-Begriffe auf run.zero.

Was gleich bleibt und was anders heißt.

BuildpacksPaketo-Buildpacks für Node, Python, Go, PHP, Java
ProcfileProcfile, unverändert
DynoDienst mit 0 bis 10 Replicas, je nach Tarif
Heroku PostgresPostgres-Add-on mit DATABASE_URL
Config VarsSecrets am Dienst oder an der App
git push heroku mainPush auf das verbundene Repo, oder runzero_push_files
app.json, Pipelinesrun-zero.yaml, Vorschau-Adressen für Änderungen
Grenzen

Was heute nicht geht.

Damit der Umzug keine Überraschung wird.

  • Braucht den Tarif Entwickler

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

    Preise ansehen
  • Add-ons: Postgres und Keycloak

    Heroku Redis, Kafka oder Marktplatz-Add-ons gibt es hier nicht.

  • Kein Dump-Import

    Für einen Dump gibt es keinen Import. Kleine Daten gehen als SQL über die SQL-Konsole oder runzero_db_query.

  • Kein app.json

    Dienste, Ports und Add-ons beschreibst du in run-zero.yaml.

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.

Zum Umzug.

Muss ich meinen Code ändern?

In der Regel nicht. Procfile, $PORT und DATABASE_URL funktionieren wie auf Heroku. Prüfe nur die Add-ons, die du nutzt.

Funktioniert DATABASE_URL mit SSL?

Ja. Die URL enthält sslmode=require gegen ein selbst signiertes Zertifikat. psycopg nimmt sie ohne Änderung an, node-postgres braucht ssl: { rejectUnauthorized: false } und eine URL ohne sslmode.

Gibt es einen Ersatz für Heroku Scheduler?

Das haben wir nicht getestet, das Beispiel zeigt nur den Prozess web.

Komme ich auch wieder weg?

Ja. Der Code liegt in deinem Repo und die Datenbank gibt es im Dashboard als pg_dump zum Download.

Wo laufen die Server?

Bei Hetzner in Nürnberg, auch die Backups. Mit Auftragsverarbeitungsvertrag.

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.