Migration d’un Moodle sur un autre serveur

Je partage avec vous un retour d'expérience sur la migration d'un Moodle installé sur un Ubuntu 14 version un nouveau serveur sur un OS Ubuntu LTS.

J'ai voulu profiter de cette migration pour faire une remise à zéro : mon ancien Moodle commence à dater (2005) et à subi quelques soucis de débutants et modifications de code à la main qui peuvent apporter des instabilités, voir des problèmes de sécurité. Je n'ai donc pas opté pour simplement copier le répertoire et la base de donnée.

Avant tout : assurer une sauvegarde complète et fonctionnelle du site.

Modification de l'ancien site (3.1)

Mon ancien site devient une archive exploitable, mais sur laquelle j'ai désactivé les synchronisations d'utilisateurs, des cohortes et la sauvegarde automatique... Les étudiants existants peuvent accéder à leurs cours, mais je demande aux enseignants à ne rien créer dessus.

Je mets un message dans l'entête du site pour que les utilisateurs voient bien qu'ils ne sont pas sur le site normal, mais sur une archive. Je change aussi légèrement le thème en le grisant (façon atténuation).

Sur ancien serveur, création d'un site virtuel sur apache ayant pour nom : moodle-archive.domaine.com à la place de moodle.domaine.com

cp /etc/apache2/site-aviable/moodle.conf /etc/apache2/site-aviable/moodle-archive.conf

Édition du fichier de conf pour répondre au site moodle-archive.com :

a2dissite moodle.conf
a2ensite moodle-archive.conf
service apache2 restart

Sur DNS interne et externe, déclaration de ce site archive :

moodle-archive.domaine.com A 111.111.111.111

Je change les raccourcis qui y mènent temporairement sur le portail d'accès.

Création nouveau site (3.3)

Installation d'un serveur propre : Unbuntu serveur 16.04 LTS + LAMP, paramétrage et sécurisation.

Installation de Moodle par GIT → la base de Moodle est vierge, avec le thème par défaut.

Sur DNS interne et externe, déclaration de ce nouveau site :

moodle.domaine.com A 111.111.111.222

Passage de ce nouveau site en mode maintenance, avec message redirigeant les utilisateurs vers le site archive.

Installation des plugins additionnels. Paramétrage de la plate-forme à l'identique (un ordinateur avec 2 écrans, défilement page à page).

Peuplement du nouveau site

Utilisateurs

Synchronisation des utilisateurs et cohortes avec le LDAP → tous les utilisateurs sont présents et classés dans leur groupe.

Application des rôles particuliers à certains utilisateurs → tout le monde retrouve ses droits.

Cours

Contrairement à d'autres utilisateurs, je ne veux pas automatiquement réintégrer tous les cours : notre site a 12 ans d'existence, je veux faire du ménage ! Je demande donc aux utilisateur de me donner l'id des cours à réintégrer.

Catégories

Création de la l'arborescence des catégories à l'aide du plugin moosh.

  • Sur ancien serveur:
    sudo -u www-data moosh category-export 0 > cat.xml
  • Sur nouveau serveur après copie du fichier :
    sudo -u www-data moosh category-import cat.xml

Cours

Test

Test de l'import d'un cours en passant par sauvegarde dans l'ancien site, puis restauration du fichier dans le nouveau site.

Remarques :

  • un plugin pas réinstallé car pas disponible sur 3.3, mais utilisé seulement sur 2 cours : échec d'import de ces 2 cours ;
  • sauvegarde avec les infos utilisateurs de manière à pas avoir à refaire les inscriptions ;
  • sélection de l'option « Permettre la résolution de conflit admin » si l'administrateur est présent dans un cours (Administration du site > Cours > Sauvegardes > Réglages généraux d'importation par défaut)

Idée initiale

L'idée inititiale était de réintégrer les cours avec moosh, voici la manip que j'ai utilisée.

Sauvegarde

Sauvegarde de l'ensemble des cours (355 cours) sur disque local, puis copie sur un disque partagé.

Paramétrage du lieu de dépôt dans la config de sauvegarde avec paramétrage de la sauvegarde sur espace disque uniquement. Lancement manuel de la sauvegarde en ligne de commande :

/usr/bin/php /var/www/html/moodle/admin/cli/automated_backups.php
Renommage

Les sauvegardes ont un nom comme ceci : « sauvegarde-moodle2-course-110-20170823-0913.mbz »

Sous Windows, utilisation de Advanced renamer pour renommer en masse les fichiers dans le dossier de copie et ne garder de le id.mbz

  • supprimer le masque « sauvegarde-moodle2-course- »
  • tronquer 14 caractères en partant de la fin Les sauvegardes ont maintenant un nom de type : 110.mbz
Préparation de l'importation

J'utilise presque la même méthode citée dans le forum, sauf que je ne désire pas importer tous les cours.

J'importe de moi même tous les cours ayant étés modifiés depuis le 01/09/2016, et n’appartenant pas à la catégorie « bac à sable » (les autres n'ayant pas trop vécus, pas sûr qu'on me demande de les importer... l'occasion de faire le ménage)

SELECT id,category,shortname,fullname,visible,summary FROM mdl_course WHERE timemodified > 1472680800 AND category <> 125

J'utilise ce site pour m'aider dans les dates et timestamp.

Par contre, comme les catégories n'ont plus le même index, mais ont conservées le même nom, je récupère aussi ces infos (je considère que si une catégorie est masquée, c'est qu'elle ne servait plus...)

SELECT id,name,parent,path FROM mdl_course_categories WHERE visible = 1

Puis par une manip avec mon tableur préféré (calc), je change le path en chaine, et réintègre ça dans mon fichier de cours sous la rubrique : « category_path » et supprime la colonne « category ».

J'ai mon CVS prêt, avec l'indication du fichier de backup.

Import du csv sur /admin/tool/uploadcourse/ en mode créer uniquement les nouveaux cours.

Dans un cours existant :

sudo -u www-data moosh course-restore -e /mnt/course_backup/12.mbz 12

Nouveau cours dans une catégorie :

sudo -u www-data moosh course-restore /mnt/course_backup/12.mbz 27

Mais en fait

L'import des cours avec moosh m'a posé problème : je n'ai pas réussi à importer correctement les cours... (je me souviens plus quel était exactement le problème, c'est un peu vieux, et j'avais commencé la doc, je crois que c'était lié au fait d'avoir une sauvegarde avec les utilisateurs et leur id qui ne correspondaient pas).

Bref, pour fini, j'ai rapattrié les cours un à un à partir des fichiers de sauvegarde, sans les utilisateurs, puis ajouté un enseignant dans chacun.

C'était long... Mais c'est fini !

Nota

Pour que le nouveau serveur encaisse la décompression et l'import des anciens cours, je lui ai donné un peu plus de capacités par le fichier php.in que j'ai ensuit remis tel quel.

sudo nano /etc/php/7.0/apache/php.ini

Config normale :

  • upload_max_filesize 60M
  • post_max_filesize 60M
  • memory_limit 128M
  • max_execution_time 30
  • max_input_time 60

Pour l'upload des gros cours :

  • upload_max_filesize = 2000M
  • post_max_filesize 2000M
  • memory_limit 512M
  • max_execution_time 30
  • max_input_time -1

Date de début du cours

Remise à zéro de la date de début de l'ensemble des cours :

UPDATE mdl_course SET startdate = "1504216800" WHERE id > 1;

Finalisation

Mise en place d'un backup automatique de mon nouveau serveur.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.