Plane
Plane is an open-source project management tool designed as a self-hosted alternative to Jira, Linear, and Asana. It provides issue tracking with customizable properties, sprint cycles, project modules, custom views, and a beautiful dashboard for tracking progress. This stack deploys the Plane frontend (React-based web UI), backend API server, background worker for async tasks, beat scheduler for periodic jobs, PostgreSQL 16 for data storage, Redis 7 for caching and task queuing, and MinIO for file storage. Plane supports Kanban boards, list views, spreadsheet views, Gantt charts, custom workflows, and GitHub/GitLab integration for linking issues to code. After deployment, access the web UI on port 80 to create your workspace, set up projects, and invite team members.
Enthaltene Services
web
makeplane/plane-frontend:latest
Umgebungsvariablen:
api
makeplane/plane-backend:latest
Umgebungsvariablen:
worker
makeplane/plane-backend:latest
Umgebungsvariablen:
beat-worker
makeplane/plane-backend:latest
Umgebungsvariablen:
postgres
postgres:16-alpine
Umgebungsvariablen:
redis
redis:7-alpine
minio
minio/minio:latest
Umgebungsvariablen:
Generiertes YAML
# Generated by ComposeHub (composehub.dev)
name: plane
services:
web:
image: makeplane/plane-frontend:latest
restart: always
ports:
- 80:3000
environment:
NEXT_PUBLIC_API_BASE_URL: ${API_BASE_URL:-http://localhost:80}
networks:
- plane
depends_on:
api:
condition: service_healthy
healthcheck:
test:
- CMD-SHELL
- curl -f http://localhost:3000 || exit 1
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
deploy:
resources:
limits:
cpus: "1.00"
memory: 512M
reservations:
cpus: "0.25"
memory: 128M
labels:
com.composehub.description: Plane frontend web application
api:
image: makeplane/plane-backend:latest
restart: always
command:
- ./bin/api
volumes:
- plane_uploads:/code/uploads
environment:
SECRET_KEY: ${SECRET_KEY:-changeme-generate-a-long-random-string}
DATABASE_URL: postgresql://${POSTGRES_USER:-plane}:${POSTGRES_PASSWORD:-changeme}@postgres:5432/${POSTGRES_DB:-plane}
REDIS_URL: redis://redis:6379/
AWS_S3_ENDPOINT_URL: http://minio:9000
AWS_ACCESS_KEY_ID: ${MINIO_ROOT_USER:-plane}
AWS_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD:-changeme}
AWS_S3_BUCKET_NAME: ${S3_BUCKET:-plane-uploads}
AWS_REGION: ${AWS_REGION:-us-east-1}
USE_MINIO: "true"
WEB_URL: ${WEB_URL:-http://localhost:80}
networks:
- plane
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
minio:
condition: service_started
healthcheck:
test:
- CMD-SHELL
- curl -f http://localhost:8000/api/v1/ || exit 1
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
deploy:
resources:
limits:
cpus: "2.00"
memory: 1024M
reservations:
cpus: "0.50"
memory: 256M
labels:
com.composehub.description: Plane backend API server
worker:
image: makeplane/plane-backend:latest
restart: always
command:
- ./bin/worker
volumes:
- plane_uploads:/code/uploads
environment:
SECRET_KEY: ${SECRET_KEY:-changeme-generate-a-long-random-string}
DATABASE_URL: postgresql://${POSTGRES_USER:-plane}:${POSTGRES_PASSWORD:-changeme}@postgres:5432/${POSTGRES_DB:-plane}
REDIS_URL: redis://redis:6379/
AWS_S3_ENDPOINT_URL: http://minio:9000
AWS_ACCESS_KEY_ID: ${MINIO_ROOT_USER:-plane}
AWS_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD:-changeme}
AWS_S3_BUCKET_NAME: ${S3_BUCKET:-plane-uploads}
USE_MINIO: "true"
networks:
- plane
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
deploy:
resources:
limits:
cpus: "1.00"
memory: 512M
reservations:
cpus: "0.25"
memory: 128M
labels:
com.composehub.description: Plane background worker for async tasks
beat-worker:
image: makeplane/plane-backend:latest
restart: always
command:
- ./bin/beat
environment:
SECRET_KEY: ${SECRET_KEY:-changeme-generate-a-long-random-string}
DATABASE_URL: postgresql://${POSTGRES_USER:-plane}:${POSTGRES_PASSWORD:-changeme}@postgres:5432/${POSTGRES_DB:-plane}
REDIS_URL: redis://redis:6379/
networks:
- plane
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
deploy:
resources:
limits:
cpus: "0.50"
memory: 256M
reservations:
cpus: "0.10"
memory: 64M
labels:
com.composehub.description: Plane beat scheduler for periodic tasks
postgres:
image: postgres:16-alpine
restart: always
volumes:
- plane_db:/var/lib/postgresql/data
environment:
POSTGRES_DB: ${POSTGRES_DB:-plane}
POSTGRES_USER: ${POSTGRES_USER:-plane}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
networks:
- plane
healthcheck:
test:
- CMD-SHELL
- pg_isready -U ${POSTGRES_USER:-plane} -d ${POSTGRES_DB:-plane}
interval: 5s
timeout: 5s
retries: 10
start_period: 30s
deploy:
resources:
limits:
cpus: "1.00"
memory: 512M
reservations:
cpus: "0.25"
memory: 128M
labels:
com.composehub.description: PostgreSQL 16 database for Plane
redis:
image: redis:7-alpine
restart: always
command:
- redis-server
- "--save"
- "20"
- "1"
- "--loglevel"
- warning
- "--maxmemory"
- 256mb
- "--maxmemory-policy"
- allkeys-lru
volumes:
- plane_redis:/data
networks:
- plane
healthcheck:
test:
- CMD-SHELL
- redis-cli ping | grep PONG
interval: 5s
timeout: 5s
retries: 10
start_period: 10s
deploy:
resources:
limits:
cpus: "0.50"
memory: 320M
reservations:
cpus: "0.10"
memory: 64M
labels:
com.composehub.description: Redis 7 for Plane caching and task queuing
minio:
image: minio/minio:latest
restart: always
command:
- server
- /data
- "--console-address"
- ":9090"
volumes:
- plane_minio:/data
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER:-plane}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-changeme}
networks:
- plane
healthcheck:
test:
- CMD-SHELL
- mc ready local || exit 1
interval: 15s
timeout: 10s
retries: 5
start_period: 20s
deploy:
resources:
limits:
cpus: "1.00"
memory: 512M
reservations:
cpus: "0.10"
memory: 128M
labels:
com.composehub.description: MinIO S3-compatible object storage for file uploads
networks:
plane:
driver: bridge
volumes:
plane_db:
driver: local
plane_redis:
driver: local
plane_minio:
driver: local
plane_uploads:
driver: local
Kurzinfo
- Services
- 7
- Netzwerke
- 1
- Volumes
- 4
Wann verwenden
Dieses Template ist ideal für die Einrichtung einer plane Umgebung. Alle Services sind mit Healthchecks, Ressourcenlimits und sinnvollen Standardwerten vorkonfiguriert. Passen Sie die Umgebungsvariablen an, bevor Sie in Produktion gehen.
Tipps
- Ändern Sie alle Standardpasswörter vor dem Deployment
- Überprüfen Sie die Ressourcenlimits für Ihre Hardware
- Fügen Sie einen Reverse Proxy für HTTPS in Produktion hinzu
- Konfigurieren Sie Backup-Strategien für Daten-Volumes