Nous sommes ici pour vous éclairer sur la façon d'utiliser et de configurer FrankenPHP - unserveur d'applications PHP moderne, écrit en Go et conçu pour accélérer vos applications PHP - sur Upsun avec notre guide pas à pas.
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 pour 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 en staging
.
Il est maintenant 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 serveurPHP-FPM fourni par Upsun.
Pour ce faire, ouvrez votre code source dans votre IDE favori, 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 en amont par défaut doit utiliser les sockets unix tcp. 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 pour PHP nous utilisons par défaut des sockets unix 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 votre conteneur d'applications) pour que FrankenPHP puisse le faire. Veuillez trouver la section applications.app.mounts
dans votre .upsun/config.yaml
et ajoutez la configuration.local
mount 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 sectionapplications.app.variables
et ajoutez ce qui suit :
applications : app : ...
variables : php : ...
env :
APP_RUNTIME : 'Runtime\\NFrankenPhpSymfony\NRuntime'
6. Déployez vos changements sur staging.
git add composer.json composer.lock symfony.lock .upsun/config.yaml install_frankenphp.sh git commit -m "Utiliser FrankenPHP au lieu de 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 la peine d'être lu.
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 performancesimpressionnantes 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, celui-ci est chargé en mémoire et supprimé à la fin de son exécution. En outre, certains serveurs alternatifs intègrent des fonctionnalités asynchrones qui élargissent encore l'horizon technique.
Bien que les améliorations de performances liées à 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 performance profondément ancrés ou d'autres problèmes sous-jacents - il s'agit plutôt d'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 doivent être améliorés. Une fois que vous aurez bien compris les performances de votre application, vous pourrez envisager de passer à un autre serveur pour améliorer l'efficacité et la maniabilité. Pour en savoir plus sur l'observabilité, cliquez ici.
Restez au courant des dernières nouvelles sur nos médias sociaux et nos canaux communautaires : Dev.to, Reddit et Discord. Joyeux FrankenPHP'ing !