Pour chaque PR, un environnement k8s est créé automatiquement.
Tout d'abord, la base vide et l'user pg correspondant est créé, puis l'application démarre.
L'application est donc responsable de la création de la structure.
Ensuite, le dump des données est chargé à partir du fichier domifa_test.postgres.restore-data-only.sql
.
Il est donc nécessaire de maintenir séparément le script de création de la structure ainsi que le script de chargement des données.
La structure est créé par la migration typeorm 1603812391580-pr-env-create-database.ts
.
Cette migration ne sera plus jamais jouée sur la base de prod ni sur nos environnements locaux (domifa_test
et domifa_dev
) car elle est présente dans la table migrations
.
En revanche, elle est rejouée systématiquement sur l'environnement k8s créé pour chaque PR.
Le plupart du temps, il n'est pas nécessaire de modifier ce script, mais en cas de problème, ou pour faire du ménage dans les migrations, il est possible de le regénérer.
Pour ça, il faut utiliser une base vierge:
drop database domifa_dev;
create database domifa_dev;
Générer alors une migration complète typeorm:
npm run db:dev:generate
# Migration /app/packages/backend/src/_migrations/1634111480754-migration.ts has been generated successfully.
Placer le contenu de la méthode up()
dans la méthode createTables()
du fichier 1603812391580-pr-env-create-database.ts
;
Supprimer les migrations qui ont déjà été jouées en prod (présentes dans la table migrations
du backup de prod).
Si il reste des migrations de structure non-jouées en prod, alors il va falloir adapter manuellement la méthode createTables()
pour y retirer les modifications.
Enfin, supprimer la migration générée précédemment.
Pour tester:
npm start
Entrer dans le container postgres:
docker exec -it domifa-postgres bash
Puis recréer une base de données de tests vierge (il faut être déconnecté de la base):
psql --username ${POSTGRES_USERNAME} --dbname postgres -c "drop database domifa_test;"
# DROP DATABASE
psql --username ${POSTGRES_USERNAME} --dbname postgres -c "create database domifa_test;"
# CREATE DATABASE
Sur le backend, exécuter les migrations pour créer la structure de la bdd:
npm run db:test:migrate-up
# WARN Migration success: 5
Enfin, importer le dump de données:
cat /app/_scripts/db/dumps/domifa_test.postgres.truncate-data.sql /app/_scripts/db/dumps/domifa_test.postgres.restore-data-only.sql | psql --username ${POSTGRES_USERNAME} --dbname domifa_test -1
Dans rancher, se rendre sur la page des secrets: https://rancher.fabrique.social.gouv.fr/p/c-gjtkk:p-gv8gc/secrets
Choisir l'environnement concerné, et cliquer sur le lien azure-pg-user...
puis sur "éditer" pour copier copier/coller les paramètres de connexion.
Ensuite, créer la connexion depuis votre client Postgres, avec les paramètres récupérés:
- host:
*********.postgres.database.azure.com
- db name:
autodevops_toub-fix-hide-sensitive-logs-in-dev-envs-13njf3
- user name:
user_************@******domifadevserver******.postgres.database.azure.com
- SSH: ip de bastion, username et clé
- SSL: utiliser ssl