• Docs
  • Talk to an expert
Blog
Blog
BlogProduktFallstudienNachrichtenInsights
Blog

Up(sun) und läuft mit FrankenPHP

PHPFrankenPHPSymfony
28 Mai 2024
Florent Huck
Florent Huck
DevRel Ingenieur
Teilen
Diese Seite wurde von unseren Experten auf Englisch verfasst und mithilfe einer KI übersetzt, um einen schnellen Zugriff zu ermöglichen! Die Originalversion findest du hier.

 

Bitte beachte: Es gibt eine aktualisierte Version zur Einrichtung von FrankenPHP auf der Upsun Cloud. Die aktuellste Anleitung findest du in unserem Beitrag darüber, wie wir bei der SymfonyCon die Live-Verbindungen für 1.200 Entwickler skaliert haben. Die folgende Anleitung bleibt als Referenz erhalten.

Wir möchten dir mit unserer Schritt-für-Schritt-Anleitung einen kleinen Einblick geben, wie du FrankenPHP – einen modernen PHP-App-Server, der in Go geschrieben und darauf ausgelegt ist, deine PHP-Anwendungen zu beschleunigen – auf der Upsun Cloud nutzen und konfigurieren kannst.

Die Prozesse/Befehle aus dem Tutorial „Up(sun) und FrankenPHP in Betrieb“ kannst du für dein Platform.sh-Projekt anpassen, indem du upsun CLI durch platform CLI und außerdem mounts.source von storage in local in deiner Anwendungskonfiguration.

So fängst du an, FrankenPHP auf Upsun Cloud zu nutzen

Um die folgenden Schritte in dieser Anleitung auszuführen, musst du deine PHP-Anwendung auf Upsun hosten – Details dazu findest du in dieser einfachen Anleitung zum Hosten einer Symfony-Demo-Anwendung auf Upsun. 

Wenn du deinen eigenen PHP-Code verwendest, musst du alle symfony CLI-Aufrufe in diesem Blogbeitrag durch upsun CLI-Aufrufe ersetzen, zum Beispiel:

upsun branch staging --type staging

Erstelle eine Staging-Umgebung

Da wir neue Features niemals (wirklich niemals) direkt in der Produktivumgebung testen, erstellen wir eine neue Umgebung, 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, verwende den folgenden Befehl:

symfony branch staging --type=staging

Dieser Befehl erstellt eine neue aktive „staging“-Umgebung (vom Typ „staging“) und wechselt deinen lokalen Git-Zweig automatisch zu „staging“.

So nutzt du FrankenPHP auf der Upsun Cloud 

Jetzt ist es an der Zeit, dir zu zeigen, wie du FrankenPHP nutzt. Dieser coole PHP-Webserver wurde für einen ähnlichen Zweck wie Swoole und RoadRunner entwickelt: um die Ladezeit deiner PHP-Anwendung zu verkürzen. Wie konfigurierst du ihn also in der Upsun Cloud? 

Kevin Dunglas von Les Tilleuls stellt ein integriertes FrankenPHP-Image zur Verfügung, mit dem du einen FrankenPHP-PHP-Server ausführen kannst, falls du diesen dem von Upsun cloud bereitgestellten PHP-FPM-Server vorziehst.

Öffne dazu deinen Quellcode in deiner bevorzugten IDE und passe deine „.upsun/config.yaml“-Datei mit den folgenden Schritten an:

1. Suche den Abschnitt „applications.app.web“ und passe ihn entsprechend an: Alle HTTP-Aufrufe müssen durch die Anwendung geleitet werden, und das Standard-Upstream-HTTP-Protokoll muss TCP-Unix-Sockets verwenden. Außerdem musst du einen „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

Diese ./frankenPHP Binärdatei wird in einem späteren Schritt mithilfe eines Remote- install-frankenphp.sh Shell-Skript – siehe Schritt 3 unten.

2. Da FrankenPHP Schreibzugriff auf einen Ordner „.local“ benötigt, musst du einen Mount (= beschreibbarer Ordner innerhalb deines App-Containers) für FrankenPHP hinzufügen. Suche den Abschnitt „applications.app.mounts“ in deiner Datei „.upsun/config.yaml“ und füge die folgende Mount-Konfiguration für „.local“ hinzu:

applications:
  app:
    ...  
    mounts:
      ...
      ".local": { source: storage, source_path: frankenphp-local}

3. Wir erstellen ein Shell-Skript für dich (Quellcode), mit dem du FrankenPHP (nur einmal) während des applications.app.hooks.build Schritt:

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

