Skip to content

chore!: migration to mongo v8

Related to #70

Pour migrer de plusieurs versions majeures, il est préférable de faire un export/import des données.
De plus, on utilise désormais l'image officielle Mongo pour la version 8, et non plus une image Bitnami (qui ne mettra plus à jour ses images), ce qui change les variables d'environnement.

Pour tester/migrer en local :

Dans le fichier .env en local :

  • renommer MONGO_ROOT_PASSWORD en MONGO_INITDB_ROOT_PASSWORD
  • ajouter :
    MONGO_INITDB_ROOT_USERNAME=root
    MONGODB_DATABASE=ram
  • supprimer les lignes MONGO_NON_ROOT_USERNAME et MONGO_NON_ROOT_PASSWORD

Puis :

  • Puller la branche : git pull
  • Lancer le container mongo8 :
    docker compose up -d database-ram
    (il recréé un serveur mongo en version 8 vide et propre, dans le nouveau volume docker db-mongo)
  • Lancer la nouvelle version de mongo-express (compatible avec mongo8) :
    docker compose up -d mongo-express
  • relancer le script de copie de base en local (ou repartir d'une reinit de base ram) (+ reinit index dans http://localhost:4200/admin/technical )
  • (Re)démarrer le back en local :
    npm start
  • si tout est ok, supprimer l'ancien volume docker :
    docker volume rm pamn_server_db-ram

Pour déployer en dev/rec/pro :

  • dans les variables gitlab ci/cd, renommer MONGODB_ROOT_PASSWORD en MONGO_INITDB_ROOT_PASSWORD
  • dans la console openshift, mettre la page de maintenance de l'appli
  • dans pod db, faire un backup de la base : https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_server/-/wikis/bdd-ops#backup-manuel-de-la-base-de-donn%C3%A9e-mongo
  • copier le backup hors du pod :
    oc cp $(oc get pods -l app=res-db -o jsonpath='{.items[0].metadata.name}'):/tmp/dump.tar.gz ./dump.tar.gz
  • dans le deployment db, passer le nb de replica à 0 pour arrêter le pod db
  • dans le deployment server, passer le nb de replica à 0 pour arrêter le pod server
  • dans le deployment maintenance, pour monter le volume /pvc-data : dans le yaml du deployment, comme il y a pvc-files avec pvc-01, ajouter pvc-data avec pvc-02
  • dans le pod maintenance, tout supprimer dans /pvc-data (en le déplacant pour backup) :
    mv /pvc-data/* /pvc-files/pvc-data-backup/
  • dans le yaml du deployment maintenance, enlever le volume /pvc-data
  • dans la forge, déployer la nouvelle version du back (avec le nv deployment db (mongo8), qui va réinitialiser /pvc-data )
  • copier le backup dans le nv pod db (mongo8) :
    oc cp ./dump.tar.gz $(oc get pods -l app=res-db -o jsonpath='{.items[0].metadata.name}'):/tmp/dump.tar.gz
  • importer le backup dans le pod bd (mongo8) :
cd /tmp  
tar -xvf backup.tar.gz  
mongosh --authenticationDatabase admin --username root --password $MONGO_INITDB_ROOT_PASSWORD $MONGODB_DATABASE --eval 'show dbs'  
mongorestore --authenticationDatabase admin --username root --password $MONGO_INITDB_ROOT_PASSWORD -d $MONGODB_DATABASE /tmp/dump/$MONGODB_DATABASE/  
mongosh --authenticationDatabase admin --username root --password $MONGO_INITDB_ROOT_PASSWORD $MONGODB_DATABASE  
show dbs  
db.adminCommand({ getParameter: 1, featureCompatibilityVersion: 1 })  
# (doit renvoyer version "8")  
quit  

Plus tard si ok :

  • dans les variables gitlab ci/cd, voir s'il y en a "A supprimer"
  • nettoyer dans le pod maintenance : rm -rf /pvc-files/data-backup/
Edited by Etienne LOUPIAS

Merge request reports

Loading