diff --git a/mint.json b/mint.json
index e831fc5..9832b18 100644
--- a/mint.json
+++ b/mint.json
@@ -68,11 +68,12 @@
"group": "Install",
"pages": [
"self-hosting/methods/docker-compose",
+ "self-hosting/methods/docker-aio",
"self-hosting/methods/docker-swarm",
+ "self-hosting/methods/airgapped-edition",
"self-hosting/methods/kubernetes",
"self-hosting/methods/coolify",
"self-hosting/methods/portainer",
- "self-hosting/methods/airgapped-edition",
"self-hosting/methods/podman-quadlets"
]
},
diff --git a/self-hosting/methods/airgapped-edition.mdx b/self-hosting/methods/airgapped-edition.mdx
index d5f4844..9ebe148 100644
--- a/self-hosting/methods/airgapped-edition.mdx
+++ b/self-hosting/methods/airgapped-edition.mdx
@@ -1,5 +1,5 @@
---
-title: Deploy Plane Commercial Airgapped Edition
+title: Deploy Plane Airgapped Edition
sidebarTitle: Airgapped Edition
---
diff --git a/self-hosting/methods/docker-aio.mdx b/self-hosting/methods/docker-aio.mdx
new file mode 100644
index 0000000..1d723b5
--- /dev/null
+++ b/self-hosting/methods/docker-aio.mdx
@@ -0,0 +1,177 @@
+---
+title: Docker AIO (All-in-One) • Commercial Edition
+sidebarTitle: Docker AIO
+---
+
+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** (Port 3001) - The main Plane web interface you'll use
+- **Space** (Port 3002) - Public project spaces for external collaboration
+- **Admin** (Port 3003) - Administrative interface
+- **API Server** (Port 3004) - Backend API
+- **Live Server** (Port 3005) - Real-time collaboration features
+- **Silo** (Port 3006) - Integration services
+- **Monitor** (Port 3007) - Feature flags and payments
+- **Email Server** (Ports 10025, 10465, 10587) - SMTP server for notifications
+- **Proxy** (Port 80, 20025, 20465, 20587) - Caddy reverse proxy
+- **Worker and Beat Worker** - Background task processing
+
+## Prerequisites
+
+- [Docker](https://docs.docker.com/engine/)
+- 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)
+
+## Install Plane
+
+1. [Download the image]
+
+2. Run 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.
+
+
+ All environment variables are required for the container to function correctly.
+
+
+ ```bash
+ docker 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 \
+ plane-aio-commercial:latest
+ ```
+
+ If you're running everything locally, use this example:
+
+ ```bash
+ MYIP=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=5MV45J9NF5TEFZWYCRAX \
+ -e AWS_SECRET_ACCESS_KEY=7xMqAiAHsf2UUjMH+EwICXlyJL9TO30m8leEaDsL \
+ -e AWS_S3_BUCKET_NAME=plane-app \
+ -e AWS_S3_ENDPOINT_URL=http://${MYIP}:19000 \
+ -e FILE_SIZE_LIMIT=10485760 \
+ plane-aio-commercial:latest
+ ```
+
+2. Once it's running, you can access the Plane application on the domain you provided during the deployment.
+
+## Volume mounts
+
+### Recommended persistent volumes
+```bash
+-v /path/to/logs:/app/logs \
+-v /path/to/data:/app/data
+```
+
+### Workspace license DB
+```bash
+-v /path/to/monitordb:/app/monitor
+```
+
+### SSL certificate support
+For HTTPS support, mount certificates:
+```bash
+-v /path/to/certs:/app/email/tls
+```
+
+## Environment variables (optional)
+
+### Network and Protocol
+- `SITE_ADDRESS`: Server bind address (default: `:80`)
+- `APP_PROTOCOL`: Protocol to use (`http` or `https`, default: `http`)
+
+### Email configuration
+- `INTAKE_EMAIL_DOMAIN`: Domain for intake emails (default: `intake.`)
+- `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 integration
+- `GITHUB_APP_NAME`, `GITHUB_APP_ID`, `GITHUB_PRIVATE_KEY`: GitHub App integration
+- `SLACK_CLIENT_ID`, `SLACK_CLIENT_SECRET`: Slack integration
+- `GITLAB_CLIENT_ID`, `GITLAB_CLIENT_SECRET`: GitLab integration
+
+## Build the image
+
+To build the AIO image yourself:
+
+```bash
+cd deploy/aio/commercial
+./build.sh --release=v1.11.1
+```
+
+Available 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:
+```bash
+docker exec -it supervisorctl status
+```
+
+## Production 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