Déployer une application Symfony sur Koyeb — Github

Dans ce guide, nous verrons comment déployer une application Symfony sur Koyeb, une plateforme d’hébergement et de déploiement typé serverless, cette dernière proposant toute une série de fonctionnalités comme le TLS automatique, la mise à l’échelle et bien d’autres.

Koyeb n’étant pas encore disponible publiquement, n’hésitez pas à demander l’accès à l’équipe en vous inscrivant sur la plateforme.

Cet article est un complément des articles déjà publiés, nous aborderons ici les subtilités amenées par le déploiement automatisé via Github.

Sommaire

Pré-requis

Etapes

Créer l’application Symfony

Pour commencer simplement, commençons par créer une application Symfony via la CLI:

symfony create — full sf_koyeb

Une fois l’application créée, lançons-la en local pour vérifier que tout fonctionne:

symfony serve

En ouvrant le navigateur sur http://127.0.0.1:8000, la page suivante devrait s’afficher:

L’usage de Github revient à déployer via Buildpack, il nous faut donc effectuer une mise à jour de la configuration disponible via composer.json afin de simplifier le déploiement.

Pour commencer, Koyeb recommande de spécifier une version PHP, ici, je supprime la version patch définie dans le bloc require:

"php": ">=7.2"

Concernant PHP, je me base sur les recommandations Koyeb, personnellement, je pense que spécifier la version patch de PHP ne fait pas de mal (surtout si vous suivez une roadmap précise) mais les BC breaks étant assez rare sur PHP, définir uniquement une version mineure ne fait pas de mal.

Mettons ensuite les dépendances (pour via le bloc require-dev) à jour:

"symfony/web-link": "5.3.*",
"symfony/debug-bundle": "5.3.*",
"symfony/web-profiler-bundle": "5.3.*",
"symfony/maker-bundle": "^1.0",
"symfony/phpunit-bridge": "^5.3",
"symfony/stopwatch": "5.3.*",
"symfony/yaml": "5.3.*",

Cette modification n’est utile que si vous déployez l’application en restant en environnement de dev, en effet, le builder Heroku définit une commande Composer lancée automatiquement qu’il n’est pas possible de surcharger.

Une dernière modification consiste à définir le Procfile (à définir à la racine du projet):

web: vendor/bin/heroku-php-apache2 public

Ce fichier (utilisé par le builder Heroku) permet de définir le dossier utilisé par le processus Apache (défini par défaut) pour répondre à une requête.

Bien, maintenant que l’application est configurée, il est temps de la publier sur Github afin de la déployer, pour ce faire, je vous laisse créer un repository et envoyer le code sur ce dernier.

Pour ce tutoriel, le code source est hébergé ici

Une fois disponible sur Github, il est temps de préparer le déploiement.

Déployer

Afin de ne pas surcharger ce tutoriel, j’utiliserais le dashboard en ligne, la CLI est bien entendu disponible si besoin, le dashboard est accessible en visitant:

https://app.koyeb.com/auth/signin

Une fois connecté, voici la page d’accueil

En cliquant sur Deploy my first app, vous devriez arriver sur l’interface suivante:

Ici, nous allons sélectionner Github:

Le nom du repository devrait remonter une fois que Koyeb est connecté sur votre compte Github, je vous invite à renseigner la branche (main par défaut sur Github) au cas où.

Pour ce tutoriel, j’utiliserais l’instance de type Nano, une application Symfony ne demande pas de grosses ressources et même en production, il vaut mieux viser la plus petite instance et s’adapter à la charge (simple avis personnel ici, chaque projet nécessite une infrastructure adaptée).

Pour les informations qui suivent:

La région PAR (Paris) est la seule disponible à l’écriture de cet article donc je ne peux pas juger des autres, sur l’option du nombre d’instance, une seule instance semble suffisante (à noter que l’option peut être changée à tout momentt), sur le port, j’exposerais le port 8080, en effet, Koyeb va construire une image OCI via Buildpack et exposer un port aléatoire.
Nous pouvons le fixer avec la variable d’environnement PORT, à noter que les variables d’environnement peuvent venir d’un secret si nécessaire.

Reste à choisir un nom, ici, j’utilise 3 lettres (la contrainte minimale) afin de simplifier le tri, une fois les options soumises, voyons si le service se lance:

Une fois lancé, voici les logs qui peuvent être renvoyés:

Si tout se déroule bien, voici la sortie finale qui devrait s’afficher:

Bien, le tout semble se dérouler au mieux, voyons les informations liées à ce service via sa page dédiée (disponible au clic sur son nom):

Par défaut, Koyeb va exposer votre service via un combo domaine / URL maison (les domaines personnalisés sont déjà sur la roadmap au moment de l’écriture de cet article), vous pouvez aussi obtenir les informations clés tel que l’instance, l’état du service et les derniers déploiements.

Pour finaliser ce tutoriel, cliquons sur l’URL publique et voyons si l’application répond:

Bien, tout semble se passer au mieux (veuillez noter que Buildpack utilise un dossier personnalisé pour stocker le projet), à noter que n’ayant pas défini de route pour l’accueil, la page par défaut de Symfony répond mais votre application devrait renvoyer le tout correctement.

Ce tutoriel arrive à son terme, pour simplifier le processus, je n’ai volontairement pas fait mention de la base de données, des artefacts front ou des services tiers, je reviendrais sur ces cas d’usages dans des articles dédiés prochainement.

Si vous souhaitez en savoir plus sur Koyeb, la documentation ainsi que le site officiel sont vos prochaines destinations, merci encore pour la lecture et très bonne journée à tous 👋

--

--

PHP developer @SensioLabs, Symfony addict (3, 4, 5 & 6 certified!)

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store