Aller au contenu

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 (variable POSTGRES_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 (variable POSTGRES_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

  1. PG Back Web > Backups > Selectionner le backup concerne
  2. Choisir le point de restauration (parmi les 7 derniers jours)
  3. 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