Files
docker-setup/plane/compose.yml
T
Nico Haider 02fe193cb1 add plane
2026-05-21 22:00:05 +02:00

192 lines
5.9 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
version: "3.8"
# ============================================================
# Plane Community Edition board.byhaider.dev
# Traefik + externer PostgreSQL + eigener Redis + MinIO + RabbitMQ
# ============================================================
networks:
traefik-network:
external: true
postgresql:
external: true
plane-internal:
driver: bridge
volumes:
plane-redisdata:
plane-rabbitmq:
plane-minio:
services:
# ----------------------------------------------------------
# Redis
# ----------------------------------------------------------
plane-redis:
image: valkey/valkey:7.2.11-alpine
container_name: plane-redis
restart: unless-stopped
volumes:
- plane-redisdata:/data
networks:
- plane-internal
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
# ----------------------------------------------------------
# RabbitMQ
# ----------------------------------------------------------
plane-mq:
image: rabbitmq:3.13.6-management-alpine
container_name: plane-mq
restart: unless-stopped
environment:
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD}
RABBITMQ_DEFAULT_VHOST: ${RABBITMQ_VHOST}
volumes:
- plane-rabbitmq:/var/lib/rabbitmq
networks:
- plane-internal
healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "ping"]
interval: 15s
timeout: 10s
retries: 5
# ----------------------------------------------------------
# MinIO
# ----------------------------------------------------------
plane-minio:
image: minio/minio
container_name: plane-minio
restart: unless-stopped
command: server /export --console-address ":9090"
environment:
MINIO_ROOT_USER: ${AWS_ACCESS_KEY_ID}
MINIO_ROOT_PASSWORD: ${AWS_SECRET_ACCESS_KEY}
volumes:
- plane-minio:/export
networks:
- plane-internal
- traefik-network
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik-network"
- "traefik.http.routers.plane-minio.rule=Host(`board.byhaider.dev`) && PathPrefix(`/uploads`)"
- "traefik.http.routers.plane-minio.entrypoints=websecure"
- "traefik.http.routers.plane-minio.tls=true"
- "traefik.http.routers.plane-minio.tls.certresolver=cloudflare"
- "traefik.http.routers.plane-minio.priority=25"
- "traefik.http.services.plane-minio.loadbalancer.server.port=9000"
# ----------------------------------------------------------
# DB Migrator (einmalig beim Start)
# ----------------------------------------------------------
plane-migrator:
image: makeplane/plane-backend:stable
container_name: plane-migrator
restart: "no"
command: ./bin/docker-entrypoint-migrator.sh
env_file: .env
depends_on:
plane-redis:
condition: service_healthy
plane-mq:
condition: service_healthy
networks:
- plane-internal
- postgresql
# ----------------------------------------------------------
# API Backend
# ----------------------------------------------------------
plane-api:
image: makeplane/plane-backend:stable
container_name: plane-api
restart: unless-stopped
command: ./bin/docker-entrypoint-api.sh
env_file: .env
environment:
GUNICORN_WORKERS: "2"
depends_on:
plane-redis:
condition: service_healthy
plane-mq:
condition: service_healthy
plane-migrator:
condition: service_completed_successfully
networks:
- plane-internal
- postgresql
- traefik-network
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik-network"
- "traefik.http.routers.plane-api.rule=Host(`board.byhaider.dev`) && (PathPrefix(`/api`) || PathPrefix(`/auth`) || PathPrefix(`/static`))"
- "traefik.http.routers.plane-api.entrypoints=websecure"
- "traefik.http.routers.plane-api.tls=true"
- "traefik.http.routers.plane-api.tls.certresolver=cloudflare"
- "traefik.http.routers.plane-api.priority=20"
- "traefik.http.services.plane-api.loadbalancer.server.port=8000"
# ----------------------------------------------------------
# Background Worker
# ----------------------------------------------------------
plane-worker:
image: makeplane/plane-backend:stable
container_name: plane-worker
restart: unless-stopped
command: ./bin/docker-entrypoint-worker.sh
env_file: .env
depends_on:
- plane-api
networks:
- plane-internal
- postgresql
extra_hosts:
- "mail.byhaider.dev:212.132.119.248"
# ----------------------------------------------------------
# Beat Scheduler
# ----------------------------------------------------------
plane-beat:
image: makeplane/plane-backend:stable
container_name: plane-beat
restart: unless-stopped
command: ./bin/docker-entrypoint-beat.sh
env_file: .env
depends_on:
- plane-api
networks:
- plane-internal
- postgresql
extra_hosts:
- "mail.byhaider.dev:212.132.119.248"
# ----------------------------------------------------------
# Frontend → Traefik
# ----------------------------------------------------------
plane-web:
image: makeplane/plane-frontend:stable
container_name: plane-web
restart: unless-stopped
env_file: .env
depends_on:
- plane-api
networks:
- plane-internal
- traefik-network
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik-network"
- "traefik.http.routers.plane-web.rule=Host(`board.byhaider.dev`)"
- "traefik.http.routers.plane-web.entrypoints=websecure"
- "traefik.http.routers.plane-web.tls=true"
- "traefik.http.routers.plane-web.tls.certresolver=cloudflare"
- "traefik.http.routers.plane-web.priority=10"
- "traefik.http.services.plane-web.loadbalancer.server.port=3000"