Dans le cadre de mon travail chez Linalis, j'ai souvent affaire à des créations d'instances de sites Drupal sur le serveur de développement distant (et en local aussi). Sans vouloir installer de logiciel lourd de déployement, les actions répétitives qui sont utilisées pour instancier un nouveau site sont tout bonnement inacceptables pour tout bon fainéant que nous (je) sommes (suis). Voilà donc un petit script basique que j'ai développé qui pallie ce problème.
Ce script permet plusieurs choses:
- Création des dossiers et des virtual hosts correspondants Apache2
- Création de la base de données MySQL
- Installation de Drupal
Avertissement : Ce script est encore en phase de test. A utiliser à tes risques et périls, je ne serai pas responsable si un incendie se propage dans la salle des serveurs.
Prérequis
Avant de commencer, les prérequis ! Nous avons besoin de :
- Debian ou Ubuntu (testé et fonctionnel avec configuration basique d'Apache2). Il y a peut-être des incompatibilités avec d'autres distributions, je ne sais pas, j'ai pas testé.
- Apache2 fonctionnel
- Un accès root
- MySQL. Si tu veux installer une base, il te faudra un utilisateur mysql et son mot de passe. Son mot de passe sera écrit en clair dans le fichier de configuration, n'utilise pas l'utilisateur root !
- Drush (Drupal Shell), utilisé pour l'installation de Drupal: http://drupal.org/node/1248790
- Éventuellement git, pour télécharger les fichiers
$ apt-get install git
- Un éditeur texte
- Le script SiteInstanciator !
$ git clone git://github.com/michaelz/SiteInstanciator.git
Accessible ici également: https://github.com/michaelz/SiteInstanciator
Configuration
SiteInstanciator se configure dans un fichier de configuration nommé siteinstanciator.cfg. C'est simplement une liste de variables qui sera chargée au début de l'exécution du script.
Première chose à faire, rentrer dans le dossier SiteInstanciator tout fraîchement installé et copier le fichier siteinstanciator_default.cfg vers siteinstanciator.cfg.
$ cd SiteInstanciator
$ cp siteinstanciator_default.cfg siteinstanciator.cfg
Ensuite, édite le fichier de configuration fraîchement copié. Voici une définition des variables principales.
- SERVERHOST: où les sites sont hébergés. Il sera utilisé pour définir l'url d'accès au site, par exemple "dev.monserveur.ch" donnera "nomdusite.dev.monserveur.ch" ;
- SERVERADMIN: Plus ou moins interne à Apache. C'est le mail où les messages venant d'Apache2 seront envoyés, en fonction de sa configuration ;
- DEVPATH: C'est le chemin (sans / à la fin !) où les dossiers sont créés. D'habitude, on mettra /var/www ou /var/www/htdocs. On peut également imaginer un truc comme /home/user/www si on est le seul utilisateur de la machine ;
- LOGPATH: Le chemin des logs d'apache, avec A2ERRORLOG et A2TRANSFERLOG, on peut choisir où exactement ;
- A2FILE: Le chemin du fichier de configuration du virtual host. Ce script est prévu pour fonctionner avec un seul fichier qui s'appelle par défaut $SERVEURHOST, ou "dev.monserveur.ch" dans notre exemple ;
- DBDEVUSER: l'utilisateur mysql que tu as créé durant le prérequis ;
- DBDEVPW: son mot de passe ;
- DBDEVPREFIX: un préfixe aux bases de données (ne pas confondre avec les préfixes de tables !). La base de données s'appelera par défaut db_nomdusite. J'ai défini ce préfixe pour qu'on voie au premier coup d'oeil quels sont les sites qui ont été créés par SiteInstanciator.
On a fait le tour.
Utilisation
$ cd SiteInstanciator
$ sudo ./siteinstanciator.sh nomdusite
Ceci va créer un site au nom de "nomdusite". Il va te poser plein de questions, enfin, il faudra surtout répondre à des (Y/N) pour qu'il continue à s'executer.
Si tu veux ajouter une base de données, il te faut connaître le mot de passe de l'utilisateur root de MySQL. Il n'y a dans mon script pas encore de boucle qui permet de vérifier le mot de passe, et s'il est faux, il y aura une erreur et le script s'arrêtera. Alors sois sûr !
À la fin du script, si tu acceptes d'installer Drupal, drush te donnera le mot de passe du compte admin.
Après la première utilisation, il sera sûrement nécessaire à Apache2 d'activer le fichier défini dans la variable A2FILE.
$ sudo a2enfile /etc/apache2/sites-available/dev.monserveur.ch
où dev.monserveur.ch est défini dans la configuration dans la variable SERVEURHOST.
Et après chaque utilisation cette fois, un redémarrage ou un reload du service apache2 est obligatoire.
Sur Debian:
sudo /etc/init.d/apache2 reload
Remarque sur les DNS
Avoir créé tes sites, c'est bien joli, mais ça ne va te servir à rien si tu n'as pas de serveur DNS qui tourne et qui est bien configuré. Effectivement, les virtual hosts sont bien définis au niveau du serveur, mais Internet n'a aucune idée à quoi ça correspond.
On peut donc faire deux choses:
- Configurer un serveur DNS
- Ajouter l'info dans le fichier /etc/hosts, et ça peut même se rajouter au script :
$ echo "127.0.0.1 $SITENAME.$SITESERVER" >> /etc/hosts
Où $SITENAME.SITESERVER correspondrait à quelque chose du genre de nomdusite.dev.monserveur.ch.
L'adresse IP 127.0.0.1 doit être remplacée évidemment par l'adresse IP du serveur. L'exemple ici fonctionne en local.
Comme déjà dit précédemment, ce script est en phase de test, n'hésite pas à cloner et à tester !
Commentaires