Plane
Open-source project management tool like Jira.
Overview
Plane is an open-source project management platform that serves as a compelling alternative to proprietary tools like Jira and Linear. Developed with modern web technologies, Plane offers comprehensive project tracking capabilities including issue management, sprint planning, and team collaboration features. The platform emphasizes user experience with a clean interface while maintaining powerful functionality for agile development workflows. This deployment stack combines Plane's frontend and backend services with PostgreSQL for robust data persistence and Redis for high-performance caching and session management. PostgreSQL provides the ACID compliance and complex query capabilities essential for project management data integrity, while Redis delivers sub-millisecond response times for real-time collaboration features and user sessions. The architecture separates concerns effectively, allowing the frontend to communicate with the API layer while maintaining data consistency across all project management operations. Organizations seeking to maintain control over their project management data while avoiding vendor lock-in will find this stack particularly valuable. The combination offers enterprise-grade reliability through PostgreSQL's proven stability, enhanced performance via Redis caching, and complete customization freedom through Plane's open-source nature. Development teams, startups prioritizing data sovereignty, and enterprises requiring on-premises project management solutions benefit from this self-hosted approach that rivals commercial alternatives.
Key Features
- Complete issue tracking system with customizable workflows and status transitions
- Sprint planning and agile project management with burndown charts and velocity tracking
- Real-time collaboration powered by Redis pub/sub messaging for instant updates
- Advanced project analytics and reporting backed by PostgreSQL's window functions
- Team workspace management with role-based permissions and project access control
- API-first architecture enabling custom integrations and workflow automation
- Multi-project support with cross-project dependencies and portfolio views
- PostgreSQL full-text search for comprehensive issue and project content discovery
Common Use Cases
- 1Software development teams migrating from Jira to reduce licensing costs
- 2Startups requiring full control over project management data and user information
- 3Remote development teams needing real-time collaboration on project planning
- 4Organizations with compliance requirements mandating on-premises data storage
- 5Development agencies managing multiple client projects with separate workspaces
- 6Open-source projects requiring transparent and customizable project management
- 7Companies integrating project management with existing internal tools via API
Prerequisites
- Minimum 2GB RAM recommended for optimal performance across all services
- Docker and Docker Compose installed with support for multi-service orchestration
- Available ports 3000, 8000 for frontend and API access respectively
- Basic understanding of environment variable configuration for secrets management
- Familiarity with PostgreSQL backup procedures for production deployments
- Knowledge of agile project management concepts for effective Plane utilization
For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms
docker-compose.yml
docker-compose.yml
1services: 2 plane-web: 3 image: makeplane/plane-frontend:latest4 container_name: plane-web5 restart: unless-stopped6 environment: 7 NEXT_PUBLIC_API_BASE_URL: http://localhost:80008 ports: 9 - "3000:3000"10 depends_on: 11 - plane-api12 networks: 13 - plane1415 plane-api: 16 image: makeplane/plane-backend:latest17 container_name: plane-api18 restart: unless-stopped19 environment: 20 DATABASE_URL: postgres://plane:${DB_PASSWORD}@postgres:5432/plane21 REDIS_URL: redis://redis:637922 SECRET_KEY: ${SECRET_KEY}23 ports: 24 - "8000:8000"25 depends_on: 26 - postgres27 - redis28 networks: 29 - plane3031 postgres: 32 image: postgres:15-alpine33 container_name: plane-postgres34 restart: unless-stopped35 environment: 36 POSTGRES_USER: plane37 POSTGRES_PASSWORD: ${DB_PASSWORD}38 POSTGRES_DB: plane39 volumes: 40 - postgres_data:/var/lib/postgresql/data41 networks: 42 - plane4344 redis: 45 image: redis:alpine46 container_name: plane-redis47 restart: unless-stopped48 networks: 49 - plane5051volumes: 52 postgres_data: 5354networks: 55 plane: 56 driver: bridge.env Template
.env
1DB_PASSWORD=changeme2SECRET_KEY=generate-a-secret-keyUsage Notes
- 1Frontend at http://localhost:3000
- 2API at http://localhost:8000
- 3Jira/Linear alternative
Individual Services(4 services)
Copy individual services to mix and match with your existing compose files.
plane-web
plane-web:
image: makeplane/plane-frontend:latest
container_name: plane-web
restart: unless-stopped
environment:
NEXT_PUBLIC_API_BASE_URL: http://localhost:8000
ports:
- "3000:3000"
depends_on:
- plane-api
networks:
- plane
plane-api
plane-api:
image: makeplane/plane-backend:latest
container_name: plane-api
restart: unless-stopped
environment:
DATABASE_URL: postgres://plane:${DB_PASSWORD}@postgres:5432/plane
REDIS_URL: redis://redis:6379
SECRET_KEY: ${SECRET_KEY}
ports:
- "8000:8000"
depends_on:
- postgres
- redis
networks:
- plane
postgres
postgres:
image: postgres:15-alpine
container_name: plane-postgres
restart: unless-stopped
environment:
POSTGRES_USER: plane
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: plane
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- plane
redis
redis:
image: redis:alpine
container_name: plane-redis
restart: unless-stopped
networks:
- plane
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 plane-web:5 image: makeplane/plane-frontend:latest6 container_name: plane-web7 restart: unless-stopped8 environment:9 NEXT_PUBLIC_API_BASE_URL: http://localhost:800010 ports:11 - "3000:3000"12 depends_on:13 - plane-api14 networks:15 - plane1617 plane-api:18 image: makeplane/plane-backend:latest19 container_name: plane-api20 restart: unless-stopped21 environment:22 DATABASE_URL: postgres://plane:${DB_PASSWORD}@postgres:5432/plane23 REDIS_URL: redis://redis:637924 SECRET_KEY: ${SECRET_KEY}25 ports:26 - "8000:8000"27 depends_on:28 - postgres29 - redis30 networks:31 - plane3233 postgres:34 image: postgres:15-alpine35 container_name: plane-postgres36 restart: unless-stopped37 environment:38 POSTGRES_USER: plane39 POSTGRES_PASSWORD: ${DB_PASSWORD}40 POSTGRES_DB: plane41 volumes:42 - postgres_data:/var/lib/postgresql/data43 networks:44 - plane4546 redis:47 image: redis:alpine48 container_name: plane-redis49 restart: unless-stopped50 networks:51 - plane5253volumes:54 postgres_data:5556networks:57 plane:58 driver: bridge59EOF6061# 2. Create the .env file62cat > .env << 'EOF'63DB_PASSWORD=changeme64SECRET_KEY=generate-a-secret-key65EOF6667# 3. Start the services68docker compose up -d6970# 4. View logs71docker compose logs -fOne-Liner
Run this command to download and set up the recipe in one step:
terminal
1curl -fsSL https://docker.recipes/api/recipes/plane/run | bashTroubleshooting
- Frontend shows connection errors: Verify NEXT_PUBLIC_API_BASE_URL matches your actual API endpoint and plane-api container is running
- Database connection refused: Check DATABASE_URL format and ensure postgres container started before plane-api, verify DB_PASSWORD matches between services
- Redis connection timeout: Confirm redis container is accessible on port 6379 and REDIS_URL environment variable is correctly formatted
- Plane API returns 500 errors: Check SECRET_KEY environment variable is set and container logs for Django/PostgreSQL connection issues
- Slow project loading times: Monitor PostgreSQL performance and consider increasing shared_buffers, check Redis memory usage for caching efficiency
- User sessions not persisting: Verify Redis container has sufficient memory allocation and is not experiencing eviction policies
Community Notes
Loading...
Loading notes...
Download Recipe Kit
Get all files in a ready-to-deploy package
Includes docker-compose.yml, .env template, README, and license
Components
planepostgresredisminio
Tags
#plane#project#management#jira
Category
Productivity & CollaborationAd Space
Shortcuts: C CopyF FavoriteD Download