Files
taiga/compose.yml
2026-01-12 14:21:33 -08:00

228 lines
6.9 KiB
YAML

services:
taiga-db:
image: postgres:12.3
secrets:
- postgres_password
environment:
- POSTGRES_DB=taiga
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=/run/secrets/postgres_password
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
interval: 2s
timeout: 15s
retries: 5
start_period: 3s
volumes:
- taiga-db-data:/var/lib/postgresql/data
networks:
- taiga
taiga-back:
image: taigaio/taiga-back:latest
secrets:
- taiga_secret
- postgres_password
- rabbitmq_password
environment:
# These environment variables will be used by taiga-back and taiga-async.
# Database settings
- POSTGRES_DB=taiga
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=/run/secrets/postgres_password
- POSTGRES_HOST=taiga-db
# Taiga settings
- TAIGA_SECRET_KEY=/run/secrets/taiga_secret
- TAIGA_SITES_SCHEME=${TAIGA_SCHEME}
- TAIGA_SITES_DOMAIN=${TAIGA_DOMAIN}
- TAIGA_SUBPATH=${SUBPATH}
# Email settings.
- EMAIL_BACKEND=django.core.mail.backends.${EMAIL_BACKEND}.EmailBackend
- DEFAULT_FROM_EMAIL=${EMAIL_DEFAULT_FROM}
- EMAIL_USE_TLS=${EMAIL_USE_TLS}
- EMAIL_USE_SSL=${EMAIL_USE_SSL}
- EMAIL_HOST=${EMAIL_HOST}
- EMAIL_PORT=${EMAIL_PORT}
- EMAIL_HOST_USER=${EMAIL_HOST_USER}
- EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD}
# Rabbitmq settings
- RABBITMQ_USER=${RABBITMQ_USER}
- RABBITMQ_PASS=/run/secrets/rabbitmq_password
# Telemetry settings
- ENABLE_TELEMETRY=${ENABLE_TELEMETRY}
# ...your customizations go here
configs:
- source: taiga_entrypoint
target: /custom-entrypoint.sh
mode: 0555
entrypoint: /custom-entrypoint.sh
volumes:
- taiga-static-data:/taiga-back/static
- taiga-media-data:/taiga-back/media
networks:
- taiga
taiga-back-async:
image: taigaio/taiga-back:latest
entrypoint: ["/taiga-back/docker/async_entrypoint.sh"]
secrets:
- taiga_secret
- postgres_password
- rabbitmq_password
environment:
# These environment variables will be used by taiga-back and taiga-async.
# Database settings
- POSTGRES_DB=taiga
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=/run/secrets/postgres_password
- POSTGRES_HOST=taiga-db
# Taiga settings
- TAIGA_SECRET_KEY=/run/secrets/taiga_secret
- TAIGA_SITES_SCHEME=${TAIGA_SCHEME}
- TAIGA_SITES_DOMAIN=${TAIGA_DOMAIN}
- TAIGA_SUBPATH=${SUBPATH}
# Email settings.
- EMAIL_BACKEND=django.core.mail.backends.${EMAIL_BACKEND}.EmailBackend
- DEFAULT_FROM_EMAIL=${EMAIL_DEFAULT_FROM}
- EMAIL_USE_TLS=${EMAIL_USE_TLS}
- EMAIL_USE_SSL=${EMAIL_USE_SSL}
- EMAIL_HOST=${EMAIL_HOST}
- EMAIL_PORT=${EMAIL_PORT}
- EMAIL_HOST_USER=${EMAIL_HOST_USER}
- EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD}
# Rabbitmq settings
- RABBITMQ_USER=${RABBITMQ_USER}
- RABBITMQ_PASS=/run/secrets/rabbitmq_password
# Telemetry settings
- ENABLE_TELEMETRY=${ENABLE_TELEMETRY}
# ...your customizations go here
volumes:
- taiga-static-data:/taiga-back/static
- taiga-media-data:/taiga-back/media
networks:
- taiga
taiga-async-rabbitmq:
image: rabbitmq:3.8-management-alpine
secrets:
- rabbitmq_password
environment:
- RABBITMQ_ERLANG_COOKIE=${RABBITMQ_ERLANG_COOKIE}
- RABBITMQ_DEFAULT_USER=${RABBITMQ_USER}
- RABBITMQ_DEFAULT_PASS=/run/secrets/rabbitmq_password
- RABBITMQ_DEFAULT_VHOST=${RABBITMQ_VHOST}
hostname: "taiga-async-rabbitmq"
volumes:
- taiga-async-rabbitmq-data:/var/lib/rabbitmq
networks:
- taiga
taiga-front:
image: taigaio/taiga-front:latest
environment:
- TAIGA_URL=${TAIGA_SCHEME}://${TAIGA_DOMAIN}
- TAIGA_WEBSOCKETS_URL=${WEBSOCKETS_SCHEME}://${TAIGA_DOMAIN}
- TAIGA_SUBPATH=${SUBPATH}
# ...your customizations go here
networks:
- taiga
# volumes:
# - ./conf.json:/usr/share/nginx/html/conf.json
taiga-events:
image: taigaio/taiga-events:latest
secrets:
- taiga_secret
- rabbitmq_password
environment:
- RABBITMQ_USER=${RABBITMQ_USER}
- RABBITMQ_PASS=/run/secrets/rabbitmq_password
- TAIGA_SECRET_KEY=/run/secrets/taiga_secret
networks:
- taiga
taiga-events-rabbitmq:
image: rabbitmq:3.8-management-alpine
secrets:
- rabbitmq_password
environment:
- RABBITMQ_ERLANG_COOKIE=${RABBITMQ_ERLANG_COOKIE}
- RABBITMQ_DEFAULT_USER=${RABBITMQ_USER}
- RABBITMQ_DEFAULT_PASS=/run/secrets/rabbitmq_password
- RABBITMQ_DEFAULT_VHOST=${RABBITMQ_VHOST}
hostname: "taiga-events-rabbitmq"
volumes:
- taiga-events-rabbitmq-data:/var/lib/rabbitmq
networks:
- taiga
taiga-protected:
image: taigaio/taiga-protected:latest
secrets:
- taiga_secret
environment:
- MAX_AGE=${ATTACHMENTS_MAX_AGE}
- SECRET_KEY=/run/secrets/taiga_secret
networks:
- taiga
taiga-gateway:
image: nginx:1.19-alpine
ports:
- "9000:80"
configs:
- source: nginx_conf
target: /etc/nginx/conf.d/default.conf
volumes:
- taiga-static-data:/taiga/static
- taiga-media-data:/taiga/media
networks:
- proxy
- taiga
deploy:
restart_policy:
condition: on-failure
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.services.${STACK_NAME}.loadbalancer.server.port=80"
- "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`${EXTRA_DOMAINS})"
- "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
- "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure"
- "traefik.http.routers.${STACK_NAME}.middlewares=${STACK_NAME}-redirect"
- "traefik.http.middlewares.${STACK_NAME}-redirect.redirectscheme.scheme=https"
- "traefik.http.middlewares.${STACK_NAME}-redirect.redirectscheme.permanent=true"
secrets:
taiga_secret:
external: true
name: ${STACK_NAME}_taiga_secret_${SECRET_TAIGA_SECRET_VERSION}
postgres_password:
external: true
name: ${STACK_NAME}_postgres_password_${SECRET_POSTGRES_PASSWORD_VERSION}
rabbitmq_password:
external: true
name: ${STACK_NAME}_rabbitmq_password_${SECRET_RABBITMQ_PASSWORD_VERSION}
configs:
nginx_conf:
name: ${STACK_NAME}_nginx_${NGINX_CONF_VERSION}
file: ./taiga-gateway/nginx.conf
template_driver: golang
taiga_entrypoint:
name: ${STACK_NAME}_taiga_entrypoint_${TAIGA_ENTRYPOINT_VERSION}
file: entrypoint.sh.tmpl
template_driver: golang
volumes:
taiga-static-data:
taiga-media-data:
taiga-db-data:
taiga-async-rabbitmq-data:
taiga-events-rabbitmq-data:
networks:
taiga:
proxy:
external: true