Files
infra-postgres/doc/deployment.md
tristan 9c74eb9114 feat : initial PostgreSQL infrastructure setup
- 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
2026-03-31 10:51:33 +02:00

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.yml
  • deploy.sh
  • backup.sh
  • init/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.sql n'est execute qu'au premier lancement (quand le dossier data/ est vide). Si tu modifies les mots de passe apres le premier lancement, il faut les changer manuellement via psql.

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) :

  1. Faire un backup : ./backup.sh
  2. Arreter le conteneur : docker compose down
  3. Modifier la version dans docker-compose.yml
  4. Supprimer les donnees : rm -rf data/ (le backup est dans backups/)
  5. Relancer : ./deploy.sh
  6. Restaurer : docker compose exec -T postgres psql -U admin < backups/all-databases-XXXX.sql