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: bridgeJ’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_dbUne 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.sqlPour Listmonk :
docker exec listmonk-container pg_dump -U listmonk -d listmonk > listmonk_backup.sqlImporter 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.sqlJ’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: bridgeImportant : 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: bridgeTests 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_dataAvantages 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.