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_PASSWORDenMONGO_INITDB_ROOT_PASSWORD - ajouter :
MONGO_INITDB_ROOT_USERNAME=root
MONGODB_DATABASE=ram - supprimer les lignes
MONGO_NON_ROOT_USERNAMEetMONGO_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 dockerdb-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_PASSWORDenMONGO_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 apvc-filesavecpvc-01, ajouterpvc-dataavecpvc-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
- dans le deployment server, passer le nb de replica à 1 pour redémarrer le pod server
- tester sur https://resin-maintenance[-dev/rec].apps.grandlyon.com
- si ok, enlever la page de maintenance
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