Comment déployer un projet symfony sous Lando
Vendredi 08 Décembre 2023 08:30

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

Ecran de la console pour la réussite du build

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!