Watch a demoFree trial
Blog

Up(sun) und die Nutzung von FrankenPHP

PHPFrankenPHPSymfony
05 August 2025
Florent Huck
Florent Huck
DevRel Ingenieur
Teilen Sie
Dieser Beitrag ist auch auf Englische.

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.

Bitte beachten: Die Prozesse/Befehle in der Anleitung "Up(sun) und die Nutzung von FrankenPHP" können für ihr Platform.sh-Projekt angepasst werden, indem upsun CLI durch platform CLI ersetzet und mounts.source in der Anwendungskonfiguration von storage auf local geändert wird.

Wie man FrankenPHP auf Upsun nutzt

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.

Bitte beachten: 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 einer Staging-Umgebung

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.

Wie man FrankenPHP auf Upsun nutzt

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

Bitte beachten: Diese ./frankenPHP-Binärdatei wird in einem späteren Schritt mit Hilfe eines Shell-Skripts install-frankenphp.sh installiert - siehe Schritt 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. 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}

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: 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: Wenn keine Symfony-Anwendung, sondern ihre eigene PHP-Codebasis verwendet wird, 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. 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'

Bitte beachten: Wenn keine Symfony-Anwendung, sondern ihre eigene PHP-Codebasis verwendet wird, können sie diesen Schritt überspringen.

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

Bitte beachten: 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 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!

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

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