Files
dependency-track/docker-compose.yml
2026-03-19 14:18:00 +01:00

63 lines
2.2 KiB
YAML

# Convention de nommage : user-project-branch (ex: syoul-dtrack-main)
# Permet plusieurs instances en parallele (prod/staging) sans collision
name: ${COMPOSE_PROJECT_NAME:-syoul-dtrack-main}
services:
apiserver:
image: dependencytrack/apiserver:4.12
container_name: ${COMPOSE_PROJECT_NAME:-syoul-dtrack-main}-apiserver
restart: always
environment:
# Stockage H2 interne — suffisant pour une team, pas de PostgreSQL requis
ALPINE_DATABASE_MODE: internal
ALPINE_DATA_DIRECTORY: /data
volumes:
- dtrack_data:/data
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:8080/api/version"]
interval: 30s
timeout: 10s
retries: 5
start_period: 120s # ~60-90s au premier démarrage
networks:
- dtrack-net
- sonic
labels:
# Registrator enregistre le service dans Consul via le reseau "sonic"
# Fabio route /api/* vers l'apiserver (prioritaire sur le catch-all frontend)
- SERVICE_8080_NAME=${SERVICE_8080_APISERVER_NAME:-${COMPOSE_PROJECT_NAME}-apiserver-8080}
- SERVICE_8080_TAGS=${SERVICE_8080_APISERVER_TAGS:-urlprefix-${DTRACK_DOMAIN}/api/*}
- SERVICE_8080_CHECK_TCP=true
# sonic-acme-1 emet le cert TLS detecte automatiquement par Fabio via SNI
- LETSENCRYPT_HOST=${DTRACK_DOMAIN}
frontend:
image: dependencytrack/frontend:4.12
container_name: ${COMPOSE_PROJECT_NAME:-syoul-dtrack-main}-frontend
restart: always
environment:
# URL de l'apiserver vue depuis le navigateur (HTTPS public)
API_BASE_URL: https://${DTRACK_DOMAIN}
depends_on:
apiserver:
condition: service_healthy
networks:
- dtrack-net
- sonic
labels:
# Catch-all /* : doit etre enregistre apres /api/* pour que Fabio priorise l'apiserver
- SERVICE_8080_NAME=${SERVICE_8080_FRONTEND_NAME:-${COMPOSE_PROJECT_NAME}-frontend-8080}
- SERVICE_8080_TAGS=${SERVICE_8080_FRONTEND_TAGS:-urlprefix-${DTRACK_DOMAIN}/*}
- SERVICE_8080_CHECK_TCP=true
volumes:
dtrack_data:
networks:
dtrack-net:
# Reseau interne isole apiserver <-> frontend
driver: bridge
sonic:
# Reseau externe partage avec Registrator/Consul/Fabio
external: true