Der erste curl-Aufruf an den Symfony-Konfigurator ist Symfony-spezifisch und führt neue Tools zur Bereitstellung deiner Symfony-Demoanwendung ein. Wenn du deine eigene PHP-Codebasis verwendest, füge nur den letzten curl-Befehl in deine Build-Hooks ein:

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

4. Füge die FrankenPHP-Laufzeitumgebung zu deinem Symfony-Projekt hinzu. Laut der FrankenPHP-Dokumentationsseite musst du das folgende Bundle zur Anwendung hinzufügen: 

composer require runtime/frankenphp-symfony

Wenn du keine Symfony-Anwendung, sondern deine eigene PHP-Codebasis verwendest, kannst du diesen Schritt überspringen.

5. Füge eine Umgebungsvariable „APP_RUNTIME“ hinzu – um Symfony mitzuteilen, dass die neue FrankenPHP-Laufzeitumgebung verwendet werden soll, benötigst du eine Umgebungsvariable namens „APP_RUNTIME“. Suche dazu in deiner Datei „.upsun/config.yaml“ den Abschnitt „applications.app.variables“ und füge Folgendes hinzu:

applications:
  app:
    ...  
    variables:
      php: ... 
      env: 
        APP_RUNTIME: 'Runtime\\FrankenPhpSymfony\\Runtime'

Wenn du keine Symfony-Anwendung, sondern deinen eigenen PHP-Code verwendest, kannst du diesen Schritt überspringen.

6. Übertrage deine Änderungen in die Staging-Umgebung.

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. Öffne die URL deiner Staging-Umgebung. Um die entsprechende Umgebungs-URL zu öffnen, verwende den folgenden Befehl:

symfony environment:url

8. In die Produktivumgebung einbinden. Wenn du mit dem Verhalten deiner Anwendung zufrieden bist, kannst du sie mit folgendem Befehl in den Produktionszweig „main“ einbinden: 

symfony merge
symfony checkout main
git pull upsun main
symfony environment:delete staging
git fetch --prune

Wenn du PHP-Befehle direkt auf dem Server ausführen möchtest, wie zum Beispiel einen Symfony-Konsolenbefehl, musst du die FrankenPHP-PHP-CLI ./frankenphp php-cli, etwa so:

./frankenphp php-cli bin/console 

Wenn du dich näher damit befassen möchtest, wie du FrankenPHP oder andere PHP-Server wie Swoole oder RoadRunner mit deiner Symfony-Anwendung auf Upsun nutzen kannst, schau dir diesen inspirierenden Artikel von Sergii Dolgushev an – er ist wirklich lesenswert.

Diese Anleitung konzentriert sich zwar auf die Installation von FrankenPHP, dient aber auch als Einführung in die Nutzung alternativer PHP-Server – die oft wegen ihrer beeindruckenden performance in Betracht gezogen werden – auf Upsun.

Die Anwendung muss nur einmal gestartet werden und bleibt dann im Arbeitsspeicher sowie im Cache gespeichert, wodurch die Instanziierung bei jeder eingehenden Anfrage entfällt. Bei der Verwendung von PHP-FPM wird jedes Mal, wenn deine Anwendung ein PHP-Skript ausführt, dieses Skript in den Arbeitsspeicher geladen und nach Beendigung der Ausführung wieder entfernt. Darüber hinaus verfügen einige alternative Server über integrierte asynchrone Funktionen, die den technischen Horizont noch weiter erweitern.

Auch wenn die Verbesserungen der Performance durch den Einsatz eines alternativen PHP-Servers wie FrankenPHP vielversprechend sind, ist Vorsicht geboten. Ein einfacher Serverwechsel löst keine tiefsitzenden Probleme der Performance oder andere zugrunde liegende Probleme – er ist eher eine vorübergehende Abhilfe für ein größeres Problem.

Ein hervorragender erster Schritt ist es, sich intensiv mit den Dashboards zur Beobachtbarkeit der Anwendung und der Architektur auseinanderzusetzen, um kritische Bereiche zu identifizieren, die verbessert werden müssen. Sobald du die performance deiner Anwendung gründlich verstanden hast, kannst du einen Wechsel zu einem alternativen Server in Betracht ziehen, um die Effizienz und Handhabung zu verbessern. Mehr zum Thema Beobachtbarkeit erfährst du hier.

Bleib über unsere Social-Media- und Community-Kanäle auf dem Laufenden: Dev.to, Reddit, unsere Community. Viel Spaß beim FrankenPHP’en! 

Bleiben Sie auf dem Laufenden

Abonnieren Sie unseren monatlichen Newsletter.

Deployments leicht gemacht.
Testen Sie Upsun kostenlos.

Entwickeln Sie mit DispatchDeployen Sie mit Cloud