services: jira-db: image: postgres:15-alpine environment: POSTGRES_DB: jira POSTGRES_USER: jira POSTGRES_PASSWORD: ${JIRA_DB_PASSWORD} POSTGRES_INITDB_ARGS: "--lc-collate=C --lc-ctype=C" volumes: - jira-db-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U jira"] interval: 10s timeout: 5s retries: 5 confluence-db: image: postgres:15-alpine environment: POSTGRES_DB: confluence POSTGRES_USER: confluence POSTGRES_PASSWORD: ${CONFLUENCE_DB_PASSWORD} volumes: - confluence-db-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U confluence"] interval: 10s timeout: 5s retries: 5 jira: image: atlassian/jira-software:${JIRA_VERSION} ports: - "8080:8080" environment: ATL_JDBC_URL: jdbc:postgresql://jira-db:5432/jira ATL_JDBC_USER: jira ATL_JDBC_PASSWORD: ${JIRA_DB_PASSWORD} ATL_DB_DRIVER: org.postgresql.Driver ATL_DB_TYPE: postgres72 JVM_MINIMUM_MEMORY: 1024m JVM_MAXIMUM_MEMORY: 2048m CLUSTERED: "false" volumes: - jira-data:/var/atlassian/application-data/jira depends_on: jira-db: condition: service_healthy healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:8080/status || exit 1"] interval: 30s timeout: 10s retries: 20 start_period: 120s confluence: image: atlassian/confluence:${CONFLUENCE_VERSION} ports: - "8090:8090" environment: ATL_JDBC_URL: jdbc:postgresql://confluence-db:5432/confluence ATL_JDBC_USER: confluence ATL_JDBC_PASSWORD: ${CONFLUENCE_DB_PASSWORD} ATL_DB_DRIVER: org.postgresql.Driver ATL_DB_TYPE: postgresql # Confluence 7.9+ reads the license from ATL_LICENSE_KEY at first-time setup, # skipping the wizard's license step. Written to confluence.cfg.xml on FIRST # start only — NOT re-read on restart (ATL_FORCE_CFG_UPDATE defaults false), so a # restart does not reset the 3h timebomb. Empty -> wizard prompts for a key. # Docs: https://atlassian.github.io/data-center-helm-charts/containers/CONFLUENCE/ # (Verified 2026-06-18 on confluence:9.2.21: a fresh blank-DB start with this set # skips the wizard license step. The no-restart-refresh detail above is per those docs.) ATL_LICENSE_KEY: ${CONFLUENCE_LICENSE_KEY:-} # After the 3h timebomb expires, re-apply the key by regenerating confluence.cfg.xml: # ATL_FORCE_CFG_UPDATE=true docker compose up -d confluence ATL_FORCE_CFG_UPDATE: ${ATL_FORCE_CFG_UPDATE:-false} JVM_MINIMUM_MEMORY: 1024m JVM_MAXIMUM_MEMORY: 2048m CLUSTERED: "false" volumes: - confluence-data:/var/atlassian/application-data/confluence depends_on: confluence-db: condition: service_healthy healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:8090/status || exit 1"] interval: 30s timeout: 10s retries: 20 start_period: 120s volumes: jira-db-data: confluence-db-data: jira-data: confluence-data: