Files
infra-postgres/doc/deployment.md

3.0 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
  • .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>

4. Deployer

./deploy.sh

5. Creer les bases de donnees

Se connecter au conteneur :

docker compose exec -T postgres psql -U admin

Creer les bases et users :

CREATE USER sirh_prod WITH PASSWORD 'motdepasse';
CREATE DATABASE sirh_prod OWNER sirh_prod;

CREATE USER sirh_recette WITH PASSWORD 'motdepasse';
CREATE DATABASE sirh_recette OWNER sirh_recette;
\q

6. Verifier

docker compose exec -T postgres psql -U admin -l

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

docker compose exec -T postgres psql -U admin
CREATE USER nouvelle_app WITH PASSWORD 'motdepasse';
CREATE DATABASE nouvelle_app OWNER nouvelle_app;
\q

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 18h30
30 18 * * * /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