# 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.14.0 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.14.0 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