Sommaire |
---|
La migration d'un Pod v2 vers un Pod v3 a été réalisée de façon différente selon les établissements. Voici 2 procédures différentes qui peuvent vous être utiles selon le contexte et votre environnement.
Avertissement |
---|
Ces 2 procédures ont été réalisées dans des environnements spécifiques aux établissements concernés et ne peuvent être reprises telles quelles; elles doivent être adaptées à vos spécificités et votre environnement. |
1ère possibilité : procédure initiale, réalisée par Joshua
Installation sur un nouveau serveur
...
Bloc de code | ||
---|---|---|
| ||
# Si vous êtes dans un environnement contenairisé et qu'il y a des fichiers customs dans le répertoire static python3 manage.py collectstatic # Si vous pouvez vous permettre de tout effacer dans static ( python3 manage.py collectstatic --clear ) make statics |
...
Redis :
Dans cette version l'installation d'un serveur Redis pour la gestion du cache est obligatoire.
Voir la partie Installation de Redis de Installation de Pod V3 ou la doc officielle https://redis.io/docs/getting-started/
...
- video_encodingvideo => video_encode_transcript_encodingvideo
- video_encodingaudio => video_encode_transcript_encodingaudio
- video_encodingstep => video_encode_transcript_encodingstep
- video_playlistvideo => video_encode_transcript_playlistvideo
- video_videorendition => video_encode_transcript_videorendition ( attention, cette table a un nouveau field threshold qu'il faut mettre à 0 par défaut)
That's all folks !
2ième possibilité : réalisée par Loïc pour l'université de Montpellier
Contexte
Ayant eu des problèmes avec la 1ère procédure lors de la migration de la version 2 vers la version 3 d'Esup-Pod en février 2023, j'ai fais différemment.
A cette époque, l'architecture a totalement été modifiée avec l'installation de nouveaux serveurs sous Debian 11.x, une rationalisation du nombre de serveurs et l'arrêt de l'architecture de Pod v2.
Astuce |
---|
L'idée de cette procédure est d'installer Pod v3.0.5 sur les différents serveurs, from scratch, sans s'occuper de l'historique puis, une fois que ce Pod v3 vierge est fonctionnel, réaliser les manipulations nécessaires pour récupérer la base de données du Pod v2. |
Voici alors les étapes réalisées pour réaliser une migration d'un Pod v2.9.1 vers un Pod v3.0.5.
Info |
---|
La base de données ayant été grandement modifiée entre Pod v2 et v3, le mieux est de réaliser une migration initiale de votre Pod v2.X vers un Pod v3.0.X dans un premier temps. Une fois cette migration réussie, il suffira de réaliser des montées de versions "habituelles" de Pod v3. Je déconseille fortement de passer d'une version 2.9 à une version 3.8 (par exemple) de Pod; le gap étant trop conséquent. |
Étapes de la migration
1. Installation des nouveaux serveurs pour l'architecture Pod v3
Typiquement, dans mon cas, l'architecture repose sur des VMs sous Debian 11.X.
2. Installation d'Esup-pod v3 sur les différents serveurs
En suivant la documentation du projet, j'ai installé Pod 3.0.5 sur les différents serveurs de mon infrastructure.
3. Migration de la base de données
Info |
---|
Migration réalisée sur des bases MariaDB avec l'aide de PHPMyAdmin. |
Avertissement |
---|
Ne pas oublier que la migration de la base de données ne doit se faire que sur un seul serveur, qui plus est, le même ! Il faut bien comprendre que les fichiers de migration générés doivent être en adéquation avec l'état de la base, et en particulier des données de la table django_migrations. |
Base Pod v3 vierge
Si vous avez réalisé les étapes précédentes, vous devriez avoir une bd de Pod v3 initialisée avec les données de base.
Info |
---|
Si besoin, réaliser une sauvegarde de la base de données, même si elle ne contient rien d'importants à ce moment là (excepté la table django_migrations qui est importante). |
Supprimer alors les données de toutes les tables SAUF django_migrations.
A ce moment là, nous avons une base de données de Pod v3 vierge.
...
EN CAS DE PROBLÈME SEULEMENT - POSSIBILITÉ DE REFAIRE CETTE MANIPULATION PLUSIEURS FOIS
Si cela ne marche pas du 1° coup, il est possible de recommencer en repartant de 0 en réalisant les commandes suivantes sur une base totalement vide.
Bloc de code | ||
---|---|---|
| ||
cd /usr/local/django_projects/podv3
workon django_pod3
# Suppression des fichiers de migrations
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete
# Penser également aux flatpages dont les fichiers de migration se trouvent dans le virtualenv
# Dans mon cas, cela revient à supprimer les fichiers de migrations (mais pas __init__.py) dans /home/pod/.virtualenvs/django_pod3/lib/python3.9/site-packages/django/contrib/flatpages/migrations/
make updatedb
make migrate
# Puis vider les données de toutes les tables SAUF django_migrations
|
A ce moment là, nous avons une base de données de Pod v3 vierge.
...
Récupération des données de la base Pod v2
J'ai alors récupéré les données de Pod v2 via la procédure suivante, réalisée via PHPMyAdmin sur une base MariaDB :
Bloc de code | ||
---|---|---|
| ||
Récupérer les données de podv2 en exportant les tables de la base de données,
SAUF django_migrations
SAUF live_broadcaster
Avec les options suivantes :
- sans notion de clés étrangères (Désactiver la vérification des clés étrangères),
- table IF NOT EXISTS,
- Tronquer la table avant d'insérer,
- Instructions INSERT IGNORE
- Modifier USE `nomdelabase`; dans le fichier généré si nécessaire |
Appeler le fichier généré podv2.sql.
Ce fichier podv2.sql est à copier sur le serveur principal de Pod v3 dans le répertoire /usr/local/django_projects.
Intégration des données dans Pod v3
Enfin, sur le serveur principal Pod v3, réaliser l'intégration totale :
Info |
---|
Penser à modifier les commandes ci-dessous selon votre configuration :
|
Bloc de code | ||
---|---|---|
| ||
cd /usr/local/django_projects/
mysql -h mariadb.univ.fr -u userpodv3 -pXXXX podv3 < podv2.sql
=> cela peut provoquer des erreurs lors de la création des clés étrangères (qui existent déjà) si l'option n'a pas été décochée
# BD : Update Django_site
Modifier la table django_sites
# BD : Update de champs pour lesquels le site est par défaut à 0
update video_channel set site_id=1 where site_id=0;
update video_discipline set site_id=1 where site_id=0;
### Ajout des contenus pour Pod v3 ###
# Vérifier ce qu'il en est côté :
# - pages statiques (table django_flatpage)
# - diffuseurs (table live_broadcaster, penser que maintenant que l'accès est aussi au niveau des évènements)
# - évènements en direct (tables live_event et live_event_additional_owners)
# Si besoin, ajouter manuellement les informations manquantes via l'administration de Pod |
Étapes suivantes
Ne pas oublier de redémarrer l'ensemble des services (uwsgi-pod, celeryd, rabbitmq-server, redis) sur les différents serveurs et penser à réindexer les vidéos pour Elasticsearch.
Info |
---|
Cette documentation correspond à mes notes réalisées lors de notre migration de Pod v2 vers Pod v3 en février 2023; n'hésiter pas à ajouter/modifier selon vos retours. |