Server und Deployment: Apache und PHP-FPM, Velocity, FrankenPHP
Diese Seite richtet sich an Entwickler, die Framework-Anwendungen auf PHP-FPM, auf einem Anwendungsserver (Laravel
Octane, RoadRunner, Worker-Modus von FrankenPHP) oder auf Gunicorn, Puma oder einem Servlet-Container bereitstellen.
Exponential läuft unter drei Servern, die alle über ./console exp:velocity und settings/velocity.ini gesteuert
werden, und bringt einen einzigen Befehl mit, der jeden Schritt ausführt, den eine Codeänderung erfordert (Server: Velocity, PHP-FPM und FrankenPHP).
Inhalt
- Drei Arten der Auslieferung
- Regeln für persistente Worker
- Eine Änderung bereitstellen
- Was wie übertragen wird
- Ein Release, Schritt für Schritt
- Im Vergleich mit anderen Stacks
Drei Arten der Auslieferung
| Server | Wert für Engine | Prozessmodell |
|---|---|---|
| Apache oder nginx mit PHP-FPM | (keine Engine) | ein Request pro PHP-Prozesslauf, nichts bleibt erhalten |
| Exponential Velocity | qbix (empfohlen) | ein Elternprozess lädt die Anwendung einmal und forkt persistente Worker, die viele Requests bedienen und nach jedem zurückgesetzt werden; ein Response-Cache beantwortet wiederholte öffentliche Requests |
| FrankenPHP | frankenphp | Caddy mit eingebautem PHP, eine einzige Binärdatei |
Seit 6.0.15 ist Velocity Teil von Exponential: composer.json verlangt se7enxweb/exponential-velocity, daher ist es
in jeder Installation vorhanden. velocity.ini [ServerSettings] Engine wird mit php ausgeliefert (dem eingebauten
Server von PHP, für die Entwicklung); jede echte Site setzt qbix (Velocity-Engines,
Die Site ausliefern, Deployment-Leitfaden).
Regeln für persistente Worker
- Kein Zustand pro Request in statischen Eigenschaften oder globalen Variablen ohne Zurücksetzen.
- Kein
exitzur Ablaufsteuerung außereZExecution::cleanExit(), und dessen Exception niemals abfangen. - Eingaben über
eZHTTPToollesen, das der Kernel pro Request vorbereitet, nicht direkt über$_POST. - Registrierungen von Event-Listenern müssen idempotent sein.
- Eine geänderte Klasse oder Einstellung erreicht die Worker erst nach einem Neustart; eine neue Kernel-Klasse
braucht
--kernel.
Das sind dieselben Regeln, die Octane oder RoadRunner vorgeben; Code, der sie einhält, verhält sich unter PHP-FPM genauso (Velocity: der Server mit persistenten Workern).
Eine Änderung bereitstellen
./console exp:velocity deploy --dry-run --allow-root-user # what it would do
./console exp:velocity deploy --allow-root-user # the usual case
./console exp:velocity deploy --kernel --allow-root-user # a kernel class was added or renamedDer Reihe nach: Autoloads der Erweiterungen (--kernel: auch des Kernels), INI- und Template-Caches, das
Engine-Archiv, wenn sich Kernel-Dateien geändert haben (jede Datei wird zuerst geparst, sodass eine fehlerhafte Datei
das Deployment stoppt, bevor ein Server angefasst wird), ein Reload von PHP-FPM bei Bedarf, der Neustart von Velocity,
dann Inhalts-, HTTP- und Template-Block-Caches und zuletzt der Response-Cache von Velocity, sodass eine von altem Code
gerenderte Seite nie erneut zwischengespeichert wird. Der Befehl gibt für jeden Schritt PASS, FAIL oder SKIP aus und
bricht beim ersten Fehler ab (Deployment mit Velocity). --packer
leert zusätzlich gepackte Stylesheets und Skripte.
Was wie übertragen wird
| Was | Übertragen durch |
|---|---|
| Kernel und Erweiterungen | Git und Composer (composer.lock im Projekt eingecheckt) |
| Ihre Erweiterung | ihren Git-Tag, per Version verlangt |
| Einstellungen | Git, ohne Geheimnisse; Geheimnisse werden pro Maschine gesetzt |
| Inhaltsklassen | Pakete oder Upgrade-Skripte |
| Tabellen | Ihre Installations- und Upgrade-Befehle (Migrationen) |
| Inhalte | bleiben in der Produktion; kopieren Sie die Produktion nach Staging, nie umgekehrt |
Ein Release, Schritt für Schritt
- Die Tests laufen in der CI durch.
- Auf Staging bereitstellen, die Upgrade-Schritte ausführen, testen.
- Die Produktion sichern.
- Wartungsmodus, wenn das Release Daten ändert (
php bin/php/maintenance.php on --allow-admin). - Den Code aktualisieren (Git oder
composer update <package>), die Upgrade-Schritte ausführen. ./console exp:velocity deploy(--kernel, wenn sich Kernel-Klassen geändert haben).- Wartungsmodus aus; prüfen mit
exp:velocity status,exp:cache status, den Seiten und dem Fehlerprotokoll.
Ein Rollback ist der vorherige Tag plus eine Wiederherstellung der Sicherung, wenn Upgrade-Schritte Daten verändert haben.
Im Vergleich mit anderen Stacks
| Stack | Typisches Deployment | Exponential |
|---|---|---|
| Symfony, Laravel auf PHP-FPM | composer install, cache:clear, Migrationen, FPM-Reload | composer, Ihre Upgrade-Befehle, exp:velocity deploy |
| Laravel Octane, RoadRunner | octane:reload | exp:velocity deploy (Neustart von Velocity inbegriffen) |
| Django, Rails | migrieren, Assets sammeln, Gunicorn oder Puma neu starten | derselbe Ablauf |
Verwandte Seiten
- Velocity ist Teil von Exponential 6.0.15
- FrankenPHP als Web-Engine von Exponential
- Anwendungen skalieren
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.