Maintenant qu’on a un plugin facilitant la Mutualisation, on veut pouvoir répliquer les sites mutualisés d’un serveur vers un autre, dans le but de :
- avoir des sauvegardes automatiques prêtes à repartir en cas de problème
- faire des essais dans une copie fraîche d’un site « en production »
- ne pas laisser un site reposer sur les épaules d’un seul administrateur
1. Mise en place des outils
Les outils sont :
- le plugin de mutualisation, La mutualisation facile : modifications manuelles
- l’utilitaire rsync (s’installe sous Debian avec apt-get install rsync
)
- l’utilitaire mysqldump
2. Installation du module de sauvegarde
On administre alanbox
; on souhaite autoriser bennybox
à sauvegarder sur alanbox
.
Installer rsyncd
sur alanbox
:root@alan# apt-get install rsyncd
Choisir un chemin pour les sauvegardes de la bennybox
, et le créer/vérifier qu’il existe ; exemple pour AlternC :root@alan# ls /var/alternc/html/b/bennybox
Dans ce répertoire on créera deux sous-répertoires :
- spip/
accueillera la copie du spip mutualisé ainsi que ses sous-répertoires sites/
et plugins/
.
- sql/
recevra les dumps des bases de données.
Configurer rsyncd
pour lui ajouter un module bennybox
:
root@alan# edit /etc/rsyncd.conf
[bennybox]
uid = www-data
gid = 2036
use chroot = yes
path = /var/alternc/html/b/bennybox
auth users = bennybox
secrets file = /etc/rsyncd.secret
read only = no
# hosts allow = 1.2.3.4
Ici www-data
et 2036
sont respectivement l’utilisateur et le groupe sous lequel il faudra enregistrer les fichiers sauvegardés. (La ligne hosts allow = IP
permet d’accroître la sécurité en exigeant une vérification du numéro IP du client.)
Dans /etc/rsyncd.secret
ajouter une ligne avec son mot de passe :bennybox:987654
3. Envoi des fichiers vers le serveur de sauvegarde
La première fois, créer un fichier de mot de passe : dans /home/ben/rsync.passwords/alanbox
écrire 987654
; puis modifier les droits de ce fichier de façon à ce que personne ne puisse le lire en-dehors de l’utilisateur qui est censé l’utiliser :ben@bennybox> chmod 600 /home/ben/rsync.passwords/alanbox
A partir de là une sauvegarde s’effectue avec cette commande :
ben@bennybox> rsync -azv --delete --exclude "*/tmp/*" --exclude "*/local/*" \
--password-file=/home/ben/rsync.passwords/alanbox \
/chemin/vers/spip/ \
rsync://bennybox@alanbox.tld/bennybox/spip/
Ici on doit voir l’ensemble des fichiers du répertoire spip/
de la bennybox
se backuper dans le répertoire /var/alternc/html/b/backup/bennybox/spip/
sur alanbox
; à l’exception des fichiers contenus dans les répertoires sites/*/tmp/
et sites/*/local/
.
Tous les fichiers seront recopiés, y compris ceux de SPIP et ses plugins, ce qui permettra au backup d’être réellement complet. Si on veut ne sauvegarder que le répertoire sites/
, il faut modifier un peu la commande :
ben@bennybox> rsync -azv --delete --exclude "*/tmp/*" --exclude "*/local/*" \
--password-file=/home/ben/rsync.passwords/alanbox \
/chemin/vers/spip/sites/ \
rsync://bennybox@alanbox.tld/bennybox/spip/sites/
4. Dump des bases de données
Un script de backup, à faire tourner en tant que root
(https://gist.github.com/4434273), permet de sauvegarder chaque table de chaque base de données, en évitant toutefois les énormes (et inutiles) tables d’indexation.
Le résultat se présente sous la forme suivante :
root@bennybox# ls /var/state/mysql/
alternc/ spip/ truc/
zope/
root@bennybox# ls /var/state/mysql/spip/
spip_articles.sql.gz spip_breves.sql.gz ....
5. Sauvegarde des dump de bases de données
Il faut exporter toutes les tables pertinentes vers alanbox
; bien entendu il faut filtrer, pour ne pas exporter les tables qui ne concernent pas SPIP.
Si on a opté pour une mutualisation avec une seule base de données, et des préfixes de table différents, on s’intéressera, dans le répertoire /var/state/mysql/
, à tout ce qui est de la forme spip/*
.
A l’inverse si on a opté pour des bases différentes, préfixe spip_
, on pourra choisir d’exporter */spip_*
.
D’autres cas de figure sont possibles, notamment, si toutes les bases mutualisées ont le même préfixe mutu_
: mutu_*/*
Quoi qu’il en soit, il faut établir cette liste, puis demander à rsync de la sauvegarder sur alanbox
. A cause des particularités de rsync, il faut procéder en deux temps :
root@bennybox# cd /var/state/mysql/
root@bennybox/var/state/mysql/# ls mutu_*/*
mutu_site1/spip_articles.gz ....
root@bennybox/var/state/mysql/# rsync -avvR --delete \
mutu_*/* \
--password-file=/home/ben/rsync.passwords/alanbox \
rsync://bennybox@alanbox.tld/bennybox/sql/
* *
Une petite pause, on se projette sur alanbox
et on observe le résultat :
root@bennybox# ssh alan@alanbox
alan@alanbox> cd /var/alternc/html/b/bennybox/ ; tree
spip/
spip.php etc
sites/
tetris.scriibe.net/
IMG/
config/
zargla.scriibe.net/
IMG/
config/
...
sql/
tetris/
spip_articles.gz
spip_breves.gz
zargla/
spip_articles.gz
spip_breves.gz
...
6. Faire un cron
Une fois que ça marche, il suffit de mettre les commandes dans la crontab (À rédiger)
7. Faire la ronde
Maintenant qu’on sait exporter les sites de bennybox
vers alanbox
, on procède dans le sens inverse pour avoir un backup partagé. On peut s’y mettre à 3, 4, 5...
Attention à ne pas écraser un site en production !
8. En cas de besoin
Si on a besoin d’activer un des sites sauvegardés (mon-site
), comment procéder :
a. repérer les contenus nécessaires
- les fichiers spip/sites/mon-site/
- les tables sql/mon-site/spip_*.gz
- éventuellement, les fichiers de spip et l’arborescence de plugins associés.
b. remonter les éléments sur un nom de domaine temporaire
- soit à l’identique (attention à ce que les noms des bases de données soient compatibles avec les vôtres)
- soit en adaptant la structure, si celle de la alanbox
ne correspond pas à celle de la bennybox
c. installer le nom de domaine définitif