# 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 ```bash 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` ```bash chmod +x deploy.sh backup.sh ``` ### 3. Configurer les mots de passe Editer `.env` : ```env POSTGRES_USER=admin POSTGRES_PASSWORD= ``` 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 ```bash ./deploy.sh ``` ### 5. Verifier ```bash 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` : ```env # 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 : ```bash docker compose exec -T postgres psql -U admin ``` Puis : ```sql 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 ```bash cd /var/www/postgres ./backup.sh ``` Les backups sont sauvegardes dans `backups/` (les 7 derniers sont conserves). ### Backup d'une seule base ```bash docker compose exec -T postgres pg_dump -U admin sirh_prod > backup-sirh-prod.sql ``` ### Restaurer un backup ```bash # 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) ```bash 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 ```bash 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`