C'est en baillant que la loutre le dit:

Loutre avec écouteurs

Script bash d'instanciation de Drupal (ou autre) sur LAMP (ou autre)

mar, 04/09/2012 - 19:42 -- mzw
binbash

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:

  1. Création des dossiers et des virtual hosts correspondants Apache2
  2. Création de la base de données MySQL
  3. 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

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

$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

Bonjour,

J'avais commencé un script similaire : http://www.deblan.tv/post/439/CMS-Installer-lancement-du-projet
Il permet d'installer des CMS et de pouvoir ajouter des installateurs pour ceux qui ne sont pas dans la liste. Seul Wordpress ou pluxml sont complétement gérés % un ou deux problème d'url dans la bdd Wordpress.

Visiblement ton script gère l'installation du CMS directement ? J'ai pas regardé la vidéo, mais j'ai téléchargé le projet mais je comprends pas vraiment comment ça fonctionne.

Disons que de mon côté, c'est drush qui gère l'installation de Drupal (c'est vraiment fait pour), là la chose intéressante pour moi c'était d'avoir quelque chose qui met en place Apache et une base de donnée par site rapidement.

Effectivement il permet de créer une procédure pour installer n'importe quel cms en cli, sans devoir sa fader sois-même les téléchagements. Contrairement à moi tu gères la couche de conf apache.

Basiquement mon outil fonctionne de la sorte : cms --install Wordpress --version stable --to-dir blog/. Suite à cette commande on te pose des questions (accès base de données, conf basiques du CMS) et c'est plié. Ça m'a permis de déployer des Wordpress sans accès HTTP prêts (en prorogation DNS, pas d'accès root pour apache, etc.).