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

183 lines
4.0 KiB
YAML

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