Laravel
Deploye Laravel mit MySQL oder Postgres, APP_KEY, Queue-Workern, Horizon und dem Scheduler.
Schritt für Schritt: Laravel auf DigitalOcean deployen · Laravel auf Hetzner deployen · Laravel auf Vultr deployen · Laravel auf OVHcloud deployen · Laravel auf Scaleway deployen · Laravel auf UpCloud deployen
- Release:
php artisan migrate --force. - Variablen:
DB_HOST,DB_PORT,DB_DATABASE,DB_USERNAME,DB_PASSWORDundAPP_URLaus deiner.env.examplewerden mit der provisionierten Datenbank und der URL der App verdrahtet.APP_KEYwird imbase64:-Format von Laravel generiert. - Workers:
php artisan queue:work, oderphp artisan horizon, wennlaravel/horizoninstalliert ist. - Octane: Mit
laravel/octaneincomposer.jsonund ohne Dockerfile führt der Web-Prozess automatischphp artisan octane:start --server=frankenphp --host=0.0.0.0 --port=$PORTaus. - Reverb: Mit
laravel/reverbincomposer.jsonwird für dich einreverb-Worker hinzugefügt, derphp artisan reverb:startausführt.
Queue-Worker und der Scheduler als Prozesse
queue (oder horizon), reverb und ein scheduler-Prozess sind dasselbe Image wie web, nur mit einem anderen artisan-Befehl gestartet — eine Codebasis und ein Build, mehrere Prozesstypen, jeder für sich skaliert.
web: php artisan octane:start --server=frankenphp --host=0.0.0.0 --port=$PORT
queue: php artisan queue:work
scheduler: php artisan schedule:work
Railyard fügt queue (oder horizon, wenn es installiert ist) automatisch hinzu; ein scheduler-Prozess, der schedule:work ausführt, wird ebenfalls angeboten, sobald routes/console.php oder bootstrap/app.php irgendetwas plant. Bevorzuge stattdessen Railyards eigenes Cron und lass es php artisan schedule:run in festem Intervall ausführen — beides funktioniert, da schedule:run nur tatsächlich fällige Tasks auslöst. Füge weitere Prozesse im Tab Workers hinzu, oder skaliere die vorhandenen über die CLI:
railyard scale my-app queue=2
Queue- und Cache-Backend
QUEUE_CONNECTION, CACHE_STORE, SESSION_DRIVER oder BROADCAST_CONNECTION, in deiner .env.example auf redis gesetzt (oder laravel/horizon selbst), provisioniert Redis und injiziert automatisch dessen Verbindungsvariablen — kein Addon, das man händisch hinzufügen müsste. Für die Datenbank gilt dieselbe Regel: DB_CONNECTION=pgsql oder mysql in .env.example entscheidet, welche Engine provisioniert wird.
Konfiguration und Secrets
Jede Variable, die Laravels Konfiguration mit env() liest, ist eine normale Variable unter Variables, oder wird mit railyard env:set my-app KEY=VALUE gesetzt — nie ins Image eingebacken, sodass derselbe Build unverändert von Staging bis Produktion läuft: Dev/Prod-Parität, kein Rebuild pro Umgebung. APP_KEY wird einmalig in Laravels eigenem base64:-Format generiert und verschlüsselt; Keys von Drittanbietern werden niemals erfunden. 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
composer.jsonund.env.example, fülltartisan migrate, den Queue-Worker und die provisionierte Datenbank aus und deployt bei jedem Push. - Über die CLI:
railyard create my-app https://github.com/me/my-app --addons mysql,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.