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.
Servizi Inclusi
web
makeplane/plane-frontend:latest
Variabili d'Ambiente:
api
makeplane/plane-backend:latest
Variabili d'Ambiente:
worker
makeplane/plane-backend:latest
Variabili d'Ambiente:
beat-worker
makeplane/plane-backend:latest
Variabili d'Ambiente:
postgres
postgres:16-alpine
Variabili d'Ambiente:
redis
redis:7-alpine
minio
minio/minio:latest
Variabili d'Ambiente:
YAML Generato
# 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
Informazioni Rapide
- Servizi
- 7
- Reti
- 1
- Volumi
- 4
Quando Usarlo
Questo template è ideale per configurare un ambiente plane Tutti i servizi sono preconfigurati con healthchecks, limiti di risorse e valori predefiniti sensati. Personalizza le variabili d'ambiente prima di fare il deploy in produzione.
Consigli
- Cambia tutte le password predefinite prima del deploy
- Verifica i limiti di risorse per il tuo hardware
- Aggiungi un reverse proxy per HTTPS in produzione
- Configura strategie di backup per i volumi di dati