Files
infra-postgres/doc/deployment.md
tristan 7728620e90
All checks were successful
Auto Tag / tag (push) Successful in 6s
docs : add password generation command for admin user
2026-03-31 11:12:10 +02:00

153 lines
3.0 KiB
Markdown

# 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`
- `.env.example``.env`
```bash
chmod +x deploy.sh backup.sh
```
### 3. Configurer les mots de passe
Generer un mot de passe et creer le `.env` :
```bash
echo "POSTGRES_USER=admin" > .env
echo "POSTGRES_PASSWORD=$(openssl rand -hex 32)" >> .env
```
### 4. Deployer
```bash
./deploy.sh
```
### 5. Creer les bases de donnees
Se connecter au conteneur :
```bash
docker compose exec -T postgres psql -U admin
```
Creer les bases et users :
```sql
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
```bash
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` :
```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
```bash
docker compose exec -T postgres psql -U admin
```
```sql
CREATE USER nouvelle_app WITH PASSWORD 'motdepasse';
CREATE DATABASE nouvelle_app OWNER nouvelle_app;
\q
```
## 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 18h30
30 18 * * * /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`