x-db-env: &db-env PGHOST: ${PGHOST:-plane-db} PGDATABASE: ${PGDATABASE:-plane} POSTGRES_USER: ${POSTGRES_USER:-plane} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-plane} POSTGRES_DB: ${POSTGRES_DB:-plane} POSTGRES_PORT: ${POSTGRES_PORT:-5432} PGDATA: ${PGDATA:-/var/lib/postgresql/data} x-redis-env: &redis-env REDIS_HOST: ${REDIS_HOST:-plane-redis} REDIS_PORT: ${REDIS_PORT:-6379} REDIS_URL: ${REDIS_URL:-redis://plane-redis:6379/} x-minio-env: &minio-env MINIO_ROOT_USER: ${AWS_ACCESS_KEY_ID:-access-key} MINIO_ROOT_PASSWORD: ${AWS_SECRET_ACCESS_KEY:-secret-key} x-aws-s3-env: &aws-s3-env AWS_REGION: ${AWS_REGION:-} AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-access-key} AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:-secret-key} AWS_S3_ENDPOINT_URL: ${AWS_S3_ENDPOINT_URL:-http://plane-minio:9000} AWS_S3_BUCKET_NAME: ${AWS_S3_BUCKET_NAME:-uploads} x-proxy-env: &proxy-env SSL: ${SSL:-false} APP_DOMAIN: ${APP_DOMAIN:-localhost} FILE_SIZE_LIMIT: ${FILE_SIZE_LIMIT:-5242880} CERT_EMAIL: ${CERT_EMAIL} CERT_ACME_CA: ${CERT_ACME_CA} CERT_ACME_DNS: ${CERT_ACME_DNS} LISTEN_HTTP_PORT: ${LISTEN_HTTP_PORT:-80} LISTEN_HTTPS_PORT: ${LISTEN_HTTPS_PORT:-443} BUCKET_NAME: ${AWS_S3_BUCKET_NAME:-uploads} SITE_ADDRESS: ${SITE_ADDRESS:-:80} x-mq-env: &mq-env # RabbitMQ Settings RABBITMQ_HOST: ${RABBITMQ_HOST:-plane-mq} RABBITMQ_PORT: ${RABBITMQ_PORT:-5672} RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER:-plane} RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD:-plane} RABBITMQ_DEFAULT_VHOST: ${RABBITMQ_VHOST:-plane} RABBITMQ_VHOST: ${RABBITMQ_VHOST:-plane} x-live-env: &live-env API_BASE_URL: ${API_BASE_URL:-http://api:8000} x-app-env: &app-env WEB_URL: ${WEB_URL:-http://localhost} DEBUG: ${DEBUG:-0} CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS} GUNICORN_WORKERS: 1 USE_MINIO: ${USE_MINIO:-1} DATABASE_URL: ${DATABASE_URL:-postgresql://plane:plane@plane-db/plane} SECRET_KEY: ${SECRET_KEY:-60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5} AMQP_URL: ${AMQP_URL:-amqp://plane:plane@plane-mq:5672/plane} API_KEY_RATE_LIMIT: ${API_KEY_RATE_LIMIT:-60/minute} MINIO_ENDPOINT_SSL: ${MINIO_ENDPOINT_SSL:-0} services: web: image: artifacts.plane.so/makeplane/plane-frontend:${APP_RELEASE:-v0.28.0} restart: unless-stopped depends_on: - api - worker networks: plane-net: ipv4_address: 172.16.16.73 space: image: artifacts.plane.so/makeplane/plane-space:${APP_RELEASE:-v0.28.0} restart: unless-stopped depends_on: - api - worker - web networks: plane-net: ipv4_address: 172.16.16.74 admin: image: artifacts.plane.so/makeplane/plane-admin:${APP_RELEASE:-v0.28.0} restart: unless-stopped depends_on: - api - web networks: plane-net: ipv4_address: 172.16.16.75 live: image: artifacts.plane.so/makeplane/plane-live:${APP_RELEASE:-v0.28.0} environment: <<: [*live-env] restart: unless-stopped depends_on: - api - web networks: plane-net: ipv4_address: 172.16.16.76 api: image: artifacts.plane.so/makeplane/plane-backend:${APP_RELEASE:-v0.28.0} command: ./bin/docker-entrypoint-api.sh restart: unless-stopped volumes: - ./volumes/logs_api:/code/plane/logs environment: <<: [*app-env, *db-env, *redis-env, *minio-env, *aws-s3-env, *proxy-env] depends_on: - plane-db - plane-redis - plane-mq networks: plane-net: ipv4_address: 172.16.16.69 worker: image: artifacts.plane.so/makeplane/plane-backend:${APP_RELEASE:-v0.28.0} command: ./bin/docker-entrypoint-worker.sh restart: unless-stopped volumes: - ./volumes/logs_worker:/code/plane/logs environment: <<: [*app-env, *db-env, *redis-env, *minio-env, *aws-s3-env, *proxy-env] depends_on: - api - plane-db - plane-redis - plane-mq networks: plane-net: ipv4_address: 172.16.16.70 beat-worker: image: artifacts.plane.so/makeplane/plane-backend:${APP_RELEASE:-v0.28.0} command: ./bin/docker-entrypoint-beat.sh restart: unless-stopped volumes: - ./volumes/logs_beat-worker:/code/plane/logs environment: <<: [*app-env, *db-env, *redis-env, *minio-env, *aws-s3-env, *proxy-env] depends_on: - api - plane-db - plane-redis - plane-mq networks: plane-net: ipv4_address: 172.16.16.71 migrator: image: artifacts.plane.so/makeplane/plane-backend:${APP_RELEASE:-v0.28.0} command: ./bin/docker-entrypoint-migrator.sh restart: unless-stopped volumes: - ./volumes/logs_migrator:/code/plane/logs environment: <<: [*app-env, *db-env, *redis-env, *minio-env, *aws-s3-env, *proxy-env] depends_on: - plane-db - plane-redis networks: plane-net: ipv4_address: 172.16.16.72 # Comment this if you already have a database running plane-db: image: postgres:15.7-alpine command: postgres -c 'max_connections=1000' restart: unless-stopped environment: <<: *db-env volumes: - ./volumes/pgdata:/var/lib/postgresql/data networks: plane-net: ipv4_address: 172.16.16.65 plane-redis: image: valkey/valkey:7.2.5-alpine restart: unless-stopped volumes: - ./volumes/redisdata:/data networks: plane-net: ipv4_address: 172.16.16.66 plane-mq: image: rabbitmq:3.13.6-management-alpine restart: unless-stopped environment: <<: *mq-env volumes: - ./volumes/rabbitmq_data:/var/lib/rabbitmq networks: plane-net: ipv4_address: 172.16.16.67 # Comment this if you using any external s3 compatible storage plane-minio: image: minio/minio:latest command: server /export --console-address ":9090" restart: unless-stopped environment: <<: *minio-env volumes: - ./volumes/uploads:/export - ./volumes/minio_data:/data networks: plane-net: ipv4_address: 172.16.16.68 # Comment this if you already have a reverse proxy running proxy: image: artifacts.plane.so/makeplane/plane-proxy:${APP_RELEASE:-v0.28.0} command: [ "caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile", ] restart: unless-stopped environment: <<: *proxy-env # ports: # - target: 80 # published: ${LISTEN_HTTP_PORT:-80} # protocol: tcp # mode: host # - target: 443 # published: ${LISTEN_HTTPS_PORT:-443} # protocol: tcp # mode: host volumes: - ./volumes/proxy_config:/config - ./volumes/proxy_data:/data depends_on: - web - api - space - admin - live networks: plane-net: ipv4_address: 172.16.16.77 networks: plane-net: driver: bridge ipam: config: - subnet: 172.16.16.64/28 gateway: 172.16.16.78