Accueil > Documentation > Le plugin migration pour SPIP

Le plugin migration pour SPIP

Le plugin migration permet de recopier facilement d’un site SPIP source vers un site SPIP destination :

  • base de données,
  • images et documents de IMG/,
  • dossier squelettes.

Le plugin ne prend pas en charge le transfert des plugins (il faut que les plugins soient disponibles sur le site destination).

Mode d’emploi pour les pressés

  • installer le plugin migration sur les 2 sites (source ET destination),
  • sur chaque site activer le plugin et aller dans la partie de configuration du plugin,
  • lancer la procédure sur le site destination
  • copier l’URL de migration fournie
  • lancer la procédure sur le site source,
  • coller l’URL de migration fournie par le site destination,
  • aller chercher un café pendant le transfert pour patienter,
  • et voilà c’est cuit fini.

Compatibilité du plugin

Le plugin est conçu pour fonctionner avec les versions de SPIP suivantes :

  • SPIP 2.0 ou plus pour le site source.
  • SPIP 2.1 ou plus pour le site destination.

Les sites source et destination ne sont pas obligatoirement dans la même version, mais le site destination doit impérativement être dans une version supérieure ou égale au site source (on ne peut pas downgrader).

Les sites source et destination ne sont pas obligés d’utiliser le même gestionnaire de base de données. On peut transférer un site sous MySql vers un site sous SQLite. Cependant, le support de SQLite est imparfait pour les versions SPIP 2.x, et il vaut mieux utiliser MySql dans ce cas.

Cas testés avec succès
Sourcedestination
SPIP 2.1.x/mysql SPIP 2.1.x/mysql
SPIP 2.1.x/mysql SPIP 3.0-stable/mysql
SPIP 2.1.x/mysql SPIP 3.0-stable/sqlite

Si vous rencontrez des soucis avec une combinaison source/destination précise, n’hésitez pas à l’indiquer dans les commentaires ci-dessous afin que nous puissions regarder.

Exemple illustré d’une migration

Voici un exemple de migration du site http://www.spip-info.net.

Télécharger le plugin migration.

Plugin Migration v1.0.0

Vous pouvez aussi le récupérer depuis GitHub.

01 Téléchargement du plugin Migration sur Github

Déposer le plugin dans le répertoire plugins du site Source, l’activer. Cliquer sur l’icône à droite du plugin Migration pour arriver dans la partie configuration.

02 Activation du plugin sur le site Source

Un petit texte informatif vous informe qu’il faut continuer :)

03 Liste des éléments qui vont être transférés par le plugin migration

Choisir ce qui doit être transféré vers le site de destination (ATTENTION, pour rappel, en choisissant de transférer la base source, la base de données destination sera effacée).

04 Choix de ce que l’on veut transférer

Voilà, votre site est prêt à envoyer les données, il faut maintenant passer sur le site qui va recevoir, pour récupérer l’URL de migration.

05 Attente de l’url contenant la clé de migration

Installer le plugin Migration (ou l’activer) sur le site destination.

06 Télécharger et activer le plugin Migration sur le site Cible

Un petit texte informatif vous informe qu’il faut continuer :)

07 Message d’information, on continue

On indique que l’on veut recevoir les données d’un autre site.

08 Site Cible, on veut recevoir des données depuis un autre site

Voilà l’URL de migration qui va permettre de déclencher le transfert entre les deux sites. Copier cette URL.

09 Url contenant la clef de migration

Coller l’URL dans le site Source et lancer la migration.

10 Coller la clef de migration sur le site Source

La migration commence coté Source

11 L’envoi des données commence

La migration commence coté destination. Laisser les 2 fenêtres côte à côte, cela fait de l’animation.

12 Le site cible reçoit les données

Et voilà, la migration est terminée. Un récapitulatif de ce qui a été transféré est affiché sur le site source (et sur le site destination, sauf en cas d’upgrade nécessaire). On voit ici :

  • tous les fichiers ne sont pas transférés (en particulier les fichiers php). Pour des raisons de sécurité, seuls les fichiers acceptés comme documents sont pris en compte dans la migration,
  • ici, le champ openid a été ignoré, car une erreur SQL a empêché sa création sur le site destination (c’est un défaut lié à l’utilisation de SQLite sur le site cible, en cours de correction),
  • le dossier squelettes a été transféré,
  • toutes les tables (y compris les tables des plugins) ont été transférées.
