Contact salesFree trial
Blog

Up(sun) and running mit FrankenPHP

PHPFrankenPHPSymfony
Teilen Sie

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.

Bitte beachten Sie: Die Prozesse/Befehle in der Anleitung Up(sun) and running with FrankenPHP können für Ihr Platform.sh-Projekt angepasst werden, indem Sie upsun CLI durch platform CLI ersetzen und außerdem mounts.source in Ihrer Anwendungskonfiguration von storage auf local ändern.

Wie man FrankenPHP auf Upsun einsetzt

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.

Bitte beachten Sie: Wenn Sie Ihre eigene PHP-Codebasis verwenden, müssen Sie alle Symfony-CLI-Aufrufe in diesem Blogpost durch Upsun-CLI-Aufrufe ersetzen, z. B:

upsun branch staging --type staging

Erstellen Sie eine Staging-Umgebung

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.

Wie man FrankenPHP auf Upsun verwendet

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

Bitte beachten Sie: Diese ./frankenPHP-Binärdatei wird in einem späteren Schritt mit Hilfe eines Shell-Skripts install-frankenphp.sh installiert - sieheSchritt 3 unten.

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}

3. Wir entwerfen ein Shell-Skript für Sie(Quelle), das zur Installation von frankenPHP (nur einmal) während des Schritts applications.app.hooks.build verwendet werden kann:

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 ; }

Bitte beachten Sie: Der erste curl-Aufruf des Symfony-Konfigurators ist Symfony-spezifisch und führt neue Werkzeuge für die Bereitstellung Ihrer Symfony-Demo-Anwendung ein. Wenn Sie Ihre eigene PHP-Codebasis verwenden, fügen Sie nur den letzten curl-Befehl in Ihre Build-Hooks ein:

curl -fsS https://raw.githubusercontent.com/upsun/snippets/main/src/install-frankenphp.sh | bash 

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

Bitte beachten Sie: Wenn Sie keine Symfony-Anwendung, sondern Ihre eigene PHP-Codebasis verwenden, können Sie diesen Schritt überspringen.

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'

Bitte beachten Sie: Wenn Sie keine Symfony-Anwendung, sondern Ihre eigene PHP-Codebasis verwenden, können Sie diesen Schritt überspringen.

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

Bitte beachten Sie: Wenn Sie PHP-Befehle direkt auf dem Server verwenden möchten, wie z.B. einen Symfony-Konsolenbefehl, müssen Sie die FrankenPHP PHP-CLI ./frankenphp php-cli verwenden, wie im Folgenden beschrieben:

./frankenphp php-cli bin/console 

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!

Ihr größtes Werk
steht vor der Tür

Kostenloser Test
Discord
© 2025 Platform.sh. All rights reserved.