Dans un contexte de développement logiciel, il est souvent nécessaire de gérer différentes versions de PostgreSQL pour s’adapter aux besoins spécifiques de chaque client. Chez IsiNeva, nous utilisons Docker et Traefik pour orchestrer ces bases de données et offrir un environnement de travail stable et flexible.
Pourquoi utiliser plusieurs versions de PostgreSQL ?
Chaque projet a ses propres contraintes :
- Certains clients utilisent encore PostgreSQL 12 pour assurer la compatibilité avec des applications existantes.
- D’autres préfèrent exploiter les nouvelles fonctionnalités de PostgreSQL 16.
- Les bases de données en développement nécessitent parfois une isolation stricte pour éviter les conflits entre les versions.
Grâce à Docker, nous pouvons exécuter plusieurs versions de PostgreSQL sur un même serveur sans interférences. L’ajout de Traefik facilite l’accès et la gestion des connexions.
Mise en place avec Docker et Traefik
1. Configuration du fichier docker-compose.yml
Nous allons définir deux services PostgreSQL avec leurs propres versions et ports.
services:
postgres12:
image: postgres:12
container_name: postgres12
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: db12
ports:
- "5432:5432"
labels:
- "traefik.enable=true"
- "traefik.tcp.routers.postgres12.rule=HostSNI(`*`)"
- "traefik.tcp.services.postgres12.loadbalancer.server.port=5432"
networks:
- db_network
postgres16:
image: postgres:16
container_name: postgres16
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: db16
ports:
- "5433:5432"
labels:
- "traefik.enable=true"
- "traefik.tcp.routers.postgres16.rule=HostSNI(`*`)"
- "traefik.tcp.services.postgres16.loadbalancer.server.port=5433"
networks:
- db_network
networks:
db_network:
driver: bridge
2. Traefik pour gérer l’accès
Si vous utilisez Traefik pour la gestion des connexions, les labels permettent à celui-ci de router votre connexion vers la bonne version de postgresql
# labels pour accéder au port 5432 (postgres 12)
labels:
- "traefik.enable=true"
- "traefik.tcp.routers.postgres12.rule=HostSNI(`*`)"
- "traefik.tcp.services.postgres12.loadbalancer.server.port=5432"
# labels pour accéder au port 5433 (postgres 16)
labels:
- "traefik.enable=true"
- "traefik.tcp.routers.postgres16.rule=HostSNI(`*`)"
- "traefik.tcp.services.postgres16.loadbalancer.server.port=5433"
Vous pouvez ensuite tester l’accès aux bases via :
psql -h <IP SERVEUR> -p 5432 -U user -d db12
psql -h <IP SERVEUR> -p 5433 -U user -d db16
Conclusion
Grâce à cette configuration, chaque client dispose d’un environnement PostgreSQL adapté sans perturber les autres projets en cours. Cela améliore la flexibilité, la compatibilité et la gestion des bases de données dans un contexte multi-client.
Chez IsiNeva, nous optimisons constamment nos infrastructures pour répondre aux besoins spécifiques des entreprises en matière de développement et de TMA avec les technologies PC Soft.