version: "3.7" x-op-app: &app restart: {{docker_restart_policy}} image: openproject/community:${TAG:-13} environment: OPENPROJECT_HTTPS: "${OPENPROJECT_HTTPS}" OPENPROJECT_HOST__NAME: "${OPENPROJECT_HOST__NAME}" OPENPROJECT_HSTS: "${OPENPROJECT_HSTS:-true}" RAILS_CACHE_STORE: "memcache" OPENPROJECT_CACHE__MEMCACHE__SERVER: "cache:11211" OPENPROJECT_RAILS__RELATIVE__URL__ROOT: "${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}" DATABASE_URL: "${DATABASE_URL}" RAILS_MIN_THREADS: ${RAILS_MIN_THREADS:-4} RAILS_MAX_THREADS: ${RAILS_MAX_THREADS:-16} # set to true to enable the email receiving feature. See ./docker/cron for more options IMAP_ENABLED: "${IMAP_ENABLED:-false}" volumes: - "data:/var/openproject/assets" - "{{dummy_volume}}:/var/openproject/pgdata" # This mount is unnecessary and just done to prevent anonymous volumes services: {% include 'templates/docker-service-' + database_type + '.yml.j2' %} cache: image: memcached restart: {{docker_restart_policy}} {% include 'templates/docker-container-networks.yml.j2' %} proxy: restart: {{docker_restart_policy}} image: openproject/community:${TAG:-13} command: "./docker/prod/proxy" ports: - "${PORT}:80" environment: APP_HOST: web OPENPROJECT_RAILS__RELATIVE__URL__ROOT: "${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}" depends_on: - web {% include 'templates/docker-container-networks.yml.j2' %} volumes: - "data:/var/openproject/assets" - "{{dummy_volume}}:/var/openproject/pgdata" # This mount is unnecessary and just done to prevent anonymous volumes web: <<: *app command: "./docker/prod/web" {% include 'templates/docker-container-networks.yml.j2' %} {% include 'templates/docker-container-depends-on-also-database.yml.j2' %} cache: condition: service_started seeder: condition: service_started labels: - autoheal=true healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}/health_checks/default"] interval: 10s timeout: 3s retries: 3 start_period: 30s autoheal: image: willfarrell/autoheal:1.2.0 volumes: - "/var/run/docker.sock:/var/run/docker.sock" environment: AUTOHEAL_CONTAINER_LABEL: autoheal AUTOHEAL_START_PERIOD: 600 AUTOHEAL_INTERVAL: 30 worker: <<: *app command: "./docker/prod/worker" {% include 'templates/docker-container-networks.yml.j2' %} {% include 'templates/docker-container-depends-on-also-database.yml.j2' %} cache: condition: service_started seeder: condition: service_started cron: <<: *app command: "./docker/prod/cron" {% include 'templates/docker-container-networks.yml.j2' %} {% include 'templates/docker-container-depends-on-also-database.yml.j2' %} cache: condition: service_started seeder: condition: service_started seeder: <<: *app command: "./docker/prod/seeder" restart: on-failure {% include 'templates/docker-container-networks.yml.j2' %} {% include 'templates/docker-compose-networks.yml.j2' %} {% include 'templates/docker-compose-volumes.yml.j2' %} data: