# 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 # Les deux formes sont supportees selon la version (< 4.12 vs >= 4.12) ALPINE_DATABASE_MODE: internal ALPINE_DATA_DIRECTORY: /data EXTRA_JAVA_OPTIONS: "-Xmx4g" volumes: - dtrack_data:/data healthcheck: test: ["CMD-SHELL", "wget -qO- http://localhost:8080/api/version || curl -sf http://localhost:8080/api/version"] interval: 30s timeout: 10s retries: 10 start_period: 180s # 4.14.0 peut prendre jusqu'a 3 min au premier demarrage 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