Files
tvcloud/docker-compose.yaml
2025-12-18 12:52:04 +01:00

199 lines
4.4 KiB
YAML

name: tvcloud
networks:
nextcloud-frontend:
nextcloud-backend:
openproject-frontend:
openproject-backend:
gitea-frontend:
gitea-backend:
volumes:
nextcloud-db:
nextcloud:
openproject-db:
openproject:
gitea-db:
gitea:
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
# 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
# Gitea
gitea:
image: docker.gitea.com/gitea:1.25.2
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=gitea-db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
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:
- gitea-db
gitea-db:
image: docker.io/library/postgres:14
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=gitea
- POSTGRES_DB=gitea
networks:
- gitea-backend
volumes:
- gitea-db:/var/lib/postgresql/data
# 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