Nous sommes ici pour vous éclairer sur la façon d'utiliser et de configurer FrankenPHP - un serveur d'applications PHP moderne, écrit en Go et conçu pour accélérer vos applications PHP - sur Upsun, grâce à notre guide étape par étape.
Pour effectuer les étapes suivantes de ce guide, vous devez héberger votre application PHP sur Upsun - pour plus de détails sur la façon de le faire, suivez ce tutoriel simple sur la façon d'héberger une application Symfony Demo sur Upsun.
Comme nous ne testons jamais (jamais) de nouvelles fonctionnalités directement sur la production, nous allons créer un nouvel environnement pour tester et configurer notre application Symfony Demo afin d'utiliser FrankenPHP.
Pour créer un nouvel environnement sur notre projet, utilisez la commande suivante :
symfony branch staging --type=staging
Cette commande crée un nouvel environnement destaging
actif (de type staging
) et bascule automatiquement votre branche Git locale vers staging
.
Maintenant il est temps de vous montrer comment utiliser FrankenPHP, ce serveur web rad PHP a été conçu dans un but similaire à celui de Swoole et RoadRunner: augmenter la vitesse de chargement de vos applications PHP. Alors, comment le configurer dans Upsun ?
Kevin Dunglas, des Tilleuls, fournit une image FrankenPHP intégrée qui peut être utilisée pour faire tourner un serveur PHP FrankenPHP si l'on préfère le serveur PHP-FPM fourni par Upsun.
Pour ce faire, ouvrez votre code source dans votre IDE préféré, et mettez à jour votre fichier .upsun/config.yaml
en complétant les étapes suivantes :
1. Trouvez la section applications.app.web
et modifiez-la en conséquence : tous les appels HTTP doivent passer par l'application et le protocole HTTP par défaut en amont doit utiliser des sockets TCP Unix.. Vous devez également définir un commands.start
pour démarrer le serveur FrankenPHP.
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. Comme FrankenPHP a besoin d'accéder en écriture à un dossier .local
, vous devez ajouter un mount (=dossier inscriptible dans le conteneur de votre application) pour que FrankenPHP puisse le faire. Veuillez trouver la section applications.app.mounts
dans votre .upsun/config.yaml
et ajoutez la configuration de montage .local
suivante :
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. Ajoutez le runtime FrankenPHP à votre projet Symfony. Selon la page de documentation de FrankenPHP, vous devez ajouter le bundle suivant à l'application :
composer require runtime/frankenphp-symfony
5. Ajouter une variable d'environnement APP_RUNTIME pour indiquer à Symfony d'utiliser le nouveau runtime FrankenPHP, vous avez besoin d'une variable d'environnement, nommée APP_RUNTIME
. Pour ce faire, dans votre fichier .upsun/config.yaml
, trouvez la section applications.app.variables
et ajoutez ce qui suit :
applications:
app:
...
variables:
php: ...
env:
APP_RUNTIME: 'Runtime\\FrankenPhpSymfony\\Runtime'
6. Déployez vos changements sur staging.
git add composer.json composer.lock symfony.lock .upsun/config.yaml install_frankenphp.sh
git commit -m "utilisation de FrankenPHP plutôt que PHP-FPM"
symfony deploy # ou upsun push
7. Ouvrez l'URL de votre environnement de staging. Pour ouvrir l'URL de l'environnement correspondant, utilisez la commande suivante:
symfony environment:url
8. Fusionner avec la production. Lorsque vous êtes satisfait du comportement de votre application, vous pouvez la fusionner avec la branche principale
de production, en utilisant la commande suivante :
symfony merge
symfony checkout main
git pull upsun main
symfony environment:delete staging
git fetch --prune
Si vous souhaitez approfondir l'utilisation de FrankenPHP ou d'autres serveurs PHP, tels que Swoole ou RoadRunner, avec votre application Symfony sur Upsun, jetez un oeil à cet article inspirant de Sergii Dolgushev qui vaut le détour.
Tout en se concentrant sur l'installation de FrankenPHP, ce guide sert également d'introduction à l'utilisation de serveurs PHP alternatifs - souvent considérés pour les performances impressionnantes qu'ils peuvent apporter - sur Upsun.
L'application n'a besoin de démarrer qu'une seule fois, puis elle reste en mémoire et stockée dans le cache, ce qui élimine le besoin d'instanciation à chaque requête entrante. Lorsque vous utilisez PHP-FPM, chaque fois que votre application exécute un script PHP, ce script PHP est chargé en mémoire puis supprimé à la fin de son exécution. De plus, certains serveurs alternatifs ont des capacités asynchrones intégrées qui étendent encore l'horizon technique.
Bien que les améliorations de performances résultant de l'utilisation d'un serveur PHP alternatif comme FrankenPHP soient prometteuses, il est essentiel de procéder avec prudence. Le simple fait de changer de serveur ne résoudra pas les problèmes de performances profonds ou d'autres problèmes sous-jacents – c'est plus comme une solution temporaire pour un problème plus important.
Une excellente première étape consiste à se plonger dans les tableaux de bord d'observabilité de l'application et de l'architecture afin d'identifier les domaines critiques qui nécessitent des améliorations. Une fois que vous aurez une compréhension approfondie des performances de votre application, vous pourrez envisager de passer à un autre serveur pour améliorer l'efficacité et la gestion. Pour en savoir plus sur l'observabilité, cliquez ici.
Restez informé de nos dernières actualités sur nos réseaux sociaux et canaux communautaires : Dev.to, Reddit et Discord. Joyeux FrankenPHP'ing !