Mit unserer Schritt-für-Schritt-Anleitung möchten wir zeigen, wie FrankenPHP, ein moderner, in Go geschriebener PHP-App-Server zur Beschleunigung von PHP-Anwendungen - auf Upsun verwendet und konfiguriert werden kann.
Um die folgenden Schritte in dieser Anleitung auszuführen, müssen sie ihre PHP-Anwendung auf Upsun hosten. Details dazu finden sie in dieser Anleitung zum hosten einer Symfony-Demo-Anwendung auf Upsun.
Da wir neue Features nie direkt in der Produktion testen, werden wir eine neue Umgebung erstellen, um unsere Symfony-Demo-Anwendung zu testen und für die Verwendung von FrankenPHP zu konfigurieren.
Um eine neue Umgebung für unser Projekt zu erstellen, verwenden sie den folgenden Befehl:
symfony branch staging --type=staging
Dieser Befehl erstellt eine neue aktive Staging-Umgebung (vom Typ staging
) und wechselt automatisch die lokale Git-Verzweigung zu staging
.
Jetzt ist es an der Zeit, zu zeigen, wie FrankenPHP verwendet wird. Dieser aufregende PHP-Webserver wurde für einen ähnlichen Zweck wie Swoole und RoadRunner entwickelt : um die Ladezeit von PHP-Anwendungen zu beschleunigen. Wie konfiguriert man ihn also in Upsun?
Kevin Dunglas von Les Tilleuls stellt ein eingebautes FrankenPHP-Image zur Verfügung , das verwendet werden kann, um einen FrankenPHP-PHP-Server zu betreiben, wenn über den von Upsun bereitgestellten PHP-FPM-Server bevorzugt.
Um dies zu tun, öffnen sie ihren Quellcode in ihrer bevorzugten IDE und aktualisieren ihre .upsun/config.yaml
Datei, indem sie die folgenden Schritte durchführen:
1. Suchen sie den Abschnitt applications.app.web
und ändern sie ihn entsprechend: Alle HTTP-Aufrufe müssen durch die Anwendung laufen und das standardmäßige Upstream-HTTP-Protokoll muss tcp-Unix-Sockets verwenden. Außerdem müssen Sie eine commands.start
definieren , um den FrankenPHP-Server zu starten.
applications:
app:
...
web:
locations:
"/":
root: "public"
expires: 1h
#passthru: "/index.php"
passthru: true
scripts: false
allow: false
upstream:
# important for PHP we default to unix sockets
socket_family: tcp
protocol: http
commands:
start: ./frankenphp php-server --listen=localhost:$PORT --root=$PLATFORM_DOCUMENT_ROOT
2. Da FrankenPHP Schreibzugriff auf einen .
local-Ordner benötigt , müssen sie einen Mount (=schreibbarer Ordner innerhalb ihres App-Containers) hinzufügen , damit FrankenPHP dies tun kann. Nutzen wir den Abschnitt applications.app.mounts
in ihrer .upsun/config.yaml
und fügen sie die folgende .local
mount Konfiguration hinzu:
applications:
app:
...
mounts:
...
".local": { source: storage, source_path: frankenphp-local}
applications:
app:
...
hooks:
build: |
set -x -e
curl -fs https://get.symfony.com/cloud/configurator | bash
NODE_VERSION=18 symfony-build
curl -fsS https://raw.githubusercontent.com/upsun/snippets/main/src/install-frankenphp.sh | { bash /dev/fd/3 5.1.1 ; }
4. Fügen sie die FrankenPHP-Laufzeitumgebung zu ihrem Symfony-Projekt hinzu. Laut der FrankenPHP-Dokumentationsseite müssen sie das folgende Bundle zur Anwendung hinzufügen:
composer require runtime/frankenphp-symfony
5. Fügen Sie eine APP_RUNTIME-Umgebungsvariable hinzu - um Symfony mitzuteilen, dass es die neue FrankenPHP-Runtime verwenden soll, benötigen Sie eine Umgebungsvariable namens APP_RUNTIME
. Nutzen sie dazu in ihrer .upsun/config.yaml
den Abschnittapplications.app.variables
und fügen sie Folgendes hinzu:
applications:
app:
...
variables:
php: ...
env:
APP_RUNTIME: 'Runtime\\FrankenPhpSymfony\\Runtime'
6. Deployen sie die Änderungen zu Staging.
git add composer.json composer.lock symfony.lock .upsun/config.yaml install_frankenphp.sh
git commit -m "Use FrankenPHP instead of PHP-FPM"
symfony deploy # or upsun push
7. Öffnen sie die URL ihrer Staging-Umgebung. Um die entsprechende Umgebungs-URL zu öffnen, verwenden Sie den folgenden Befehl:
symfony environment:url
8. In Production mergen. Wenn Sie mit dem Verhalten ihrer Anwendung zufrieden sind, können sie die Ergebnisse mit folgendem Befehl in den Hauptzweig
der Produktion überführen:
symfony merge
symfony checkout main
git pull upsun main
symfony environment:delete staging
git fetch --prune
Wenn sie tiefer in die Verwendung von FrankenPHP oder anderen PHP-Servern wie Swoole oder RoadRunner mit ihrer Symfony-Anwendung auf Upsun eintauchen möchten , werfen sie einen Blick auf diesen inspirierenden Artikel von Sergii Dolgushev, der es wert ist, gelesen zu werden.
Während er sich auf die Installation von FrankenPHP konzentriert, dient dieser Leitfaden auch als Einführung in die Verwendung alternativer PHP-Server, die oft wegen ihrer beeindruckenden Leistung auf Upsun eingesetzt werden.
Die Anwendung muss nur einmal gebootet werden und verbleibt dann im Speicher und im Cache, so dass sie nicht bei jeder eingehenden Anfrage neu instanziiert werden muss. Bei der Verwendung von PHP-FPM wird jedes Mal, wenn ihre Anwendung ein PHP-Skript ausführt, dieses PHP-Skript in den Speicher geladen und am Ende seiner Ausführung wieder entfernt. Darüber hinaus verfügen einige alternative Server über eingebettete asynchrone Funktionen, die den technischen Horizont noch mehr erweitern.
Auch wenn die Performanceverbesserungen durch die Verwendung eines alternativen PHP-Servers wie FrankenPHP vielversprechend sind, sollte man vorsichtig vorgehen. Ein einfacher Serverwechsel löst keine tiefsitzenden Performanceprobleme oder andere zugrunde liegende Probleme, sondern ist eher eine vorübergehende Lösung für ein größeres Problem.
Ein hervorragender erster Schritt besteht darin, sich mit den Dashboards für die Anwendungs- und Architekturbeobachtung zu befassen, um kritische Bereiche zu identifizieren, die verbessert werden müssen. Sobald Sie die Leistung ihrer Anwendung gründlich verstanden haben, können sie den Wechsel zu einem alternativen Server in Betracht ziehen, um die Effizienz und Handhabung zu verbessern. Weitere Informationen zur Beobachtbarkeit finden Sie hier.
Bleiben Sie auf unseren Social Media- und Community-Kanälen auf dem Laufenden: Dev.to, Reddit und Discord. Viel Spaß beim FrankenPHP'ing!