Deploiement PG Back Web — Ouranos¶
Guide de mise en place de PG Back Web pour la sauvegarde automatique des bases PostgreSQL d'Ouranos vers S3 Leviia.
Presentation¶
PG Back Web est une interface web self-hosted pour planifier et gerer les backups PostgreSQL. Il supporte le stockage S3, la planification cron, le chiffrement PGP et la restauration en un clic.
- Repo : eduardolat/pgbackweb
- Methode : pg_dump (pas WAL archiving)
- Backup : daily a 2h du matin
- Retention : 7 jours
- Destination : S3 Leviia
Bases a sauvegarder¶
| Base | Container source | Stack | Reseau Docker | Usage |
|---|---|---|---|---|
| metabase | metabase-postgres | metabase_postgres | 172.18.0.2 | BDD Metabase (dashboards, configs) |
| prefect | prefect_postgres | csv-importer | 172.19.0.3 | BDD Prefect (flows, runs, deployments) |
Architecture¶
pgbackweb (GUI :8085)
│
├── pgbackweb-db (PostgreSQL 16, config interne)
│
├── → metabase-postgres (reseau metabase_default)
│ pg_dump quotidien → S3 Leviia
│
├── → prefect_postgres (reseau prefect_default)
│ pg_dump quotidien → S3 Leviia
│
└── → S3 Leviia (stockage des backups chiffres)
Deploiement dans Portainer¶
1. Creer la stack¶
Portainer > Stacks > Add stack > Nom : pgbackweb
Docker Compose :
services:
pgbackweb:
image: eduardolat/pgbackweb:latest
restart: unless-stopped
environment:
PBW_ENCRYPTION_KEY: ${PBW_ENCRYPTION_KEY}
PBW_POSTGRES_CONN_STRING: postgresql://pgbackweb:${PBW_POSTGRES_PASSWORD}@pgbackweb-db:5432/pgbackweb?sslmode=disable
TZ: Europe/Paris
depends_on:
pgbackweb-db:
condition: service_healthy
networks:
- default
- interne
- metabase_default
- prefect_default
pgbackweb-db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: pgbackweb
POSTGRES_PASSWORD: ${PBW_POSTGRES_PASSWORD}
POSTGRES_DB: pgbackweb
volumes:
- pgbackweb_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U pgbackweb"]
interval: 5s
timeout: 5s
retries: 5
networks:
interne:
external: true
metabase_default:
external: true
prefect_default:
external: true
volumes:
pgbackweb_data:
2. Variables d'environnement¶
Dans Portainer, section Environment variables :
| Variable | Valeur |
|---|---|
PBW_ENCRYPTION_KEY |
Generer avec openssl rand -hex 32 |
PBW_POSTGRES_PASSWORD |
Generer avec openssl rand -hex 16 |
3. Deployer¶
Cliquer Deploy the stack. Verifier que les 2 conteneurs sont running / healthy.
Configuration dans la GUI¶
Acces a l'interface¶
Configurer le public hostname dans Cloudflare Zero Trust :
| Champ | Valeur |
|---|---|
| Subdomain + domain | Au choix (ex: backup.poleelevage.fr) |
| Service | http://pgbackweb:8085 |
Ajouter la destination S3 Leviia¶
PG Back Web > Destinations > Add :
| Champ | Valeur |
|---|---|
| Name | Leviia S3 |
| Type | S3 |
| Endpoint | Endpoint S3 Leviia (voir console Leviia) |
| Region | Selon Leviia |
| Bucket | Nom du bucket dedie aux backups |
| Access Key | Cle d'acces Leviia |
| Secret Key | Cle secrete Leviia |
Ajouter les bases de donnees¶
PG Back Web > Databases > Add :
Metabase :
| Champ | Valeur |
|---|---|
| Name | Metabase |
| Connection string | postgresql://metabase:<mot_de_passe>@metabase-postgres:5432/metabase?sslmode=disable |
Le mot de passe est celui defini dans la stack
metabase_postgres(variablePOSTGRES_PASSWORD).
Prefect :
| Champ | Valeur |
|---|---|
| Name | Prefect |
| Connection string | postgresql://prefect:<mot_de_passe>@prefect_postgres:5432/prefect?sslmode=disable |
Le mot de passe est celui defini dans la stack
csv-importer(variablePOSTGRES_PASSWORD).
Noms des containers
Les hostnames (metabase-postgres, prefect_postgres) correspondent aux noms des services dans leurs stacks Docker respectives. Verifier dans Portainer > Containers si les noms different.
Planifier les backups¶
PG Back Web > Backups > Create :
Creer un backup pour chaque base :
| Champ | Valeur |
|---|---|
| Database | Metabase (puis Prefect) |
| Destination | Leviia S3 |
| Schedule (cron) | 0 2 * * * (tous les jours a 2h du matin) |
| Retention | 7 |
| Encryption | Activer (PGP) |
Verification¶
Tester un backup manuel¶
PG Back Web > Backups > Selectionner un backup > Run now
Verifier : - Le backup apparait dans la liste avec statut Success - Le fichier est present dans le bucket S3 Leviia
Health checks¶
PG Back Web verifie automatiquement la connexion aux bases et au S3. Les statuts sont visibles dans le dashboard.
Notifications (optionnel)¶
PG Back Web > Webhooks > Configurer une notification en cas d'echec : - Discord webhook - Email - URL personnalisee
Restauration¶
- PG Back Web > Backups > Selectionner le backup concerne
- Choisir le point de restauration (parmi les 7 derniers jours)
- Cliquer Restore (restaure directement dans la base) ou Download (telecharge le dump)
Restauration
La restauration ecrase les donnees actuelles de la base cible. Prevenir les utilisateurs et arreter Metabase/Prefect avant de restaurer.
Reseaux Docker¶
| Reseau | Usage |
|---|---|
| default | Communication pgbackweb <-> pgbackweb-db |
| interne | Exposition via cloudflared |
| metabase_default | Acces au PostgreSQL Metabase |
| prefect_default | Acces au PostgreSQL Prefect |
Voir aussi¶
- Stacks Docker Ouranos — Stacks Docker Ouranos
- Fiche Ouranos — Fiche serveur Ouranos