Retour : Page Principale > sommaire applications générales > Nouveau site Web

Migration des données de l'ancien site Web vers le nouveau

Une des tâches les plus délicates du changement de site Web est la migration des données existantes de Papyrus et SPIP, vers Wordpress.

Les données à migrer sont :
  • utilisateurs : les utilisateurs de l'Annuaire v1 Ă  convertir en utilisateurs Wordpress / Buddypress
  • actualitĂ©s: les articles SPIP Ă  convertir en posts Wordpress
  • Ă©vĂ©nements : les fiches Bazar Ă  convertir en posts Wordpress / ACF
  • rubriques : ? @TODO est-ce le classement des actus dans les bonnes rubriques ?

Script de migration

SVN : http://svn.tela-botanica.net/svn/applications/annuaire/trunk/scripts/modules/migrationwp/
WebSVN : http://svn.tela-botanica.net/websvn/listing.php?repname=Applications.annuaire&path=/trunk/scripts/modules/migrationwp/

Utilisation : php Migration.php nom-de-l-action
(lancer sans argument pour voir la liste des actions possibles)

Migration quotidienne (avant sortie du site)

Pour tester le script de migration ci-dessus, on lance tous les matins un wrapper qui réinitialise l'environnement beta/pretest avec Wordmove, et lance toutes les actions du script de migration.
Ainsi on arrive la matin au bureau et on constate que ça marche pas les données sont là.

tâche CRON

Exécute pretest-nightly-log.sh tous les matins à 01:00 du lundi au vendredi.
Ă€ ajouter dans la crontab de beta :
0 1 * * 1-5 /home/beta/pretest-nightly-log.sh


script pretest-nightly.sh lançant Wordmove + les scripts de migration

Utilise le script de migration, se trouvant dans le code de l'Annuaire (v1, SVN) - dans cet exemple ce script est installé dans /home/beta/migrationwp (penser à régler le fichier config.php).
Attention, l'exécution du tout prend un temps fou (plusieurs heures) !
#!/bin/bash

# "Nightly builder" du site :
#  - copie la /preprod dans /pretest Ă  l'aide de Wordmove
#  - lance le script de migration de l'ancien site (Papyrus / SPIP) vers /pretest
# 
# Ne pas lancer directement, utiliser plutĂ´t pretest-nightly-log.sh
# 
# Mathias - 2017-08-22

MDP_TELABOTAP="mettre le mot de passe ici"

DOS_PREPROD="/home/beta/www/preprod"
CMD_WORDMOVE="wordmove push -e pretest --all"
DOS_MIGRATION="/home/beta/migrationwp"
CMD_MIGRATION_BASE="php Migrationwp.php"
RETOUR=0

# empĂŞche (vite fait) de lancer le script hors du wrapper pretest-nightly-log.sh
if [ "$WRAPPER" != "OUI" ]; then
    echo "Lance pas ça à la main, malheureux ! Utilise plutôt pretest-nightly-log.sh"
    exit 0
fi

# affiche "succès" si le premier argument vaut 0, sinon affiche "échec"
testsucces () {
    if [ "$1" -eq "0" ]; then
        echo "> succès"
    else
        echo "> Ă©chec (exit code : $1)"
    fi
}

## 0. C'est party
echo "Constructeur nocturne (nightly builder) du site Web !"
date 

## 1. Wordmove /preprod => /pretest
echo
echo "> copie de /preprod dans /pretest"
echo "cd $DOS_PREPROD"
cd "$DOS_PREPROD"
echo $CMD_WORDMOVE
eval "$CMD_WORDMOVE"
RETOUR_WM=$?
testsucces $RETOUR_WM
RETOUR=$((RETOUR + RETOUR_WM))

## 2. Script "migrationwp"
echo
echo "> migration des données du site actuel dans /pretest"
echo "cd $DOS_MIGRATION"
cd "$DOS_MIGRATION"

# 2.1 Copie des images des actualités avec rsync
CMD_RSYNC="rsync -avz --rsh= \"/usr/bin/sshpass -p $MDP_TELABOTAP ssh\" telabotap@sequoia:/home/telabotap/www/actu/IMG/arton* /home/beta/www/pretest/wp-content/uploads/2017/08/"
echo $CMD_RSYNC
eval "$CMD_RSYNC"
RETOUR_RSYNC=$?
testsucces $RETOUR_RSYNC
RETOUR=$((RETOUR + RETOUR_RSYNC))

## 2.2 Boucle sur toutes les actions du script de migration
MIG_ACTIONS=( "utilisateurs" "utilisateurs-meta" "utilisateurs-profil" "utilisateurs-activite" "actualites" "actualites-commentaires" "actualites-image-de-couverture" "evenements" "evenements-meta" "rubriques" )
for action in "${MIG_ACTIONS[@]}"; do
    CMD_MIGRATION="$CMD_MIGRATION_BASE $action"
    echo 
    echo $CMD_MIGRATION
    eval "$CMD_MIGRATION"
    RETOUR_MIG=$?
    testsucces $RETOUR_MIG
    RETOUR=$((RETOUR + RETOUR_MIG))
done

## 3. Bilan
echo
echo "Terminé !"
#echo "$RETOUR_WM"
#echo "$RETOUR_MIG"
#echo "$RETOUR"
exit $RETOUR


wrapper pretest-nightly-log.sh qui envoie un log par email

Déclenche pretest-nightly.sh et envoie le résultat par email à l'adresse configurée.
#!/bin/bash

# Wrapper pour pretest-nightly.sh, qui envoie le log par email
# 
# À lancer tous les matins à l'aide d'un CRON
# 
# Mathias - 2017-08-22

CMD_PRETEST_NIGHTLY="./pretest-nightly.sh"
AJD=`date "+%Y-%m-%d"`
FICHIER_LOG="/tmp/pretest-nightly_${AJD}.log"
ADR_EMAIL="superadresse@superdomaine.com"

# 1. Exécution du script pretest-nightly, log du résultat
cd "$(dirname "$0")"
echo $CMD_PRETEST_NIGHTLY
echo "log : $FICHIER_LOG"
eval WRAPPER="OUI" "$CMD_PRETEST_NIGHTLY" > $FICHIER_LOG

# 2. Envoi d'un email de rapport contenant le log
echo "Envoi du log par email Ă  [$ADR_EMAIL]"
mail -s "Pretest-nightly rapport du $AJD" $ADR_EMAIL < $FICHIER_LOG