13 Rapport de fin de migration coté source

Coté destination, la migration est terminée et l’on est dans l’espace privé. Dans notre cas le site source était en version SPIP 2.1.10 (alors que le site destination est en version SPIP 3.0-stable), il faut donc mettre à jour la base de données.

14 Fin de la migration coté Cible

Mise à jour de la base.

15 Mise à jour de la base (SPIP 2.1.10 -> SPIP 3.0-stable)

Mise à jour de la base.

16 Mise à jour de la base (SPIP 2.1.10->SPIP3.0-stable)

Voilà, la migration du site destination s’est bien passée. ici par exemple l’administrateur active le plugin social tags qui est à la fois présent sur le site source et sur le site destination.

17 Plugins sur le site Cible

Nous pouvons maintenant jouer au jeu des 7 différences.

18 Le jeu des 7 différences - source

La différence est sur le cartouche droit en bas. C’est sûrement lié au plugin « Sélection d’articles » présent sur le site source et pas sur le site destination.

19 Le jeu des 7 différences - Cible

Allez, une dernière fois le jeu des 7 différences.

20 Le jeu des 7 différences (II) - source

Aucune différence, si ce n’est le petit écureuil qui matérialise la présence du plugin « en travaux ».

21 Le jeu des 7 différences (II) - cible

Un peu de technique : ce que fait le plugin

Toutes les données sont transférées par http du site source vers le site destination. Les données sont tronçonnées par morceau (compromis entre taille et nombre de requêtes), sérialisées, encodées et cryptées à l’aide de la clé de migration fournie par l’URL de migration.

Pour démarrer le transfert, le site de destination ouvre une porte qui permet au site source d’écrire dans la base de données et dans les dossiers IMG/ et squelettes/. La sécurité repose sur la clé de migration. Cette clé est fournie par le site de destination et est temporaire : si aucune donnée n’est envoyée dans un laps de temps de 5 minutes, la clé devient invalide.

Lorsque la migration est terminée, il est vivement conseillé de désactiver le plugin pour empêcher toute utilisation frauduleuse de son point d’entrée.

Transfert de la base de données
Les tables du site de destination sont supprimées et recrées avec la structure du site source, à l’exception des tables spip_auteurs et spip_meta qui ne peuvent techniquement pas être supprimées. Dans ce cas, les champs manquants sont ajoutés à la table existante. Il peut donc y avoir quelques cas limites lorsque le site source utilise un plugin qui étend la table spip_auteurs.

Si un champ ne peut pas être créé dans la table spip_auteurs (erreur SQL), cela ne bloquera pas le transfert de la base. Il sera simplement ignoré à la réception.

Les données sont envoyées par paquets sérialisés : le site source lit un certain nombre de lignes de sa table, les met dans un tableau, et les envoie au site de destination. Celui-ci lit le tableau, et les ré-insère dans sa base, et répond pour dire si l’opération a réussie ou non. Et ainsi de suite, table par table.

Le transfert de la base n’est pas incrémental, mais complet à chaque fois (pour assurer la cohérence des données).

Transfert des fichiers
Aucun fichier n’est supprimé du site destination avant transfert.

Tous les fichiers du site source sont scannés. La signature md5 du fichier est calculée, et le site source demande au site destination s’il a déjà ce fichier, avec ce nom et cette signature.

  • Si le fichier est d’un type non autorisé, le site destination le refuse et le note comme fichier ignoré.
  • Si le fichier existe sur le site source et est identique, il est passé.
  • Si le fichier n’existe pas, il est lu par morceau et envoyé. Le site destination le récupère et le ré-écrit par morceaux.

Vous pouvez donc ré-envoyer plusieurs fois votre dossier IMG/ ou squelettes/, seuls les fichiers ajoutés depuis la dernière fois sur le site source seront ré-envoyés.

Cela ne pose pas de problème de cohérence de données, car il y a au pire des fichiers non utilisés qui restent sur le disque du site destination, et tous les fichiers nécessaires sont bien envoyés.