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