Exploitation et déploiement
Cette page décrit comment exécuter, déployer et exploiter la SIM Database. Toutes les commandes sont encapsulées dans le Makefile pour fonctionner de la même façon sous Windows cmd.exe, Git Bash et les shells POSIX.
Prérequis
Section intitulée « Prérequis »- Docker avec le plugin Compose (
docker compose version) - GNU Make (Git Bash / MSYS2 / Chocolatey sous Windows, Xcode CLT sous macOS,
apt install makesous Debian) - Node + pnpm (uniquement pour le hachage des mots de passe de seed)
Aucune installation locale de Java, PostgreSQL ou Flyway n’est requise.
Mise en place de l’environnement local
Section intitulée « Mise en place de l’environnement local »Au premier clone du dépôt :
cd sim-databasemake setup # copie .env.example vers .env si absentRenseignez les valeurs dans .env :
| Variable | Défaut | Rôle |
|---|---|---|
POSTGRES_DB |
sim_db |
Nom de la base |
POSTGRES_USER |
sim |
Rôle applicatif |
POSTGRES_PASSWORD |
admin |
Mot de passe local (pas pour la production) |
POSTGRES_PORT |
5432 |
Port publié sur 127.0.0.1 |
POSTGRES_HOST |
localhost |
Hôte utilisé par les clients |
Workflow de développement local
Section intitulée « Workflow de développement local »| Étape | Commande | Effet |
|---|---|---|
| Démarrer la base | make up |
Compile/démarre sim-postgres:local, attend pg_isready |
| Arrêter la base | make down |
Arrête le conteneur mais conserve le volume de données |
| Redémarrer | make restart |
Redémarre le conteneur PostgreSQL |
| Voir les logs | make logs |
Suit les logs du conteneur |
| Statut | make status |
Affiche la sortie de docker compose ps |
| Appliquer les migrations | make migrate |
Exécute Flyway sur migrations/ |
| Historique des migrations | make migration-info |
Affiche flyway info |
| Valider les migrations | make validate |
Échoue si un fichier de migration appliqué a changé |
| Charger les seeds de référence | make seed-ref |
Chargement idempotent de seeds/reference/ |
| Charger les seeds dev | make seed-dev |
Charge seeds/dev/ et applique les hachages bcrypt |
| Charger les deux | make seed |
seed-ref puis seed-dev |
| Bootstrap admin | make admin |
Insère l’ADMINISTRATEUR de bootstrap et les hachages |
| Ouvrir psql | make db |
Shell interactif dans le conteneur |
| Lancer les tests | make test |
Migre puis exécute la suite pgTAP dans tests/ |
| Sauvegarde | make backup |
pg_dump -Fc vers backups/sim_<ts>.dump |
| Lister les sauvegardes | make backup-list |
Liste le contenu de backups/ |
| Restaurer | make restore file=sim_<ts>.dump |
pg_restore --clean --if-exists (destructif) |
| Repartir de zéro | make reset |
down -v, up neuf, puis migrate (destructif) |
| Tout nettoyer | make clean |
Arrête et supprime le volume de données (destructif) |
Session locale typique
Section intitulée « Session locale typique »make upmake migratemake seedmake testmake db# ... développement ...make downSauvegarde et reprise
Section intitulée « Sauvegarde et reprise »Les sauvegardes sont des dumps logiques pg_dump -Fc au format custom écrits dans backups/ sur l’hôte. Elles conviennent aux reconstructions complètes, pas à la reprise à un instant T (le PITR n’est pas configuré).
Créer une sauvegarde
Section intitulée « Créer une sauvegarde »make backupRestaurer une sauvegarde
Section intitulée « Restaurer une sauvegarde »make restore file=sim_20250908_120000.dumpLa restauration supprime les objets du dump et les recrée. Les données créées après la sauvegarde sont perdues. Les objets créés après la sauvegarde (par exemple des migrations plus récentes) sont laissés en place, donc make migrate peut être nécessaire ensuite.
Reconstruire depuis migrations et seeds
Section intitulée « Reconstruire depuis migrations et seeds »make cleanmake upmake migratemake seedUtile quand le schéma a dérivé ou que vous voulez un état propre.
Déploiement VPS (Postgres mutualisé)
Section intitulée « Déploiement VPS (Postgres mutualisé) »Le stack VPS utilise une instance PostgreSQL mutualisée déjà présente sur l’hôte. Il est destiné à l’environnement de dev/démo.
- Configuration :
.env.vps(depuis.env.vps.example) - Réseau :
internal - Déclencheur : push sur
mainquandmigrations/**,seeds/**,config/**,scripts/bootstrap-vps.shou.env.vps.examplechangent, ouworkflow_dispatch - Runner :
vps-runner - Workflow :
.github/workflows/deploy.yml
Le workflow :
- Restaure
.env.vpsdepuis le secret GitHubENV_VPS_B64. - Installe Node/pnpm et les dépendances.
- Exécute
scripts/bootstrap-vps.sh:- Provisionne le rôle
simet la basesim_dbde façon idempotente. - Lance
Flyway migrateavecFLYWAY_OUT_OF_ORDER=true. - Charge
seeds/reference,seeds/seed_admin_user.sql,seeds/devetseeds/generated/10_auth_passwords.sql.
- Provisionne le rôle
Comme c’est un environnement de développement, les seeds dev et les mots de passe de démo sont acceptables.
Déploiement production (Postgres dédié)
Section intitulée « Déploiement production (Postgres dédié) »Le stack de production est un conteneur dédié joignable par le backend sur postgres-prod:5432 dans prod-network.
- Configuration :
.env.prod(depuis.env.prod.example) - Déclencheur :
workflow_dispatchuniquement, avec unconfirmsaisi et un reviewer requis sur l’environnementproduction - Runner :
gsg-prod - Workflow :
.github/workflows/deploy-prod.yml
Le workflow :
make prod-up— compile/démarresim-postgres-prod.make prod-migrate— applique les migrations Flyway.make prod-seed— chargeseeds/reference/, l’admin de bootstrap et un hachage bcrypt généré en mémoire depuisADMIN_LOGIN/ADMIN_PASSWORDdans.env.prod.make prod-admin-ui-up— démarre/met à jour pgAdmin derrière Traefik (optionnel).
prod-seed ne charge jamais seeds/dev/. Le mot de passe admin de production est haché par scripts/hash-prod-admin.mjs et pipé vers psql ; il n’est jamais loggé ni commité.
Commandes de production
Section intitulée « Commandes de production »make prod-upmake prod-migratemake prod-seedmake prod-dbmake prod-backupmake prod-admin-ui-uppgAdmin (production)
Section intitulée « pgAdmin (production) »Le profil pgadmin dans docker-compose.prod.yml expose pgAdmin derrière Traefik sur https://${PGADMIN_HOST}. Il n’est pas démarré par prod-up ; démarrez-le explicitement avec :
make prod-admin-ui-upLe serveur pré-enregistré dans docker/pgadmin/servers.json se connecte à postgres-prod:5432 / sim_db.
Pipelines CI/CD
Section intitulée « Pipelines CI/CD »| Workflow | Déclencheur | Runner | Rôle |
|---|---|---|---|
ci.yml |
push: main, pull_request |
ubuntu-latest |
Démarre le stack compose local, migre et exécute make test |
deploy.yml |
push: main sur les chemins DB ou workflow_dispatch |
vps-runner |
Bootstrap/migre/seed le Postgres mutualisé du VPS |
deploy-prod.yml |
workflow_dispatch avec approbation manuelle |
gsg-prod |
Déploie le Postgres de production dédié |
Les deux workflows de déploiement décodent tout le fichier .env depuis un secret base64 et lui appliquent chmod 600. Le workflow de production supprime .env.prod dans une étape always().
Hors périmètre assumé
Section intitulée « Hors périmètre assumé »- Sauvegarde WAL/PITR (seul
wal_level=replicaest préconfiguré) - Stack de monitoring native
- Multi-maître ou réplicas en lecture
Ces points sont laissés au jalon plus large sim-backend/hébergement.
Démonstrations de commandes
Section intitulée « Démonstrations de commandes »Partir de zéro
Section intitulée « Partir de zéro »$ cd sim-database$ make setupCreated .env from .env.example
$ make up[+] Running 2/2 ✔ Container sim-database-postgres-1 Started
$ make migrateFlyway ...Successfully applied 73 migrations.
$ make seed-> reference seeds loaded-> dev seeds loaded-> bcrypt hashes applied
$ make test000_smoke.sql ........................ PASS010_regles_transverses.sql ........... PASS020_regles_residence.sql ............. PASS030_regles_market.sql ................ PASS040_regles_pressing_restaurant_fete.sql PASS050_regles_rh.sql .................... PASS060_regles_dynamiques_residence.sql .. PASS070_regles_dynamiques_market.sql ..... PASS080_regles_dynamiques_finances.sql ... PASS090_regles_dynamiques_rh.sql ......... PASS100_audit.sql ........................ PASS110_auth.sql ......................... PASS120_resident_portal.sql .............. PASSAjouter une nouvelle migration et la tester
Section intitulée « Ajouter une nouvelle migration et la tester »# 1. Créer le nouveau fichier de migration$ touch migrations/residence/074_residence_demande_maintenance.sql
# 2. Écrire le DDL, sauvegarder, puis migrer$ make migrateFlyway ...Current version: 73+---------+ ...| 074 ... | ...+---------+ ...
# 3. Lancer les tests pour vérifier que rien n'est cassé$ make test
# 4. Ouvrir psql pour vérifier$ make dbsim=# \dt residence.*Ce qu’il ne faut pas faire en exploitation
Section intitulée « Ce qu’il ne faut pas faire en exploitation »| Ne pas faire | Pourquoi | À la place |
|---|---|---|
Modifier migrations/common/001_bootstrap_schemas.sql |
Elle a déjà été appliquée | Ajouter une nouvelle migration |
Lancer make seed-dev sur le stack compose de production |
prod-seed est la seule commande de seed sûre en production |
make prod-seed |
Lancer make restore sur une base de production en heures ouvrées |
Elle supprime les objets et restaure le dump ; interruption | Planifier une fenêtre de maintenance |
Commiter .env ou .env.prod |
Des secrets dans Git sont un risque de sécurité | Utiliser les modèles .env.example et les secrets GitHub |
Lancer make clean en espérant garder les données |
Il supprime le volume Docker | Utiliser make down pour arrêter, make backup avant make clean |
