-
Notifications
You must be signed in to change notification settings - Fork 4
Docker AIO #137
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: preview
Are you sure you want to change the base?
Docker AIO #137
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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. | ||
|
||
<Warning> | ||
All environment variables are required for the container to function correctly. | ||
</Warning> | ||
|
||
```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 \ | ||
Comment on lines
+77
to
+78
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove real-looking AWS credentials These lines contain hard-coded access keys that triggered -e AWS_ACCESS_KEY_ID=5MV45J9NF5TEFZWYCRAX
-e AWS_SECRET_ACCESS_KEY=7xMqAiAHsf2UUjMH+EwICXlyJL9TO30m8leEaDsL Even if they are fictitious, publishing realistic-length secrets teaches bad practice and may be blocked by automated scanners. Replace with unmistakable placeholders, e.g.: - -e AWS_ACCESS_KEY_ID=5MV45J9NF5TEFZWYCRAX
- -e AWS_SECRET_ACCESS_KEY=7xMqAiAHsf2UUjMH+EwICXlyJL9TO30m8leEaDsL
+ -e AWS_ACCESS_KEY_ID=<YOUR_AWS_ACCESS_KEY_ID>
+ -e AWS_SECRET_ACCESS_KEY=<YOUR_AWS_SECRET_ACCESS_KEY> 🧰 Tools🪛 Gitleaks (8.27.2)78-78: Detected a Generic API Key, potentially exposing access to various services and sensitive operations. (generic-api-key) 🤖 Prompt for AI Agents
|
||
-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.<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) | ||
|
||
Comment on lines
+123
to
+127
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Warn readers to rotate default secrets The doc states “default provided” for 🤖 Prompt for AI Agents
|
||
### 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 <container-name> 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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Broken placeholder link
[Download the image]
is currently an empty Markdown reference. Readers will hit a 404 or be confused.Replace with the actual download URL or convert it to plain text until a link is available.
🤖 Prompt for AI Agents