Docker AIO (All-in-One) Commercial Edition
The Plane Commercial All-in-One (AIO) Docker image packages all Plane services into a single container, making it the fastest way to get Plane running.
What's included
Your single AIO container includes all these services running together:
- Web App - The main Plane web interface you'll use
- Space - Public project spaces for external collaboration
- Admin - Administrative interface
- API Server - Backend API
- Live Server - Real-time collaboration features
- Silo - Integration services
- Monitor - Feature flags and payments
- Email Server - SMTP server for notifications
- Proxy (Port 80, 20025, 20465, 20587) - Caddy reverse proxy
- Worker and Beat Worker - Background task processing
Port Mapping
The following ports are exposed:
80: Main web interface (HTTP)443: HTTPS (if SSL configured)20025: SMTP port 2520465: SMTP port 465 (SSL/TLS)20587: SMTP port 587 (STARTTLS)
Prerequisites
- Docker
- Set up these external services:
- PostgreSQL
For data storage - Redis
For caching and session management - RabbitMQ For message queuing
- S3-compatible storage
For file uploads (AWS S3 or MinIO)
- PostgreSQL
Install Plane
Download the image with:
bashdocker pull artifacts.plane.so/makeplane/plane-aio-commercial:stableRun the following command to deploy the Plane AIO container. Make sure to replace all placeholder values (e.g.,
your-domain.com,user:pass) with your actual configuration.WARNING
All environment variables are required for the container to function correctly.
bashdocker run --name plane-aio --rm -it \ -p 80:80 \ -p 20025:20025 \ -p 20465:20465 \ -p 20587:20587 \ -e DOMAIN_NAME=your-domain.com \ -e DATABASE_URL=postgresql://user:pass@host:port/database \ -e REDIS_URL=redis://host:port \ -e AMQP_URL=amqp://user:pass@host:port/vhost \ -e AWS_REGION=us-east-1 \ -e AWS_ACCESS_KEY_ID=your-access-key \ -e AWS_SECRET_ACCESS_KEY=your-secret-key \ -e AWS_S3_BUCKET_NAME=your-bucket \ artifacts.plane.so/makeplane/plane-aio-commercial:stableIf you're running on an IP address, use this example:
bashMYIP=192.168.68.169 docker run --name myaio --rm -it \ -p 80:80 \ -p 20025:20025 \ -p 20465:20465 \ -p 20587:20587 \ -e DOMAIN_NAME=${MYIP} \ -e DATABASE_URL=postgresql://plane:plane@${MYIP}:15432/plane \ -e REDIS_URL=redis://${MYIP}:16379 \ -e AMQP_URL=amqp://plane:plane@${MYIP}:15673/plane \ -e AWS_REGION=us-east-1 \ -e AWS_ACCESS_KEY_ID=<YOUR_AWS_ACCESS_KEY_ID> \ -e AWS_SECRET_ACCESS_KEY=<YOUR_AWS_SECRET_ACCESS_KEY> \ -e AWS_S3_BUCKET_NAME=plane-app \ -e AWS_S3_ENDPOINT_URL=http://${MYIP}:19000 \ -e FILE_SIZE_LIMIT=10485760 \ artifacts.plane.so/makeplane/plane-aio-commercial:stableOnce it's running, you can access the Plane application on the domain you provided during the deployment.
If you've purchased a paid plan, activate your license key to unlock premium features.
Volume mounts
Recommended persistent volumes
-v /path/to/logs:/app/logs \
-v /path/to/data:/app/dataWorkspace license DB
-v /path/to/monitordb:/app/monitorSSL certificate support
For HTTPS support, mount certificates:
-v /path/to/certs:/app/email/tlsEnvironment variables (optional)
Network and Protocol
SITE_ADDRESS: Server bind address (default::80)APP_PROTOCOL: Protocol to use (httporhttps, default:http)
Email configuration
INTAKE_EMAIL_DOMAIN: Domain for intake emails (default:intake.<DOMAIN_NAME>)LISTEN_SMTP_PORT_25: SMTP port 25 mapping (default:20025)LISTEN_SMTP_PORT_465: SMTP port 465 mapping (default:20465)LISTEN_SMTP_PORT_587: SMTP port 587 mapping (default:20587)SMTP_DOMAIN: SMTP server domain (default:0.0.0.0)TLS_CERT_PATH: Path to TLS certificate file (optional)TLS_PRIV_KEY_PATH: Path to TLS private key file (optional)
Security and secrets
MACHINE_SIGNATURE: Unique machine identifier (auto-generated if not provided)SECRET_KEY: Django secret key (default provided)SILO_HMAC_SECRET_KEY: Silo HMAC secret (default provided)AES_SECRET_KEY: AES encryption key (default provided)LIVE_SERVER_SECRET_KEY: Live server secret (default provided)
File handling
FILE_SIZE_LIMIT: Maximum file upload size in bytes (default:5242880= 5MB)
Integration callbacks
INTEGRATION_CALLBACK_BASE_URL: Base URL for OAuth callbacks
API configuration
API_KEY_RATE_LIMIT: API key rate limit (default:60/minute)
Third-party integrations
GITHUB_CLIENT_ID,GITHUB_CLIENT_SECRET: GitHub integrationGITHUB_APP_NAME,GITHUB_APP_ID,GITHUB_PRIVATE_KEY: GitHub App integrationSLACK_CLIENT_ID,SLACK_CLIENT_SECRET: Slack integrationGITLAB_CLIENT_ID,GITLAB_CLIENT_SECRET: GitLab integration
Build the image
To build the AIO image yourself:
cd deploy/aio/commercial
./build.sh --release=v1.11.1Available build options:
--release: Plane version to build (required)--image-name: Custom image name (default:plane-aio-commercial)
Troubleshoot
The container will validate required environment variables on startup and display helpful error messages if any are missing.
Logs
All service logs are available in /app/logs/:
- Access logs:
/app/logs/access/ - Error logs:
/app/logs/error/
Health checks
The container runs multiple services managed by Supervisor. Check service status:
docker exec -it <container-name> supervisorctl statusProduction considerations
- Use proper SSL certificates for HTTPS
- Configure proper backup strategies for data
- Monitor resource usage and scale accordingly
- Use external load balancer for high availability
- Regularly update to latest versions
- Secure your environment variables and secrets

