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
> 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
- Live-DemoLäuft auf run.zero(öffnet in neuem Tab)
- Beispiel-CodeMIT, auf GitHub(öffnet in neuem Tab)
- BuildpacksNode, Python, Go, PHP, Java
- Gehostet in DeutschlandHetzner, Nürnberg
In fünf Schritten live.
Jeder Schritt behebt einen Fehler, den wir beim Testen gesehen haben.
- 01
Web-Root und Server festlegen
project.tomlsetztBP_PHP_SERVER=nginxundBP_PHP_WEB_DIR=public. Werte ausrun-zero.yamlerreichen den Build nicht, nur die Laufzeit. - 02
Routen an index.php geben
Ohne diese Datei liefert nginx für
/api/healtheinen 404, weil es dort keine Datei gibt..nginx.conf.d/laravel-server.conf location / { try_files $uri $uri/ /index.php?$query_string;} - 03
Erweiterungen laden
Ohne diese Datei fehlt
opensslin PHP-FPM und jede Seite endet mit einem 500er..php.ini.d/laravel.ini extension=openssl.soextension=mbstring.so - 04
Schreibbare Pfade nach /tmp
bootstrap/cacheist 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 - 05
Konto anlegen, deployen, APP_KEY setzen
Verbinde deinen Agenten, melde dich mit
/mcpund Authenticate an und bitte ihn um den Deploy.- Setze danach
APP_KEYals Secret des Dienstesweb, im Dashboard oder mitrunzero_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 - Setze danach
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.
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.
# 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.
# 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.
; Extensions Laravel needs at runtime. The Paketo PHP buildpack loads every .ini in this folder.extension=openssl.soextension=mbstring.soEine Seite und eine JSON-Route.
Beispiel auf GitHub(öffnet in neuem Tab)<?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',]));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 ansehenKein 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:überlebtstoragekeinen Neustart, Laravel mit Volume ist nicht getestet. Sitzungen gehören ins Cookie, Logs nach stderr.PHP-Version aus composer.json
require.phpentscheidet, das Beispiel bekam 8.5. Versionen mit bekannter Lücke gehen nicht live.
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_URLkommt 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.