##################################################### # This Docker Compose file contains two services # Dependency-Track API Server # Dependency-Track FrontEnd ##################################################### services: apiserver: image: dependencytrack/apiserver depends_on: postgres: condition: service_healthy # The Dependency-Track container can be configured using any of the # available configuration properties defined in: # https://docs.dependencytrack.org/getting-started/configuration/ # All properties are upper case with periods replaced by underscores. # # Database Properties # ALPINE_DATABASE_MODE: "external" # ALPINE_DATABASE_URL: "jdbc:postgresql://postgres10:5432/dtrack" # ALPINE_DATABASE_DRIVER: "org.postgresql.Driver" # ALPINE_DATABASE_USERNAME: "dtrack" # ALPINE_DATABASE_PASSWORD: "changeme" # ALPINE_DATABASE_POOL_ENABLED: "true" # ALPINE_DATABASE_POOL_MAX_SIZE: "20" # ALPINE_DATABASE_POOL_MIN_IDLE: "10" # ALPINE_DATABASE_POOL_IDLE_TIMEOUT: "300000" # ALPINE_DATABASE_POOL_MAX_LIFETIME: "600000" # # Optional LDAP Properties # ALPINE_LDAP_ENABLED: "true" # ALPINE_LDAP_SERVER_URL: "ldap://ldap.example.com:389" # ALPINE_LDAP_BASEDN: "dc=example,dc=com" # ALPINE_LDAP_SECURITY_AUTH: "simple" # ALPINE_LDAP_BIND_USERNAME: "" # ALPINE_LDAP_BIND_PASSWORD: "" # ALPINE_LDAP_AUTH_USERNAME_FORMAT: "%s@example.com" # ALPINE_LDAP_ATTRIBUTE_NAME: "userPrincipalName" # ALPINE_LDAP_ATTRIBUTE_MAIL: "mail" # ALPINE_LDAP_GROUPS_FILTER: "(&(objectClass=group)(objectCategory=Group))" # ALPINE_LDAP_USER_GROUPS_FILTER: "(member:1.2.840.113556.1.4.1941:={USER_DN})" # ALPINE_LDAP_GROUPS_SEARCH_FILTER: "(&(objectClass=group)(objectCategory=Group)(cn=*{SEARCH_TERM}*))" # ALPINE_LDAP_USERS_SEARCH_FILTER: "(&(objectClass=user)(objectCategory=Person)(cn=*{SEARCH_TERM}*))" # ALPINE_LDAP_USER_PROVISIONING: "false" # ALPINE_LDAP_TEAM_SYNCHRONIZATION: "false" # # Optional OpenID Connect (OIDC) Properties # ALPINE_OIDC_ENABLED: "true" # ALPINE_OIDC_ISSUER: "https://auth.example.com/auth/realms/example" # ALPINE_OIDC_CLIENT_ID: "" # ALPINE_OIDC_USERNAME_CLAIM: "preferred_username" # ALPINE_OIDC_TEAMS_CLAIM: "groups" # ALPINE_OIDC_USER_PROVISIONING: "true" # ALPINE_OIDC_TEAM_SYNCHRONIZATION: "true" # # Optional HTTP Proxy Settings # ALPINE_HTTP_PROXY_ADDRESS: "proxy.example.com" # ALPINE_HTTP_PROXY_PORT: "8888" # ALPINE_HTTP_PROXY_USERNAME: "" # ALPINE_HTTP_PROXY_PASSWORD: "" # ALPINE_NO_PROXY: "" # # Optional HTTP Outbound Connection Timeout Settings. All values are in seconds. # ALPINE_HTTP_TIMEOUT_CONNECTION: "30" # ALPINE_HTTP_TIMEOUT_SOCKET: "30" # ALPINE_HTTP_TIMEOUT_POOL: "60" # # Optional Cross-Origin Resource Sharing (CORS) Headers # ALPINE_CORS_ENABLED: "true" # ALPINE_CORS_ALLOW_ORIGIN: "*" # ALPINE_CORS_ALLOW_METHODS: "GET, POST, PUT, DELETE, OPTIONS" # ALPINE_CORS_ALLOW_HEADERS: "Origin, Content-Type, Authorization, X-Requested-With, Content-Length, Accept, Origin, X-Api-Key, X-Total-Count, *" # ALPINE_CORS_EXPOSE_HEADERS: "Origin, Content-Type, Authorization, X-Requested-With, Content-Length, Accept, Origin, X-Api-Key, X-Total-Count" # ALPINE_CORS_ALLOW_CREDENTIALS: "true" # ALPINE_CORS_MAX_AGE: "3600" # # Optional logging configuration # LOGGING_LEVEL: "INFO" # LOGGING_CONFIG_PATH: "logback.xml" # # Optional metrics properties # ALPINE_METRICS_ENABLED: "true" # ALPINE_METRICS_AUTH_USERNAME: "" # ALPINE_METRICS_AUTH_PASSWORD: "" # # Optional environmental variables to enable default notification publisher templates override and set the base directory to search for templates # DEFAULT_TEMPLATES_OVERRIDE_ENABLED: "false" # DEFAULT_TEMPLATES_OVERRIDE_BASE_DIRECTORY: "/data" # # Optional configuration for the Snyk analyzer # SNYK_THREAD_BATCH_SIZE: "10" # # Optional environmental variables to provide more JVM arguments to the API Server JVM, i.e. "-XX:ActiveProcessorCount=8" # EXTRA_JAVA_OPTIONS: "" environment: ALPINE_DATABASE_MODE: "external" ALPINE_DATABASE_URL: "jdbc:postgresql://postgres:5432/dtrack" ALPINE_DATABASE_DRIVER: "org.postgresql.Driver" ALPINE_DATABASE_USERNAME: "dtrack" ALPINE_DATABASE_PASSWORD: "dtrack" deploy: resources: limits: memory: 4g restart_policy: condition: on-failure ports: - '8081:8080' volumes: - 'dtrack-data:/data' # Older versions of Podman Compose do not support the HEALTHCHECK directive # that is defined in the image's Dockerfile. If you're using Podman and are # facing healthcheck-related issues, try un-commenting the section below. # # healthcheck: # test: [ "CMD-SHELL", "curl -f -s --max-time 3 --noproxy '*' -o /dev/null http://127.0.0.1:8080$${CONTEXT}health" ] # interval: 30s # start_period: 60s # timeout: 3s restart: unless-stopped frontend: image: dependencytrack/frontend depends_on: apiserver: condition: service_healthy environment: # The base URL of the API server. # NOTE: # * This URL must be reachable by the browsers of your users. # * The frontend container itself does NOT communicate with the API server directly, it just serves static files. # * When deploying to dedicated servers, please use the external IP or domain of the API server. API_BASE_URL: "http://localhost:8081" # OIDC_ISSUER: "" # OIDC_CLIENT_ID: "" # OIDC_SCOPE: "" # OIDC_FLOW: "" # OIDC_LOGIN_BUTTON_TEXT: "" # volumes: # - "/host/path/to/config.json:/app/static/config.json" ports: - "8080:8080" restart: unless-stopped postgres: image: postgres:17-alpine environment: POSTGRES_DB: "dtrack" POSTGRES_USER: "dtrack" POSTGRES_PASSWORD: "dtrack" healthcheck: test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}" ] interval: 5s timeout: 3s retries: 3 volumes: - "postgres-data:/var/lib/postgresql/data" restart: unless-stopped volumes: dtrack-data: {} postgres-data: {}