1. Structure Modulaire par include:
Le docker-compose.yml racine de sever-admin ne définit aucun service. Il fusionne 7 fichiers
via la directive include: de Docker Compose — le tout forme UN SEUL projet Compose :
# sever-admin/docker-compose.yml (contenu réel)
include:
- docker-compose.cache.yml # redis
- docker-compose.broker.yml # broker Kafka + Zookeeper + kafka-ui
- docker-compose.db-admin.yml # adminer
- docker-compose.doc.yml # server_admin_doc (documentation Nginx)
- docker-compose.ansible.yml # semaphore + rundeck
- docker-compose.monitoring.yml # dozzle + beszel-hub + beszel-agent
- docker-compose.observability.yml # loki + promtail + grafana
Conséquences pratiques :
cd /home/admin/app/sever-admin
docker compose up -d # tout le stack infra
docker compose up -d grafana # un seul service (grâce à la fusion include)
docker compose -f docker-compose.observability.yml up -d # un seul groupe
Les chemins bind-mount (./build, ./monitoring) restent relatifs à la racine du repo car les fichiers inclus y sont tous.
2. Le Réseau : proxy_server_network
Réseau Docker externe (créé une fois, hors compose) partagé par tous les stacks (sever-admin, clarajob_sa, marketisia, auth-server, main-server-proxy) :
networks:
proxy_server_network:
external: true
-
Communication inter-stack par nom de container :
marketisia-front-apijoint Kafka viamarketisia-kafka:29092, ClaraJob joint sa DB viaclarajob-ddl:5432 -
Traefik route le trafic HTTPS entrant vers les containers via les labels (
traefik.http.routers.*.rule=Host(…)) -
Création si absent :
docker network create proxy_server_network
3. Détail des Fichiers Compose (services réels)
3.1. docker-compose.cache.yml — Redis partagé
Container |
|
Config |
|
Port |
|
Volume |
|
Limite RAM |
40m (maxmemory 32mb < mem_limit pour laisser la marge AOF et éviter l’OOM-killer) |
Healthcheck |
|
Connexion via RedisInsight : redis://default:${REDIS_PASSWORD}@redis:6379 (user default, DB 0).
3.2. docker-compose.broker.yml — Messaging partagé (source de vérité UNIQUE)
Stack consommée par hostname par les services applicatifs (marketisia-front-api, paiement-service, …) qui ne la redéploient jamais.
| Container | Image | Ports | Notes |
|---|---|---|---|
|
|
|
Listeners : |
|
|
interne (2181) |
Coordination Kafka. mem 128m. |
|
|
|
Registre de schémas Avro/JSON. mem 512m. |
|
|
|
User/pass par défaut |
|
|
|
Monitoring et injection de messages depuis le navigateur. Cluster |
|
Le port hôte de Kafka UI est 8091 (pas 8090) — 8090 est réservé à Beszel Hub.
Depuis un container applicatif, le bootstrap server Kafka est |
3.3. docker-compose.db-admin.yml — Admin DB
| Container | Image | Port | Notes |
|---|---|---|---|
|
|
|
Exposé aussi via Traefik : |
|
|
|
Serveurs pré-provisionnés via |
3.4. docker-compose.doc.yml — Documentation
Container |
|
Port |
|
Volume |
|
3.5. docker-compose.ansible.yml — Pilotage Ansible par UI web
| Container | Image | Port | Notes |
|---|---|---|---|
|
|
|
UI web pour exécuter les playbooks (backup/restore/deploy). Stockage BoltDB local (pas de DB externe). Login par défaut admin/admin. |
|
|
|
Alternative à Semaphore : workflows multi-steps, RBAC, scheduler, audit log. H2 embedded. ⚠️ JVM ~1 Go RAM. Login admin/admin. |
3.6. docker-compose.monitoring.yml — Monitoring
| Container | Image | Port | Notes |
|---|---|---|---|
|
|
|
Logs Docker temps réel dans le navigateur. Lecture seule ( |
|
|
|
Dashboard métriques CPU/RAM/disque/réseau + monitoring containers. Traefik : |
|
|
host network (45876) |
Agent qui collecte les métriques et les pousse au hub (clé |
|
|
|
UI Redis (exploration clés, monitoring). Labels Traefik présents. |
3.7. docker-compose.observability.yml — Logs centralisés
| Container | Image | Port | Notes |
|---|---|---|---|
|
|
interne (3100) |
Stockage/agrégation des logs. Config : |
|
|
interne |
Collecteur : lit |
|
|
|
Dashboards. Datasource Loki provisionnée via |
Chaîne complète : containers → Promtail → Loki → Grafana (pas de Prometheus ni d’ELK dans ce projet).
4. Stacks Applicatifs (repos séparés)
Rappel — ces services ne sont pas dans sever-admin, mais dans les compose de leurs repos :
clarajob_sa/docker-compose.yml :
clarajob-ddl, clarajob-mongo, clarajob-mongoku, clarajob-redis,
minio-service, minio-backup, clarajob-front-api, clarajob-front-gui,
swagger-ui, redoc, rapidoc (+ cible Ansible clarajob-embedding)
marketisia/docker/docker-compose.yml :
marketisia-ddl, marketisia-redis, marketisia-front-api, marketisia-front-gui
auth-server/docker-compose.yml :
auth_server_db, keycloak
documentation/docker-compose.yml :
documentation (nginx:latest servant build/generatedSite — pré-généré et versionné,
router Traefik "documentation" : documentation.clarajob.com
|| documentation.marketisia.com || documentation.pretydate.com)
main-server-proxy/docker-compose.yml :
traefik-service
5. Conventions Observées dans les Compose du Projet
Ces patterns sont appliqués de façon systématique — à respecter pour tout nouveau service :
-
networks: [proxy_server_network](external) sur chaque service -
restart: unless-stopped(oualwayspour adminer/doc) -
mem_limit+memswap_limitsur chaque service (serveur Lightsail à RAM limitée : 40m à 1g selon le service) -
Healthchecks sur les services critiques (redis, kafka, zookeeper, rabbitmq, loki, grafana)
-
Ports paramétrés par variables d’env avec défaut :
"${GRAFANA_PORT:-3000}:3000" -
Secrets via variables d’env (
.envlocal + vault Ansible), jamais en dur -
Labels Traefik pour l’exposition HTTPS publique (
Host(…),entrypoints=websecure) -
loggingjson-file avec rotation quand les logs sont volumineux (ex. dozzle :max-size: 5m, max-file: 2) -
Volumes nommés pour toute donnée persistante (
redis-data,kafka-data,grafana-data, …)
6. Commandes Docker Utiles (sur le serveur)
ssh -i ~/.ssh/serverAdminSSHKeypair.pem admin@18.158.207.98
# État
docker ps # containers actifs
docker ps -a --filter status=exited # containers morts
docker stats --no-stream # CPU/RAM instantané
docker network inspect proxy_server_network # qui est sur le réseau
# Logs
docker logs clarajob-front-api --tail 100
docker logs -f marketisia-kafka
# Stack sever-admin
cd /home/admin/app/sever-admin
docker compose ps
docker compose up -d grafana
docker compose restart adminer
# Stack applicatif
cd /home/admin/app/clarajob_sa
docker compose ps
cd /home/admin/app/marketisia
docker compose -f docker/docker-compose.yml ps
# Volumes
docker volume ls
docker volume inspect clarajob_sa_minio_data
# Nettoyage (prudence)
docker system df # espace utilisé
docker image prune -a # images inutilisées
|
Ne jamais lancer |
7. Prochaines Étapes
-
Monitoring détaillé (Dozzle, Beszel, Grafana/Loki) → Monitoring
-
Ajouter un service à ce stack → Ajouter un Projet
-
Diagnostics → Dépannage