HOWTO : Migration SPIP

lundi 17 août 2009, par Minimalteck

Ce HOWTO décrit une procédure de migration d’un site Web sous SPIP [1]/LAMP [2].
Il se destine "aux admins sys débutants" ou "aux admins sys qui connaissent rien à SPIP et qui pensent qu’ils vont galérer grave"… bref c’est de la migration à consommer sans mâcher…

Les préliminaires Quelques vérifications sont à faire pour ne pas avoir de mauvaises surprises…

- Au niveau d’Apache2 :

  • Vérifier qu’Apache dispose du mod_rewrite :
    root@linux:~# ls /etc/apache2/mods-enabled/ | grep rewrite
    rewrite.load

le module est bien chargé, sinon pour l’activer "a2enmod rewrite ;/etc/ini.d/apache2 force-reload" fera l’affaire

  • Consulter la configuration vhost [3] du site spip à migrer : La directive AllowOverride placée à All pour disposer des .htaccess

- Au niveau de Spip : vérifier la compatibilité des plugins installés, des squelettes, etc.
Là c’est pour les puristes… normalement cette tâche est dévolue aux développeurs…

Ça c’est fait, maintenant, on va vraiment s’y mettre…

 ETAPE 1 : Installation d’une nouvelle version de Spip

  • Créer un nouveau répertoire temporaire sous l’arborescence de l’actuel site spip ex : spip-x.x.x (où x.x.x correspond à la nouvelle version) cela permettra d’accédér à l’interface Web d’installation sans pour autant toucher à la configuration d’Apache pour le moment
    root@linux:~# cd /chemin/vers/spip/ancienne/version/
    root@linux:/chemin/vers/spip/ancienne/version# mkdir spip-x.x.x
    root@linux:/chemin/vers/spip/ancienne/version# cd spip-x.x.x
  • Récupérer et déployer l’archive de la version stable de SPIP (on trouvera l’url à partir de http://www.spip.net/fr_download) :
    - > On télécharge ; on dézippe ; on replace les fichiers contenus dans le nouveau répertoire "spip" vers ./spip-x.x.x ; on supprime l’archive et le répertoire "spip" vide.
    root@linux:/chemin/vers/spip/ancienne/version/spip-x.x.x# wget http://files.spip.org/spip/stable/spip.zip ; unzip ./spip.zip ; mv ./spip/* . ; rm -rf ./spip/ ./spip.zip;
  • Modifier les droits des répertoires local/ tmp/ config/ pour la nouvelle installation : on affecte les droits au bon propriétaire:groupe (ici webuser:webuser) pour l’ensemble des fichiers du site
    root@linux:/chemin/vers/spip/ancienne/version/spip-x.x.x# chown -R webuser:webuser ./*

Mais on doit autoriser Apache à lire/ecrire dans IMG/ local/ tmp/ config/ donc :

root@linux:/chemin/vers/spip/ancienne/version/spip-x.x.x# chown -R :www-data IMG/ local/ tmp/ config/
root@linux:/chemin/vers/spip/ancienne/version/spip-x.x.x# chmod 775 IMG/ local/ tmp/ config/

 ETAPE 2 : Couper les accès à l’ancien site

  • on va creer un message de maintance aux internautes via un fichier index.html que l’on place au sein de l’ancien site :
    root@linux:/chemin/vers/spip/ancienne/version/spip-x.x.x#echo 'Site en maintenance' > ../index.html
  • on va tester la présence d’un .htaccess utilisé par les réecritures d’URL dans spip. S’il existe, on le copie sous le répertoire ./spip-x.x.x/ et on met une nouvelle règle qui va rediriger tout vers index.html
    root@linux:/chemin/vers/spip/ancienne/version/spip-x.x.x# test ! -f .htaccess || cp -a ../.htaccess .; printf "RewriteEngine On\nRewriteBase /\nRewriteRule (.*) index.html [L]" > ../.htaccess;
  • On corrige tout de suite la directive RewriteBase de l’ancien .htaccess en ajoutant /spip-x.x.x/
    root@linux:/chemin/vers/spip/ancienne/version/spip-x.x.x# sed -i -e 's/^\(RewriteBase\)\(.*\)\/$/\1\2\/spip-x.x.x\//g' .htaccess
  • Copier les répertoire IMG, squelettes-dist (ou celui correspondant aux squelettes utilisés par le site) et le répertoire plugins s’il existe de l’ancienne version spip vers la nouvelle instance : root@linux :/chemin/vers/spip/ancienne/version/# cp -ar ../IMG ../squelettes-dist ../plugins .

 ETAPE 3 - Aspect MySQL

  • Récupérer les paramètres de connexion au sgdb sont dans l’arborescence spip sous /config/connect.php
    root@linux:/chemin/vers/spip/ancienne/version/spip-x.x.x# grep spip_connect_db ../config/connect.php
    spip_connect_db('host',','user','password','db_name','mysql', 'spip',');
  • faire un dump de la base utilisée par spip :
    root@linux:/chemin/vers/spip/ancienne/version/spip-x.x.x# mysql -u root -p --opt db_name > ../db_name.backup.sql
  • Créer une nouvelle base qui accueillera la nouvelle version de spip
    root@linux:/chemin/vers/spip/ancienne/version/spip-x.x.x# mysql -u root -p
    mysql> USE db_name2 ; //on vérifie que la nouvelle base n'existe pas : si c'est le cas, mysql nous renvoie une erreur
    mysql> CREATE DATABASE `db_name2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; // création de la nouvelle base en utf8
    mysql> GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES , CREATE VIEW , SHOW VIEW , CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `db_name2` . * TO 'user'@'host' ; // affectation des droits à l'utilisateur user sur la nouvelle base
    mysql> FLUSH PRIVILEGES ; // on recharge les privilèges
    mysql> EXIT;
  • Alimentation de la nouvelle base avec la sauvegarde
    root@linux:/chemin/vers/spip/ancienne/version/spip-x.x.x# mysql -u root -p db_name2 < ../db_name.backup.sql

 ETAPE 4 - Installation de la nouvelle version via l’interface Web

- Dans un navigateur ouvrir http://url.ancien.site/spip-x.x.x/e… et procéder à l’installation avec les choix suivants :

  • ETAPE 1 : Connexion à votre base de données
    • Adresse de la base de données : host
    • Le login de connexion : user
    • Le mot de passe de connexion : password
  • ETAPE 2 : Choix de votre base
    • Choisissez votre base : choisir db_name2
  • ETAPE 3 : Informations personnelles Attention : cela va écraser les anciens paramètres de l’administrateur principal du site… il vaut mieux donc les remettre à l’identique, ou penser à signaler ces changements à la personne qui maintient le site.
    • Votre identité publique : Signature/Votre adresse email
    • Vos identifiants de connexion : Votre login/Votre mot de passe

- Finir l’installation et effectuer les derniers réglages :

  • Se connecter à l’interface privée : Un message technique peut apparaître proposant une procédure de mise à jour, en fait une mise à niveau de la base base SQL Il suffit alors de suivre instruction indiquées
  • Aller dans "Configuration > Vider le cache" : vider le cache
  • Si le site comporte de splugins, aller dans "Configuration > Gestion des plugins" activer les plugins requis en cochant les cases associées et cliquer sur "Valider"

 ETAPE 5 : Vérification du bon fonctionnement du site

  • Dans l’espace privé, aller dans Configuration et ajouter "spip-x.x.x/" à l’"Adresse (URL) du site public"
  • Un rapide surf sur le site permettra de voir si la migration s’est bien passée… j’en suis sûr ;-)

 ETAPE 6 : mise en production

- Aller dans "Configuration > Vider le cache" : vider le cache
- Corriger le .htaccess en supprimant le "spip-x.x.x\/" du RewriteBase

root@linux:/chemin/vers/spip/ancienne/version/spip-x.x.x#sed -i -e 's/spip-x.x.x\///g' .htaccess

- On se replace en racine du Vhost pour sauvegarder l’ancien site au cas où et on nettoyer tout :

root@linux:/chemin/vers/spip/ancienne/version/spip-x.x.x# cd ..
  • on sauvegarde :
    root@linux:/chemin/vers/spip/ancienne/version# tar -cpzf ~/backup.tar.gz --exclude=spip-x.x.x *
  • on nettoye bien :
    root@linux:/chemin/vers/spip/ancienne/version# find ./ -maxdepth 1 -type d ! -name "spip-x.x.x" -exec rm -rf {} \;
    root@linux:/chemin/vers/spip/ancienne/version# find ./ -maxdepth 1 -type f ! -name ".htaccess" -exec rm -rf {} \;

- on met en prod en déplaçant le contenu de ./spip-x.x.x en racine du Vhost :

root@linux:/chemin/vers/spip/ancienne/version# mv ./spip-x.x.x/* .

- on supprime le répertoire qui a servi à la migration, l’ancienne base de données et c’est fini !!!!

root@linux:/chemin/vers/spip/ancienne/version# rmdir ./spip-x.x.x
root@linux:/chemin/vers/spip/ancienne/version# mysql -u root -p
mysql> REVOKE ALL PRIVILEGES ON `db_name` . * FROM 'user'@'localhost';
mysql> mysql> FLUSH PRIVILEGES ;
mysql> DROP// DATABASE `db_name` ;
mysql> EXIT;

La procédure en elle-même est identique sous Windows… mais on clique plus qu’on ne tapote et on ne se préoccupe pas des permissions sur les fichiers…

Notes

[1] Note : concerne les version ultérieures à spip 1.9.1

[2] Dans l’exemple une Debian-like

[3] Remarque : Quel est le fichier de conf pour ce site ? un "grep -l '/chemin/vers/spip/ancienne/version/' /etc/apache2/sites-available/*" donne la réponse !

SPIP | squelette | | Plan du site | Suivre la vie du site RSS 2.0