- docker-compose with postgres:16-alpine - Init script to create databases (SIRH + Ferme, prod + recette) - Deploy script with readiness check - Backup script with rotation (keeps last 7) - Auto-tag CI workflow - Full deployment documentation
3.2 KiB
Deploiement PostgreSQL — Infrastructure
PostgreSQL centralise pour toutes les applications (SIRH, Ferme, etc.) en prod et recette.
Pre-requis
Docker installe sur la machine (voir la doc SIRH pour l'installation).
Premier deploiement
1. Creer le dossier
sudo mkdir -p /var/www/postgres
sudo chown -R $(whoami):$(whoami) /var/www/postgres
cd /var/www/postgres
2. Creer les fichiers
Copier depuis le repo :
docker-compose.ymldeploy.shbackup.shinit/01-create-databases.sql.env.example→.env
chmod +x deploy.sh backup.sh
3. Configurer les mots de passe
Editer .env :
POSTGRES_USER=admin
POSTGRES_PASSWORD=<generer avec: openssl rand -hex 32>
Editer init/01-create-databases.sql : remplacer tous les change-me par des mots de passe forts pour chaque base.
Important : le script
init/01-create-databases.sqln'est execute qu'au premier lancement (quand le dossierdata/est vide). Si tu modifies les mots de passe apres le premier lancement, il faut les changer manuellement viapsql.
4. Deployer
./deploy.sh
5. Verifier
docker compose exec -T postgres psql -U admin -l
Toutes les bases (sirh_prod, sirh_recette, ferme_prod, ferme_recette) doivent apparaitre.
Connexion depuis les applications
Les applications Docker sur la meme machine se connectent via host.docker.internal :
# SIRH prod
DATABASE_URL="postgresql://sirh_prod:password@host.docker.internal:5432/sirh_prod?serverVersion=16&charset=utf8"
# SIRH recette
DATABASE_URL="postgresql://sirh_recette:password@host.docker.internal:5432/sirh_recette?serverVersion=16&charset=utf8"
Ajouter une nouvelle base
Se connecter au conteneur :
docker compose exec -T postgres psql -U admin
Puis :
CREATE USER nouvelle_app WITH PASSWORD 'motdepasse';
CREATE DATABASE nouvelle_app OWNER nouvelle_app;
\q
Penser a ajouter les lignes dans init/01-create-databases.sql pour documenter (meme si le script ne sera pas re-execute).
Backups
Backup manuel
cd /var/www/postgres
./backup.sh
Les backups sont sauvegardes dans backups/ (les 7 derniers sont conserves).
Backup d'une seule base
docker compose exec -T postgres pg_dump -U admin sirh_prod > backup-sirh-prod.sql
Restaurer un backup
# Toutes les bases
docker compose exec -T postgres psql -U admin < backups/all-databases-2026-03-30_120000.sql
# Une seule base
docker compose exec -T postgres psql -U admin sirh_prod < backup-sirh-prod.sql
Backup automatique (cron)
crontab -e
Ajouter :
# Backup PostgreSQL tous les jours a 2h du matin
0 2 * * * /var/www/postgres/backup.sh >> /var/log/postgres-backup.log 2>&1
Voir les logs
cd /var/www/postgres
docker compose logs -f
docker compose logs -f --tail=100
Mise a jour de PostgreSQL
Pour passer a une nouvelle version (ex: 16 → 17) :
- Faire un backup :
./backup.sh - Arreter le conteneur :
docker compose down - Modifier la version dans
docker-compose.yml - Supprimer les donnees :
rm -rf data/(le backup est dansbackups/) - Relancer :
./deploy.sh - Restaurer :
docker compose exec -T postgres psql -U admin < backups/all-databases-XXXX.sql