Vous vous êtes certainement retrouvé face à ce problème : je viens de finir mon projet Symfony 1.4, je l’ai déployé grâce à symfony project:deploy ou cloner via git, et maintenant il faut que je configure tout à la main, la base de données, que je la remplisse etc. C’est plutôt pas marrant avec les différents fichiers à changer, alors pourquoi ne pas simplifier ces tâches ?
Anisi, Symfony-Installer est là pour ça, une fois que tout est bien prévu, l’installation du projet et sa configuration se fait très simplement. Par contre, ce script n’est pas parfait et surtout ne fonctionne que sur Unix.
Qu’est-ce qu’il fait
Pour l’instant il permet de configurer simplement la base de donnée, la construire et la remplir (en prenant soin de ne pas supprimer la base, si vous le souhaitez), et quelques petites opérations comme vider le cache.
Il installe aussi les dépendances GIT que vous lui auriez précisé.
Qu’est-ce qu’il ne fait pas (ou pas encore)
- le café, ni votre projet
- il ne configure Apache (ni autre serveur web) pour votre projet Symfony
- il ne vous demande pas d’ajouter au moins un groupe et un administrateur (donc vous êtes supposé l’avoir fait dans les mixtures ou le faire manuellement après)
- si vous ne droppez pas toute la base de données (donc que toutes les tables dans la base sont conservées), il ne vérifie pas que les tables qu’il va créer existes ou non et les supprimes le cas échéant (donc à vous de les supprimer à la main avant, sinon ça va planter).
Comment ça fonctionne
Pour que tout fonctionne bien, il faut quand même prévoir un minimum le coup.
Installation
Pour l’installation, rien de plus simple : placez-vous à la racine de votre projet symfony puis :
git clone git://github.com/Pierrecle/Symfony-Installer.git
Vous pouvez donc maintenant exécuter ceci pour voir les options qui vous sont offertes :
bash Symfony-Installer/install -h
Dépendances GIT
Si vous hébergez votre projet dans un dépôt GIT, vous n’avez peut-être pas envie de stocker certaines dépendances (comme symfony lui-même), pour un gain de place ou autres raisons. J’ai donc modifié le script vendors de Symfony 2, qui en plus d’être très pratique et plutôt bien foutu, peut fonctionner très simplement, sous réserve de quelques modifications, avec d’autres environnement. Ainsi, vous n’avez qu’à créer un fichier deps à la racine de votre projet et de le remplir selon vos besoins. Par exemple, voici le fichier deps de la plupart de mes projets Symfony 1.4 :
[symfony] git=git://github.com/vjousse/symfony-1.4.git [sfPadminiThemePlugin] git=git://github.com/Pierrecle/sfPadminiThemePlugin.git target=plugins/sfPadminiThemePlugin [padmini] git=git://github.com/Pierrecle/Padmini.git target=plugins/sfPadminiThemePlugin/web/padminiTheme
Ainsi, j’installerai automatiquement Symfony 1.4 dans libs, sfPadminiThemePlugin dans plugins/sfPadminiThemePlugin et Padmini dans plugins/sfPadminiThemePlugin/web/padminiTheme.
Il ne vous reste plus qu’à exécuter ceci pour installer vos dépendances :
bash Symfony-Installer/install -d
Création de l’exécutable symfony
Si vous avez développé votre appli sous Windows ou que vous avez ajouté l’exécutable ./symfony (celui qui permet de gérer votre appli simplement) dans votre gitignore, il faut le recréer. Rien de plus simple, exécutez ceci :
bash Symfony-Installer/install -gsd
Configuration de la base de données
Là ça va demander un peu plus de travail (mais vraiment un peu).
Copiez le fichier config/ProjectConfiguration.class.php en config/ProjectConfiguration.class.php.ini (ce fichier contient la configuration du préfix des tables) :
cp config/ProjectConfiguration.class.php config/ProjectConfiguration.class.php.ini
Dans le fichier ProjectConfiguration.class.php.ini, modifiez la fonction configureDoctrine (si vous ne l’avez pas créez la) pour quelle soit comme-ceci :
public function configureDoctrine(Doctrine_Manager $manager) {
$manager->setAttribute(Doctrine_Core::ATTR_TBLNAME_FORMAT, '%%bd_prefix%%%s');
}Voilà , vous n’avez plus qu’à exécuter ceci pour configurer votre base de données :
bash Symfony-Installer/install -g
Attention : si vous n’avez pas une base de données dédiée à votre projet, répondez N à la question Drop … database if exists (réponse par défaut) pour ne pas supprimer votre base données.
A chaque fois que vous modifierez le fichier ProjectConfiguration.class.php (par exemple pour y ajouter un module), n’oubliez pas de refaire les étapes précédentes.
Enfin, si vous utilisez la commande symfony project:deploy pour déployer votre projet, vous devriez ajouter ceci au fichier config/rsync_exclude.txt (et dans votre .gitignore si vous stockez votre projet sur GIT) :
/config/databases.yml /config/ProjectConfiguration.class.php .DS_Store Thumbs.db
Au final, un petit exemple
Une fois que tout est bien configuré, voici ce qui me reste à faire pour installer la plupart de mes projets :
git clone mon_projet.git cd mon_projet git clone git://github.com/Pierrecle/Symfony-Installer.git bash Symfony-Installer/install -s
Je remplis mes infos sur ma base de données et mon site est fonctionnel.
Evolutions
Voici la liste de ce qui pourrait voir le jour dans ce script, car vous l’avez compris il n’est pas parfait non-plus :
gérer les dépôts GIT- ajouter un utilisateur admin et tout ce qui va avec de façon plus user-friendly
- faire un backup de la base de données avant
- exécuter des “drops tables if exists” si l’utilisateur ne le fait pas
- pourquoi pas gérer LDAP
- faire une version Windows (pour être franc, faut pas compter là dessus..)
- une page PHP/JS ou un plugin symfony qui appel le script
Dernier point
Symfony a besoin de PHP 5 pour tourner. Sur certains hébergeurs comme OVH, PHP 5 n’est pas la version par défaut pour php-cli. Regardez les lignes 21 à 25 pour gérer ce cas particulier. De même si vous l’installez chez 1and1 où vous devrez en plus regarder les lignes 55 et 56 de git-install car 1and1 ne prend pas l’option scanner_mode de parse_ini_file.
Interrogations
À la vue de la sortie de Symfony 2, je ne sais pas si ça vaut le coup de continuer à perfectionner ce script. Certaines évolutions sont simples et rapides à mettre en place (comme le backup de la base, le drop tables if exists etc.), mais pour le reste (comme la page PHP/JS et le plugin symfony (déjà est-ce utile ?), la version Windows etc), ne serait-ce pas une perte de temps ?
Have fnu coding!









