Aller au contenu

Migrer Grafana et Listmonk vers PostgreSQL centralisé dans Docker

Rogelio Guerra Riverón
Auteur
Rogelio Guerra Riverón
Construction de ma propre infrastructure web depuis zéro. Je documente chaque étape : serveurs, réseaux, conteneurs et tout ce qui se présente.

Le problème initial
#

J’avais Grafana et Listmonk s’exécutant dans des conteneurs Docker, chacun avec sa propre instance PostgreSQL embarquée. Cela fonctionnait, mais c’était inefficace : deux moteurs de BD consommant des ressources et sans moyen centralisé de faire des sauvegardes. J’ai décidé de tout consolider dans une seule instance PostgreSQL partagée.

Préparation : démarrer PostgreSQL central
#

La première chose a été de créer le serveur PostgreSQL qui serait le point central. Je l’ai fait avec un docker-compose dédié :

version: '3.8'
services:
  postgres:
    image: postgres:15-alpine
    container_name: postgres-central
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: tu_contraseña_segura
      POSTGRES_DB: default_db
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - central-net

volumes:
  postgres_data:

networks:
  central-net:
    driver: bridge

J’ai exécuté docker-compose up -d et vérifié que cela fonctionne avec docker exec postgres-central psql -U admin -d default_db -c "\l".

Créer des bases de données pour chaque service
#

J’ai accédé au conteneur PostgreSQL et créé les BD dont j’aurais besoin :

docker exec -it postgres-central psql -U admin -d default_db

Une fois à l’intérieur :

CREATE DATABASE grafana;
CREATE DATABASE listmonk;
CREATE USER grafana_user WITH PASSWORD 'grafana_pass';
CREATE USER listmonk_user WITH PASSWORD 'listmonk_pass';
GRANT ALL PRIVILEGES ON DATABASE grafana TO grafana_user;
GRANT ALL PRIVILEGES ON DATABASE listmonk TO listmonk_user;

Exporter les données des anciennes BD
#

Avant de déplacer quoi que ce soit, j’ai fait un dump des BD existantes. Pour Grafana :

docker exec grafana-container pg_dump -U grafana -d grafana > grafana_backup.sql

Pour Listmonk :

docker exec listmonk-container pg_dump -U listmonk -d listmonk > listmonk_backup.sql

Importer les données dans PostgreSQL central
#

J’ai importé les sauvegardes dans les nouvelles BD :

docker exec -i postgres-central psql -U grafana_user -d grafana < grafana_backup.sql
docker exec -i postgres-central psql -U listmonk_user -d listmonk < listmonk_backup.sql

J’ai vérifié que les tables étaient présentes avec \dt dans chaque BD.

Mettre à jour Grafana
#

J’ai modifié le docker-compose de Grafana pour qu’il pointe vers PostgreSQL central :

services:
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    environment:
      GF_DATABASE_TYPE: postgres
      GF_DATABASE_HOST: postgres-central:5432
      GF_DATABASE_NAME: grafana
      GF_DATABASE_USER: grafana_user
      GF_DATABASE_PASSWORD: grafana_pass
    networks:
      - central-net
      - grafana-net

networks:
  central-net:
    external: true
  grafana-net:
    driver: bridge

Important : le réseau central-net doit être external: true car il existe déjà dans le docker-compose de PostgreSQL.

Mettre à jour Listmonk
#

La même chose pour Listmonk. Sa configuration dans docker-compose :

services:
  listmonk:
    image: listmonk/listmonk:latest
    container_name: listmonk
    environment:
      LISTMONK_db__host: postgres-central
      LISTMONK_db__port: "5432"
      LISTMONK_db__user: listmonk_user
      LISTMONK_db__password: listmonk_pass
      LISTMONK_db__database: listmonk
    networks:
      - central-net
      - listmonk-net

networks:
  central-net:
    external: true
  listmonk-net:
    driver: bridge

Tests et nettoyage
#

J’ai démarré les deux conteneurs : docker-compose up -d. J’ai vérifié que Grafana et Listmonk démarrent correctement et que leurs données sont intactes.

Une fois que tout a été confirmé comme fonctionnel, j’ai supprimé les volumes des anciennes BD :

docker volume rm grafana_postgres_data listmonk_postgres_data

Avantages réels
#

J’ai maintenant un seul point de sauvegarde, une consommation de RAM réduite, et je peux évoluer plus facilement. Un problème : assurez-vous que PostgreSQL central est sur le bon réseau ou que les services peuvent communiquer par hôte externe.

La migration m’a pris une heure. Sans stress.

Équipement recommandé
#

  • SSD NVMe 1TB — Améliore les performances du serveur avec base de données
  • Mini PC Intel N100 — Serveur domestique silencieux et efficace pour exécuter Docker et PostgreSQL 24/7
  • SAI/UPS 600VA — Protège le serveur et la base de données contre les coupures de courant

Liens d’affiliation. Aucun frais supplémentaire pour toi.