Zum Inhalt springen
EdgeServers
Blog

Zero-Downtime-Laravel-Deploys — die Atomic-Symlink-Pipeline, die Queues ehrlich hält

20. Mai 2026 · 1 Min. Lesezeit · von Sudhanshu K.

„Zero-Downtime-Laravel-Deploys" sind es selten. Das Release-Verzeichnis wird frisch gebaut, der Symlink wird atomar aktualisiert — soweit so gut — aber die Queue-Worker zeigen noch auf den alten Code, und OPcache auf dem laufenden PHP-FPM wurde nicht zurückgesetzt, also können Requests nach dem Symlink-Swap mehrere Sekunden lang einen Mix aus alten und neuen Code-Pfaden ausführen.

Dies ist die Deploy-Pipeline, die wir ausliefern und die Deploys tatsächlich langweilig hält.

Das Release-Verzeichnis + atomarer Symlink

# /var/www/app/
#   releases/
#     2026-05-20-123456/   ← neues Release-Verzeichnis
#     2026-05-19-090000/   ← vorheriges, für Rollback behalten
#   current → releases/2026-05-20-123456   ← atomarer Symlink
 
cd /var/www/app/releases
git clone --depth 1 git@github.com:org/app.git 2026-05-20-123456
cd 2026-05-20-123456
composer install --no-dev --optimize-autoloader
ln -s /var/www/app/shared/.env .env
ln -s /var/www/app/shared/storage storage
 
php artisan migrate --force --no-interaction
php artisan event:cache
php artisan route:cache
php artisan view:cache
 
ln -nfs /var/www/app/releases/2026-05-20-123456 /var/www/app/current
php artisan queue:restart
sudo systemctl reload php8.3-fpm

ln -nfs ist auf POSIX atomar — Nginx sieht nie einen halb aktualisierten Symlink. queue:restart weist Worker an, nach ihrem aktuellen Job graceful auszusteigen. systemctl reload php8.3-fpm setzt OPcache zurück, ohne Verbindungen zu droppen.

Der vollständige Beitrag behandelt:

  • Pre-Deploy-composer install — niemals auf dem Live-Host, immer woanders gebaut
  • Die Migrations-Sicherheits-Story: nur rückwärtskompatible Schema-Änderungen
  • Queue-Worker-Handoff — alte drainen, neue starten, kein Job-Verlust
  • OPcache-Reset-Timing relativ zum Symlink-Swap
  • Rollback in 5 Sekunden: Symlink zurück auf vorheriges Release zeigen
  • Das shared/-Verzeichnis-Pattern (.env, storage/, persistente Uploads)

Wir liefern diese Deploy-Pipeline auf jedem gemanagten Laravel-Kunden aus.

Vollständiger Artikel verfügbar

Vollständigen Artikel lesen