PHP

Laravel-App online stellen.

Das PHP-Buildpack erkennt composer.json, installiert die Pakete und liefert public mit nginx und PHP-FPM aus. Dazu kommen Konfigurationsdateien und APP_KEY als Secret.

Für Laravel mit Datenbank heute nicht geeignet: Dem Build-Image fehlt libpq, pdo_pgsql lädt nicht, das Postgres-Add-on ist aus PHP nicht nutzbar.

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

  • Laravel 13 auf PHP 8.5 getestet
  • nginx und PHP-FPM
  • Composer beim Build
claude · run-zero-examples/php-laravel

> Deploye den Ordner php-laravel auf run.zero.

runzero_create_appfertigexample-laravel

runzero_push_filesfertigein Commit

runzero_deployfertigDienste angelegt

runzero_set_secretsfertigAPP_KEY

runzero_wait_for_buildfertiglive

live unter https://web-example-laravel-8c606360.run-zero.de

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

In fünf Schritten live.

Jeder Schritt behebt einen Fehler, den wir beim Testen gesehen haben.

  1. 01

    Web-Root und Server festlegen

    project.toml setzt BP_PHP_SERVER=nginx und BP_PHP_WEB_DIR=public. Werte aus run-zero.yaml erreichen den Build nicht, nur die Laufzeit.

  2. 02

    Routen an index.php geben

    Ohne diese Datei liefert nginx für /api/health einen 404, weil es dort keine Datei gibt.

    .nginx.conf.d/laravel-server.conf
    location / {    try_files $uri $uri/ /index.php?$query_string;}
  3. 03

    Erweiterungen laden

    Ohne diese Datei fehlt openssl in PHP-FPM und jede Seite endet mit einem 500er.

    .php.ini.d/laravel.ini
    extension=openssl.soextension=mbstring.so
  4. 04

    Schreibbare Pfade nach /tmp

    bootstrap/cache ist zur Laufzeit schreibgeschützt. Caches und kompilierte Views gehen nach /tmp.

    run-zero.yaml
    version: "1"services:  web:    port: 8080    env:      APP_ENV: production      APP_DEBUG: "false"      LOG_CHANNEL: stderr      SESSION_DRIVER: cookie      CACHE_STORE: array      VIEW_COMPILED_PATH: /tmp      APP_SERVICES_CACHE: /tmp/services.php      APP_PACKAGES_CACHE: /tmp/packages.php
  5. 05

    Konto anlegen, deployen, APP_KEY setzen

    Verbinde deinen Agenten, melde dich mit /mcp und Authenticate an und bitte ihn um den Deploy.

    • Setze danach APP_KEY als Secret des Dienstes web, im Dashboard oder mit runzero_set_secrets.
    • Den Wert erzeugst du lokal mit php artisan key:generate --show.
    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

Das macht Laravel startklar.

Die Konfiguration aus den Schritten und eine Beispielroute. Der Rest ist das Laravel-Gerüst.

Sagt dem Buildpack beim Build: nginx als Server, public als Web-Root.

Beispiel auf GitHub(öffnet in neuem Tab)
php-laravel/project.toml
# Build settings for the Paketo PHP buildpack: nginx plus PHP-FPM, Laravel's public/ as web root.[_]schema-version = "0.2"[[io.buildpacks.build.env]]name = "BP_PHP_SERVER"value = "nginx"[[io.buildpacks.build.env]]name = "BP_PHP_WEB_DIR"value = "public"

Schickt jede Route, die keine Datei ist, an index.php.

Beispiel auf GitHub(öffnet in neuem Tab)
php-laravel/.nginx.conf.d/laravel-server.conf
# Included into the server block of the Paketo nginx config: send every route that is not a file to Laravel.location / {    try_files $uri $uri/ /index.php?$query_string;}

Lädt openssl und mbstring für PHP-FPM.

Beispiel auf GitHub(öffnet in neuem Tab)
php-laravel/.php.ini.d/laravel.ini
; Extensions Laravel needs at runtime. The Paketo PHP buildpack loads every .ini in this folder.extension=openssl.soextension=mbstring.so

Eine Seite und eine JSON-Route.

Beispiel auf GitHub(öffnet in neuem Tab)
php-laravel/routes/web.php
<?phpuse Illuminate\Support\Facades\Route;// One page and one JSON route that prove PHP and Laravel run on run.zero.Route::get('/', fn () => view('run-zero', [    'php' => PHP_VERSION,    'laravel' => app()->version(),]));Route::get('/api/health', fn () => response()->json([    'status' => 'ok',    'runtime' => 'php '.PHP_VERSION,    'laravel' => app()->version(),    'platform' => 'run.zero',]));
Grenzen

Was heute nicht geht.

Ehrlich, bevor du dich festlegst.

  • Braucht den Tarif Entwickler

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

    Preise ansehen
  • Kein Postgres aus PHP

    Dem Build-Image fehlt libpq. Postgres nutzt du aus einem Node- oder Python-Dienst, nicht aus Laravel.

  • Kein dauerhafter storage

    Ohne volumes: überlebt storage keinen Neustart, Laravel mit Volume ist nicht getestet. Sitzungen gehören ins Cookie, Logs nach stderr.

  • PHP-Version aus composer.json

    require.php entscheidet, das Beispiel bekam 8.5. Versionen mit bekannter Lücke gehen nicht live.

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 PHP und Laravel.

Kann Laravel das Postgres-Add-on nutzen?

Heute nicht. Dem Build-Image fehlt libpq, deshalb lädt pdo_pgsql nicht und der Build bricht ab.

Geht auch PHP ohne Laravel?

Das Buildpack erkennt composer.json, ohne project.toml liefert es laut seiner Doku den Ordner htdocs aus. Getestet haben wir nur Laravel.

Warum APP_KEY nicht in run-zero.yaml?

run-zero.yaml liegt im Repo. Geheime Werte gehören in die Secrets des Dienstes, die Plattform setzt sie als Umgebungsvariable.

Laufen Queue-Worker?

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

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.