Files
tvcloud/docker-compose.yaml
2025-12-18 12:51:29 +01:00

155 lines
3.5 KiB
YAML

name: tvcloud
networks:
nextcloud-frontend:
nextcloud-backend:
openproject-frontend:
openproject-backend:
volumes:
nextcloud-db:
nextcloud:
openproject-db:
openproject:
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
ports:
- "80:80"
- "443:443"
volumes:
- nextcloud:/var/www/html:ro
depends_on:
- nextcloud
# NextCloud
nextcloud:
image: nextcloud:31-fpm
environment:
- MYSQL_HOST=nextcloud-db
- MYSQL_PASSWORD=pswd
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
networks:
- nextcloud-frontend
- nextcloud-backend
volumes:
- nextcloud:/var/www/html
depends_on:
- nextcloud-db
nextcloud-db:
image: mariadb:11-ubi
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
environment:
- MARIADB_ROOT_PASSWORD=pswd
- MARIADB_AUTO_UPGRADE=1
- MARIADB_DISABLE_UPGRADE_BACKUP=1
networks:
- nextcloud-backend
volumes:
- nextcloud-db:/var/lib/mysql
# 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