153 lines
3.0 KiB
Markdown
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
|
|
|
|
Editer `.env` :
|
|
|
|
```env
|
|
POSTGRES_USER=admin
|
|
POSTGRES_PASSWORD=<generer avec: openssl rand -hex 32>
|
|
```
|
|
|
|
### 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`
|