Mit unserer Schritt-für-Schritt-Anleitungmöchten wir Ihnen zeigen, wie Sie FrankenPHP - einenmodernen, in Go geschriebenen PHP-App-Server zur Beschleunigung Ihrer PHP-Anwendungen - auf Upsunverwenden und konfigurieren können.
Um die folgenden Schritte in dieser Anleitung auszuführen, müssen Sie Ihre PHP-Anwendung auf Upsun hosten. Details dazu finden Sie in dieser einfachen Anleitung zum Hosten einer Symfony-Demo-Anwendung auf Upsun.
Da wir neue Funktionennie 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, Ihnen zu zeigen, wie Sie FrankenPHPverwenden . Dieser Rad-PHP-Webserver wurde für einen ähnlichen Zweck wie Swoole und RoadRunner entwickelt : um die Ladezeit Ihrer PHP-Anwendung 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 Sie den von Upsun bereitgestellten PHP-FPM-Server bevorzugen .
Um dies zu tun, öffnen Sie Ihren Quellcode in Ihrer bevorzugten IDE und aktualisieren Sie 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: # wichtig für PHP wir verwenden standardmäßig 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. Bitte suchen Sie 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
. Suchen 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. Stellen Sie Ihre Änderungen im Staging bereit.
git add composer.json composer.lock symfony.lock .upsun/config.yaml install_frankenphp.sh git commit -m "FrankenPHP statt PHP-FPM verwenden" symfony deploy # oder upsun push
7. Öffnen Sie die URL Ihrer Staging-Umgebung. Um die entsprechende Umgebungs-URL zu öffnen, verwenden Sie den folgenden Befehl:
symfony umgebung:url
8. In die Produktion überführen. Wenn Sie mit dem Verhalten Ihrer Anwendung zufrieden sind, können Sie sie 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 weiter erweitern.
Auch wenn die Leistungsverbesserungen durch die Verwendung eines alternativen PHP-Servers wie FrankenPHP vielversprechend sind, sollte man vorsichtig vorgehen. Ein einfacher Serverwechsel löst keine tiefsitzenden Leistungsprobleme 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!