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…
Tags
Infos