Déployer un projet Symfony avec Rsync

Le développement de votre projet Symfony arrive à son terme, vous confrontant ainsi à l’étape de la mise en ligne. Si vous vous apprêtez à lancer votre client FTP pour le dépôt de vos fichiers, alors cet article est fait pour vous. Nous allons voir la configuration et l’utilisation d’un petit utilitaire de synchronisation : RSync.

Pourquoi utiliser RSync ?

A l’instart du FTP, rsync permet d’effectuer une synchronisation distante basée sur des sauvegardes incrémentales. En clair, à l’aide d’une seule commande, vous pouvez mettre à jour sur votre serveur, seulement l’ensemble des fichiers modifiés depuis votre dernière synchonisation.

Rsync utilise le protocole SSH permettant une communication sécurisée lors du transfert des fichiers. Un autre avantage indéniable par rapport au protocole FTP beaucoup trop bavard sur le réseau, lors de la transmission de vos paramètres d’authentification.

Outre le confort et la rapidité du déploiement par rsync, il ne faut pas oublier son support natif par Symfony.

Configuration RSync

Avant de voir les différents paramètres de configuration, nous allons rapidement installer ce petit utilitaire via notre gestionnaire de packet sur notre Debian-Like :

apt-get install rsync

Pour les paramètres de connection, il faut  créer/modifier le fichier config/properties.ini :

[maconfig]
name=MonSite
author=Lexik.fr
host=66.249.64.0                               #IP du serveur
port=22                                        #Port par default pour ssh
user=votre-login                               #Utilisateur qui se connectera au serveur de destination
dir=/home/lexik/domains/lexik.fr/public_html   #Dossier qui recevera le projet symfony sur le serveur de destination
type=rsync                                     #Type de deploiement

Symfony permet de spécifier les dossiers à exclure lors de la synchronisation. Créer/Modifier le fichier config/rsync_exclude.txt :

.svn
/web/uploads/*
/web/*_dev.php
/cache/*
/log/*
.DS_Store
.cache
.project
.settings

Nous allons ensuite tester nos paramètres de configuration. Cette commande est utile pour effectuer une simulation du transfert. Cela signifie que rien ne sera synchronisé :

php symfony project:deploy maconfig

Nous y voila, effectuez votre rsynchronisation :

php symfony project:deploy maconfig --go

Et voila !

Déploiement sans spécifier le mot de passe

Dans un souci d’automatisation de synchronisation, il peut être embêtant de se faire demander le mot de passe serveur à chaque déploiement par rsync (ou même lorsque l’on souhaite se connecter au serveur directement par SSH).

Dans cette logique, on peut utiliser une encryption asymétrique (clé publique, clé privée) afin de rester “connu” par le serveur:
On génère le couple de clé en local avec la commande :

ssh-keygen -t rsa

On garde le chemin par défault pour la sauvegarde des clés, et nous n’aurons pas besoin dans notre cas de passphrase, en vue d’une possible automatisation des synchronisations.

Les 2 clés sont donc générées dans ~/.ssh/

Il suffit alors de copier la clé publique sur le serveur, dans le répertoire courant de l’utilisateur avec lequel on se connecte.

Voici une procédure possible avec scp (man scp pour plus d’information) :

scp /home/moi/.ssh/id_rsa.pub monlogin@ip-du-server:.ssh/authorized_keys

(Il faudra peut être créer le dossier .ssh à la racine du dossier personnel de l’utilisateur).

Bugs courant :

Agent admitted failure to sign using the key.

Peut se produire alors que la clé publique a bien été transmise au serveur (le bug semblerait provenir du client SSH natif d’ubuntu: https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/201786).

Voici la commande salvatrice :

export SSH_AUTH_SOCK=0

En savoir plus

Voir l’étude de cas
Lire l’article
Voir le témoignage
Fermer