Héberger Symfony sur un mutualisé O2Switch (via SSH / Git) — Formation Symfony 7

Dans ce tutoriel nous allons voir comment déployer notre application Symfony sur un hébergeur qui utilise l’interface CPanel. Dans le cas de cette vidéo nous utiliseront l’hébergement O2Switch.


Pour intéragir avec le serveur nous utiliseront le protocol SSH vous pouvez voir comment utiliser une clef SSH dans cette vidéo

Préparation de l’environnement

La première étape est de préparer le serveur pour accueillir notre site :

  • On ajoute notre IP à la liste des IPs autorisées à se connecter en SSH au serveur via Autorisation SSH.
  • On commence par Ajouter un domaine que l’on fait pointer vers un dossier spécifique (on pensera à ponter vers le dossier public). Par exemple : ~/sites/mondomaine.tld/public
  • On génère un certificat SSL, depuis “Lets Encrypt™ SSL“.
  • On crée une base de données avec son utilisateur associé (vous pouvez utiliser l’option “assistant” pour faire cette opération en une fois).
  • Sur “Sélectionner une version de PHP” on activera la version 8.2 nécessaire au fonctionnement de Symfony.

Préparation du site

Pour que l’application Symfony il faut faire pointer les liens vers le fichier index.php du dossier public. Les hébergeurs utilisent souvent Apache et il faudra ajouter un fichier de configuration .htaccess. Cela peut se faire facilement à l’aide de symfony/apache-pack.

composer require symfony/apache-pack

Maintenant que notre serveur est configuré, on va devoir copier le code source de notre site sur le serveur. Dans note cas nous allons cloner notre projet depuis le dépôt distant git.

cd ~/sites
git clone git@github.com:Grafikart/mondomaine.tld

Ensuite, on va modifier la configuration du site en créant un fichier .env.local. A adapter en fonction de votre environnement.

APP_ENV=prod
DATABASE_URL="mysql://user:password@127.0.0.1:3306/monsite?serverVersion=11.2.2-MariaDB&charset=utf8mb4"
MAILER_DSN=native://default

Enfin, on installe les dépendances, et on lance les migrations pour mettre à jour notre base de données.

composer install --no-dev --optimize-autoloader
composer dump-env prod
php bin/console importmap:install
php bin/console asset-map:compile
php bin/console doctrine:migrations:migrate
APP_ENV=prod APP_DEBUG=0 php bin/console cache:clear

Et voila ! Le site devrait maintenant être visible et fonctionnel.

Automatiser avec Make

Pour automatiser le processus de déploiement d’une nouvelle version il est possible d’utiliser un fichier Makefile.


Si vous ne connaissez pas Makefile vous pouvez suivre cette vidéo

server := "user@mondomain.ltd"
domain := "mondomain.ltd"

.PHONY: install deploy

deploy:
    ssh -A $(server)$ 'cd sites/$(domain) && git pull origin main && make install'

install: vendor/autoload.php
    php bin/console doctrine:migrations:migrate -n
    php bin/console importmap:install
    php bin/console asset-map:compile
    composer dump-env prod
    php bin/console cache:clear

vendor/autoload.php: composer.lock composer.json
    composer install --no-dev --optimize-autoloader
    touch vendor/autoload.php

Si vous souhaitez déployer une mise à jour il vous suffira de taper la commande make deploy.

Messenger

Malheureusement, il n’est pas possible d’utiliser un superviseur pour faire fonctionner Messenger. Une solution alternative est d’utiliser une tâche récurrente qui traitera les tâches toutes les 5 minutes.

/usr/local/bin/php /home/USER/sites/mondomain.ltd/bin/console messenger:consume --time-limit=295 --memory-limit=128M async > /home/USER/sites/mondomain.ltd/var/log/cron.log 2>&1

Les informations sont disponibles sur la FAQ