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

Dans ce nouveau chapitre nous allons voir comment héberger notre application Symfony sur un hébergement mutualisé qui supporte SSH. Ici je vais utiliser l’offre d’hébergement Infomaniak mais vous pouvez reproduire ce que l’on va faire sur n’importe quel hébergeur qui vous laisse un accès ssh sur le serveur.


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 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

Clonage du projet en ligne

Pour déployer le code source nous allons utiliser git et cloner le dépôt distant. Pour m’organiser je met les sites dans un dossier sites mais vous êtes libre de suivre la convention que vous préférez.

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

On modifiera ensuite les variables d’environnements en créant un fichier .env.local qui contiendra les variables spécifiques à notre environnement.

Pour la base de données, Infomaniak utilise MariaDB et vous pouvez créer une base depuis votre espace d’administration. Je vous conseille de créer un utilisateur en même temps pour limiter l’accès à cette base de données seulement.

APP_ENV=prod
APP_SECRET=descaracteresaleatoireici

DATABASE_URL="mysql://user:pass@user.myd.infomaniak.com:3306/database?serverVersion=10.4.25-MariaDB&charset=utf8mb4"

MAILER_DSN=native://default

Une fois l’environnement modifié on pourra lancer l’installation des dépendances.

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

Configuration de l’hébergement

Maintenant que nos sources sont en ligne il va falloir configurer l’hébergeur afin de lui dire comment résoudre notre nom de domaines. Pour infomaniak cela se passe dans la partie Mes sites > Gestion des sites > Ajouter un site. Sélectionnez l’option “Continuez sans installer d’outil”. Ensuite vous pouvez sélectionner le domaine (ou le sous-domaine) à associer à ce nouveau site et cliquer sur continuer pour finaliser la création du site.

Une fois le site créé vous devrez faire plusieurs changements :

  • Modifier la version de PHP pour correspondre au besoin de Symfony (version 8.2 minimum) et activer des extensions supplémentaires si nécessaire.
  • Installer le certificat SSL avec Let’s encrypt (en un clic)
  • Aller dans les Paramètres avancés pour modifier le dossier du site et pointer vers le dossier public de Symfony /sites/monsite.tld/public.
  • Dans les Paramètres avancés puis dans l’onglet Apache vous pourrez activer la compression des fichiers mais aussi gérer des variables d’environnement que vous souhaitez ajouter à votre application Symfony

A partir de cette étape votre site devrait fonctionner et être visible lorsque vous tapez votre nom de domaine.

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
    /opt/php8.2/bin/php bin/console d:m:m -n
    /opt/php8.2/bin/composer dump-env prod
    /opt/php8.2/bin/php bin/console cache:clear

vendor/autoload.php: composer.json composer.lock
    /opt/php8.2/bin/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.