name: tvcloud networks: nextcloud-frontend: nextcloud-backend: openproject-frontend: openproject-backend: gitea-frontend: gitea-backend: volumes: db: nextcloud: gitea: openproject: openproject-db: x-op-restart-policy: &restart_policy restart: unless-stopped x-op-image: &image image: openproject/openproject:${OPENPROJECT_TAG} x-op-app: &app <<: [*image, *restart_policy] environment: OPENPROJECT_HTTPS: "${OPENPROJECT_HTTPS}" OPENPROJECT_HOST__NAME: "${OPENPROJECT_HOST__NAME}" OPENPROJECT_HSTS: "${OPENPROJECT_HSTS}" RAILS_CACHE_STORE: "${RAILS_CACHE_STORE}" OPENPROJECT_CACHE__MEMCACHE__SERVER: "${OPENPROJECT_CACHE__MEMCACHE__SERVER}" DATABASE_URL: "${DATABASE_URL}" RAILS_MIN_THREADS: 4 RAILS_MAX_THREADS: 16 # set to true to enable the email receiving feature. See ./docker/cron for more options IMAP_ENABLED: "${IMAP_ENABLED}" OPENPROJECT: "${OPENPROJECT}" OPENPROJECT_DB: "${OPENPROJECT_DB}" volumes: - "${OPENPROJECT}:/var/openproject/assets" services: proxy: build: context: ./services/nginx networks: - nextcloud-frontend - openproject-frontend - gitea-frontend ports: - "80:80" - "443:443" volumes: - nextcloud:/var/www/html:ro depends_on: - nextcloud - openproject - gitea db: build: context: ./services/mariadb environment: - MARIADB_ROOT_PASSWORD=password networks: - nextcloud-backend - gitea-backend volumes: - db:/var/lib/mysql nextcloud: image: nextcloud:31-fpm build: context: ./services/nextcloud environment: - MYSQL_HOST=db - MYSQL_PASSWORD=password - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud networks: - nextcloud-frontend - nextcloud-backend volumes: - nextcloud:/var/www/html depends_on: - db gitea: image: docker.gitea.com/gitea:1.25.2 environment: - USER_UID=1000 - USER_GID=1000 - GITEA__database__DB_TYPE=mysql - GITEA__database__HOST=db:3306 - GITEA__database__NAME=gitea - GITEA__database__USER=gitea - GITEA__database__PASSWD=password restart: always networks: - gitea-frontend - gitea-backend volumes: - gitea:/data - /etc/timezone:/etc/timezones:ro - /etc/localtime:/etc/localtime:ro ports: - "222:22" depends_on: - db # OpenProject openproject: <<: *app command: "./docker/prod/web" networks: - openproject-frontend - openproject-backend depends_on: - openproject-db - openproject-cache - openproject-seeder labels: - autoheal=true healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health_checks/default"] interval: 10s timeout: 3s retries: 3 start_period: 30s openproject-db: image: postgres:13 <<: *restart_policy stop_grace_period: "3s" volumes: - "${OPENPROJECT_DB}:/var/lib/postgresql/data" environment: POSTGRES_PASSWORD: pswd POSTGRES_DB: openproject networks: - openproject-backend openproject-cache: image: memcached <<: *restart_policy networks: - openproject-backend openproject-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 openproject-worker: <<: *app command: "./docker/prod/worker" networks: - openproject-backend depends_on: - openproject-db - openproject-cache - openproject-seeder openproject-cron: <<: *app command: "./docker/prod/cron" networks: - openproject-backend depends_on: - openproject-db - openproject-cache - openproject-seeder openproject-seeder: <<: *app command: "./docker/prod/seeder" restart: on-failure networks: - openproject-backend