Comment déployer un projet symfony sous Lando
Je vous ai déjà parlé de mon amour pour Lando qui permet de générer facilement nos environnement “docker” pour nos projets.
Aujourd’hui, nous allons voir comment déployer un projet symfony.
Quitte à ce que se soit utile, je vais créer un projet sandbox qui sera utiliser sur le site.
Préambule
Avant d’entrer dans le vif du sujet, je voulais vous parler un peu des "recipes".
Ces “recettes” sont en réalité des configurations prêtes à être lancée et il y en a pour tout le monde: Acquia, Apache, Backdrop, Compose, Dotnet, Drupal, Elasticsearch, Go, Joomla, Lagoon, LAMP, Laravel, LEMP, Mailhog, MariaDB, MEAN, Memcached, MongoDB, MSSQL, MySQL, nginx, Node, Pantheon, PHP, phpMyAdmin, Platform.sh, PostgreSQL, Python, redis, Ruby, Solr, Symfony, Tomcat, Varnish, WordPress.
Sur la page des plugins vous aurez une petite explication des différentes recettes comme par exemple pour “symfony”:
- Configurable php version from 5.3 all the way to 8.3
- Configurable webroot
- Configurable web server (apache or nginx)
- Configurable database backend (mariadb, mysql, or postgres)
- Configurable composer
- Configurable caching backend (redis or memcached)
- xdebug
Vous pouvez donc voir que simplement en utilisant cette recipe, nous avons déjà tout ce dont nous avons besoin. Il ne reste qu'à spécifier des paramètres pour les versions ou l’emplacement du webroot.
Création du dossier et du .lando.yml
Créez donc votre dossier où vous avez vos habitudes.
Pour ma part, ce sera “./projects/web_sf_sandbox/”.
Dans ce dossier nous allons créer un fichier “.lando.yml” qui va contenir différente chose.
Nous allons commencé par la base et je vais tenter de vous l’expliquer en commentaires:
name: sandbox
# Le nom de votre projet. Il sera aussi utilisé comme préfix des containers créés par lando
recipe: symfony
# Choix de la recipe sur laquelle se baser
config:
# Cette section permet de spécifier les paramètres de la recipe
via: apache
# Spécifie le type de serveur web apache ou nginx
webroot: public
# Indique le dossier d'entrée de votre projet. Pour un symfony c'est le dossier public
php: '8.3'
# la version de php de la 5.3 à la 8.3
database: postgres
# spécifie le type de base de données entre mariadb, mysql ou postgres. La recette se base sur la version par défaut mais vous pouvez la spécifier via ":16"
cache: memcached
# permet d'activer un systeme de cache: redis ou memcached
xdebug: false
# active ou non le xdebug
On peut se limiter à celà dans un premier temps et lancer notre projet dans votre terminal préféré et bien évidement dans le dossier ou se trouve votre .lando.yml
lando start
Félicitation, vous avez votre installation prête à accueillir Symfony !
Poussons la configuration
Notre configuration actuelle est suffisante mais on peut l’améliorer un peu si on le souhaite sur des aspects fonctionnels ou pratiques.
J’ai déjà écrit des posts sur le proxy interne de lando ou bien encore sur le tooling donc je ne vais pas y revenir et vous invite simplement à consulter le tag #Lando sur le blog.
Je vais donc ici me limiter à l’essentiel.
services:
database:
type: postgres
version: '16'
portforward: 55000
creds:
database: sandbox
Petit apparté concernant le paramètre version dans cette config. Normalement, je pourrais directement indiquer:
config: database: postgres:16
Mais malheureusement postgress plante si j’essaie de build.
La parade est donc de préciser la version au niveau du service.
Nous avons désormais précisé les accès à notre db et ajouté un portforward pour y accéder depuis l’extérieur de la vm.
Quiproquo
Si vous tapez la commande “Lando”, vous verrez apparaitre un “lando symfony” qui provient des toolings de la recette. Génial me direz vous mais malheureusement bien que la commande soit présente, le “symfony cli” lui ne l’est pas !
Pour corriger ce problème, nous allons simplement ajouter dans la config, les commandes permettant son installation afin que le cli soit installé lors du build:
services:
appserver:
build_as_root:
- curl -1sLf 'https://dl.cloudsmith.io/public/symfony/stable/setup.deb.sh' | bash
- apt install symfony-cli
Et on termine bien évidemment par un petit
lando rebuild -y
Vous pouvez désormais appeler le cli symfony via un simple
lando symfony
Installons enfin symfony
Cette fois nous sommes prêt, je ne vais rien vous apprendre, l’installation se passe par la commande classique
lando symfony new tmp --webapp && cp -r tmp/. . && rm -rf tmp
Petit rappel, symfony refuse de s’installer dans un dossier si ce dernier contient déjà quelque chose. La parade est donc de l’installer dans un dossier temporaire et de copier le contenu de ce dossier dans le dossier principal après l’installation.
Votre nouveau projet est enfin prêt!