Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

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

...

  • 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
(ampoule) 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.

right arrow 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
titleServeur principal Pod v3, compte pod
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

right arrow 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
titleBase de données de Pod v2
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 :

  • mariadb.univ.fr : serveur de base de données pour Pod v3
  • userpodv3 : nom de l'utilisateur de la bd, ayant les droits d'écriture
  • XXXX : mot de passe de cet user
  • podv3 : nom de la base de données pour Pod v3
  • podv2.sql : nom du fichier SQL généré précédemment


Bloc de code
titleServeur principal Pod v3, compte pod
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.