[variables] app_release = "v1.3.1" main_domain = "${domain}" postgres_password = "${password:32}" minio_password = "${password:32}" rabbitmq_password = "${password:32}" secret_key = "${base64:48}" live_secret_key = "${base64:48}" [config] env = [ "# ===== Application =====", "# Plane image tag deployed for every service.", "APP_RELEASE=${app_release}", "# Public domain Plane is served on.", "APP_DOMAIN=${main_domain}", "# Full external URL of the instance (used to build links).", "WEB_URL=https://${main_domain}", "# Browser origins allowed to call the API (CORS).", "CORS_ALLOWED_ORIGINS=https://${main_domain}", "# Internal URL other services use to reach the API.", "API_BASE_URL=http://plane-api:8000", "# Django secret key: signs sessions and tokens. Keep it secret.", "SECRET_KEY=${secret_key}", "# Shared secret between the API and the realtime (live) server.", "LIVE_SERVER_SECRET_KEY=${live_secret_key}", "", "# ===== PostgreSQL =====", "# Database user.", "POSTGRES_USER=plane", "# Database password.", "POSTGRES_PASSWORD=${postgres_password}", "# Database name.", "POSTGRES_DB=plane", "# Port PostgreSQL listens on.", "POSTGRES_PORT=5432", "# Host the app and libpq tools connect to.", "PGHOST=plane-db", "# Default database for libpq tools.", "PGDATABASE=plane", "# On-disk location of the database files.", "PGDATA=/var/lib/postgresql/data", "# Full connection string (composed from the values above).", "DATABASE_URL=postgresql://plane:${postgres_password}@plane-db:5432/plane", "", "# ===== Redis / Valkey (cache) =====", "# Redis host.", "REDIS_HOST=plane-redis", "# Redis port.", "REDIS_PORT=6379", "# Full Redis connection URL.", "REDIS_URL=redis://plane-redis:6379/", "", "# ===== RabbitMQ (task queue) =====", "# Broker host.", "RABBITMQ_HOST=plane-mq", "# Broker port.", "RABBITMQ_PORT=5672", "# Broker user.", "RABBITMQ_USER=plane", "# Broker password.", "RABBITMQ_PASSWORD=${rabbitmq_password}", "# Broker virtual host.", "RABBITMQ_VHOST=plane", "# Full AMQP connection string (composed from the values above).", "AMQP_URL=amqp://plane:${rabbitmq_password}@plane-mq:5672/plane", "", "# ===== Object storage (MinIO / S3) =====", "# Use the bundled MinIO (1) instead of an external S3 provider (0).", "USE_MINIO=1", "# AWS region; leave empty when using MinIO.", "AWS_REGION=", "# S3 / MinIO access key.", "AWS_ACCESS_KEY_ID=access-key", "# S3 / MinIO secret key.", "AWS_SECRET_ACCESS_KEY=${minio_password}", "# S3 / MinIO endpoint URL.", "AWS_S3_ENDPOINT_URL=http://plane-minio:9000", "# Bucket used to store uploads.", "AWS_S3_BUCKET_NAME=uploads", "# Max upload size in bytes (default 5 MiB).", "FILE_SIZE_LIMIT=5242880", "# Set to 1 if the S3 / MinIO endpoint is served over HTTPS.", "MINIO_ENDPOINT_SSL=0", "", "# ===== Caddy proxy =====", "# Address the in-container Caddy listens on. Required: the proxy", "# Caddyfile has no default and an empty value crashes it on boot.", "SITE_ADDRESS=:80", "# Peers allowed to set X-Forwarded-For / X-Real-IP. 'private_ranges'", "# trusts only Dokploy's private upstream (Traefik) and blocks public", "# IP spoofing. Use a narrower CIDR if exposing the proxy directly.", "TRUSTED_PROXIES=private_ranges", "", "# ===== App runtime =====", "# Django debug mode; keep 0 in production.", "DEBUG=0", "# Number of Gunicorn workers for the API.", "GUNICORN_WORKERS=1", "# Rate limit applied to API-key requests.", "API_KEY_RATE_LIMIT=60/minute", "# Comma-separated IPs allowed as webhook targets; empty allows all.", "WEBHOOK_ALLOWED_IPS=", "# Comma-separated hosts allowed as webhook targets; empty allows all.", "WEBHOOK_ALLOWED_HOSTS=", ] mounts = [] [[config.domains]] serviceName = "proxy" port = 80 host = "${main_domain}"