Grégori DESAI développeur PHP mySQL Javascript Symfony

Automatiser une mise en production de Symfony sur un hébergement mutualisé

Publié le 17/06/10 par Grégori DESAI - Catégorie : Symfony


Mon précédent billet a traité de la procédure à suivre pour faire fonctionner sans trop de difficulté Symfony sur un hébergement mutualisé sans accès SSH.
Cela fonctionne bien, mais les mises en production à partir de votre environnement de développement peuvent vite se révéler fastidieuses, surtout si elles sont nombreuses. Uploader manuellement les fichiers via FTP en prenant soin de ne pas écraser les modifications préalablement effectuées vont souvent vous mener à des soucis. C'est ce que l'on souhaite éviter.

Par défaut, Symfony propose de synchroniser l'environnement de développement avec l'environnement de production en utilisant rsync.
Problème : rsync utilise sftp, ce qui oblige donc de passer par un serveur SSH. Or, nous n'en n'avons pas !

Je vous propose donc un petit script qui utilise lui aussi rsync, mais qui passe par FTP pour effectuer la synchronisation. Seul pré-requis : avoir un environnement de développement sous Linux.

Installation de rsync et lftp sur votre serveur de développement (Ubuntu)



gb@gbx:~$ sudo apt-get install rsync && sudo apt-get install lftp

Enlevez les sudo si vous êtes sur Débian et exécutez cette commande en root.

Le script de synchronisation de votre projet Symfony



Le script est composé de deux fichiers :

rsync_exlude.txt
Ce fichier contient tous les masques de fichiers et dossiers à ne pas exporter. Vous pouvez le configurer à votre sauce, voici celui que j'utilise :

# Project files
/cache
/log
/web/.*
/web/*_dev.php
/web/uploads
/config
/test
/data
/lib/vendor
layout.php
# SCM files
.svn
.settings
.project
.buildpath

sfExport.sh
Ce script utilise rsync pour copier votre projet vers un répertoire en omettant les fichiers et dossiers exclus par le fichier rsync_exlude.txt. Il va ensuite renommer le fichier web et va enfin uploader les fichiers sur le ftp de destination.

#!/bin/bash
#chemin absolu vers votre projet symfony
LOCALSOURCE="/home/gb/dev/sfProject/"
#chemin absolu vers le dossier dexport. Le dossier sera cree sil nexiste pas
LOCALDESTINATION="/home/gb/dev/export/"
#nom du dossier web sur le FTP. www sur OVH
REMOTEWEBDIRECTORYNAME="www"
#serveur ftp hote
HOST="ftp.xxx.xx"
#login
USER="login"
#password
PASS="password"
#dossier de destination sur le serveur ftp
REMOTEDESTINATION="/"
#activer lupload de lexport vers le serveur ftp
UPLOADENABLED="YES"

echo 'deleting current export directory...'
rm -rf $LOCALDESTINATION
echo 'deleting completed'

echo 'exporting symfony project to '$LOCALDESTINATION
rsync -r $LOCALSOURCE --exclude-from 'rsync_exclude.txt' $LOCALDESTINATION
echo 'exporting completed'

mv $LOCALDESTINATION"/web" $LOCALDESTINATION"/"$REMOTEWEBDIRECTORYNAME
echo 'web directory renamed to '$REMOTEWEBDIRECTORYNAME

if [ $UPLOADENABLED = "YES" ]; then
echo 'uploading to remote ftp server...'
"$(lftp -u $USER,$PASS -d -e "mirror -vnR $LOCALDESTINATION $REMOTEDESTINATION;quit" $HOST)"
fi

Ces deux fichiers doivent être situés dans le même répertoire. vous devez rendre exécutable le fichier sfExport.sh. Enfin, vous pouvez l'exécuter. Vous pouvez dans un premier temps désactiver l'upload en mettant la variable "UPLOADENABLED" à "NO" pour vérifier que les bons fichiers sont exportés et éviter ainsi de tout casser en production.

gb@gbx:~$ chmod +x sfExport.sh
gb@gbx:~$ ./sfExport.sh

N'oubliez pas de vider le cache. Voilà ! Ce script -fait maison- me simplifie énormément la vie mais je tiens à préciser qu'il reste tout de même très basique dans le sens ou il n'y a aucune gestion d'erreur. Si une âme charitable se sent de le faire évoluer, je suis bien sûr preneur !

GO PROD !

D'autres billets pourraient vous intéresser :

Installer et configurer Symfony2 sur Ubuntu server
Installation du plugin reCAPTCHA sur symfony 1.4
Faire fonctionner Symfony sur un hébergement mutualisé OVH


Voir tous les billets sur ce thème ! - Retour au blog


Aucun commentaire


Poster un commentaire

requis

requis
Still in developmentGB 2012