Déployer un projet Symfony avec git

Publié le

Déployer un projet Symfony avec git

1 - Introduction 

Lorsqu'on travaille sur un projet Symfony, il est dommage de déployer son site via un protocole finalement peu adapté tel que FTP. Grâce à git vous pourrez tenir un historique des modifications de votre site tout en déployant celui-ci efficacement. Il convient également à un projet qui regroupe plusieurs développeurs. Je ne vais pas expliciter ici toutes les fonctions de git ni ses commandes les plus basiques, mais simplement vous montrer comment on peut passer en production un projet Symfony (ou autre projet web). 

Effectivement, si vous utilisez encore FTP pour déployer vos projets web vous devez sentir au plus profond de vous qu'il existe une manière plus pratique de procéder. Contrairement à FTP, git détectera nativement les modifications apportées à vos fichiers et les sélectionnera donc pour être ceux qu'il faut uploader.

2 - Création du dépôt git sur votre serveur 

Dans un premier temps, connectez-vous à votre serveur via SSH, et installez git.

sudo apt-get install git

Placez-vous ensuite dans ce répertoire, créez le dossier qui servira de dépôt, placez-vous-y et lancez la commande d'initialisation de dépôt.

cd /var/git
mkdir project.git
cd project.git
git init --bare

Vous venez de créer votre dépôt, nous allons maintenant définir l'emplacement où les fichiers seront stockés. Nous voulons déployer un projet web, naturellement nous déciderons donc de stocker nos fichiers de façon à ce que notre serveur HTTP y accède. On se place dans le dossier hooks et on créer le fichier de configuration suivant : 

cd  hooks
nano post-receive

On va éditer ce fichier pour y définir deux choses : notre dossier qui contiendra nos fichiers, appelé work tree et le dépôt git, qui n'est autre que le dossier actuel créer par la commande git init plus haut.

#!/bin/sh
git --work-tree=/var/www/project/ --git-dir=/var/git/project.git checkout -f

Fermez votre éditeur de texte en conservant les modifications. On va rendre ce fichier exécutable grâce à la commande :

chmod +x post-receive

3 - Déployer depuis votre ordinateur

Maintenant que le dépôt distant est créé, nous allons voir comment déployer depuis notre ordinateur via notre dépôt local. Il est nécessaire d'avoir git installé sur son ordinateur. Si vous êtes sous Mac ou Linux, cela ne pose aucun problème, si vous êtes sous Windows, cliquez ici

Rendez-vous dans le dossier de votre choix, il sera votre dépôt local qui enverra vos fichiers sur votre serveur. Lancez la commande :

git init

On va ensuite faire le lien avec notre dépôt distant. Pour cela nous allons définir grâce à SSH l'emplacement du serveur. Nous donnerons ici un nom à notre dépôt distant : live.

git remote add live ssh://user@server.com/var/git/project.git

Dans ce même dossier, placez votre projet Symfony dans son entièreté. Lancez ensuite les commandes suivantes qui vont déployer votre projet sur votre serveur.

git add .
git commit -m "Premier déploiement avec git"
git push live master

Votre projet est maintenant déployé sur votre serveur.

4 - Mise en production du projet symfony

Il reste quelques étapes avant que votre site soit accessible. Vous devez notamment migrer votre base de données, mais cela ne pose pas de problème. Premièrement, vous devez installer vos bundles et leur dépendance. Placez-vous dans votre répertoire Symfony et lancez les commandes suivantes qui vont mettre à jour composer lui-même ainsi que vos paquets. Normalement, composer devrait vous demander la configuration de votre serveur mail et votre base de données, ceci est expliqué par le fait que votre parameters.yml n'est pas déployé, car il est différent d'un dépôt local à un dépôt distant. 

php composer.phar self-update
php composer.phar update
php composer.phar install --no-dev --optimize-autoloader

 N'oubliez pas de vider le cache de production 

php bin/console cache:clear --env=prod --no-debug

Installez vos assets par précautions même s'ils sont sûrement installés grâce aux commandes composer que nous avons exécutées plus haut.

php bin/console assets:install

5 - Conclusion 

Vous venez de découvrir une méthode de déploiement plus évoluée que celle par FTP. Cependant, il existe beaucoup d'autres façons de procéder. Pour un projet Symfony, la meilleure manière est d'avoir recours à Capistrano. Cependant cette méthode via git a l'avantage d'être simple et explicite. Pour en apprendre plus sur le déploiement d'une application Symfony, je vous invite à consulter la documentation officielle.