Planka Kanban Board
Planka Trello alternative with PostgreSQL.
Overview
Planka is an open-source Kanban board application that provides a self-hosted alternative to Trello, developed with a focus on simplicity, performance, and team collaboration. Built with Node.js and React, Planka offers the familiar drag-and-drop interface of popular project management tools while giving organizations complete control over their data and deployment. The platform supports real-time collaboration, file attachments, due dates, labels, and member assignments, making it suitable for teams of all sizes looking to organize projects without relying on external services.
This deployment creates a two-container stack with Planka running on port 1337 and a dedicated PostgreSQL 15 database instance for data persistence. The Planka service connects to the planka-db container using a PostgreSQL connection string, with separate Docker volumes for user avatars, project background images, file attachments, and database data. This architecture ensures clean separation between the application layer and data storage while maintaining optimal performance for board operations and user interactions.
This configuration is ideal for teams, small businesses, and organizations that need a reliable project management solution with complete data ownership and customization capabilities. Unlike cloud-based alternatives, this setup provides full control over user data, attachment storage, and system behavior, making it particularly valuable for privacy-conscious organizations, development teams working on sensitive projects, or companies operating in regulated industries where data sovereignty is crucial.
Key Features
- Real-time collaborative Kanban boards with drag-and-drop card management across customizable lists
- File attachment system with dedicated volume storage for project documents and images
- User avatar and project background image support with persistent storage volumes
- PostgreSQL database backend providing ACID compliance and reliable data integrity for project data
- Built-in user management with configurable admin accounts and team member permissions
- Card-based task management with support for due dates, labels, descriptions, and member assignments
- Project organization with multiple boards and customizable workflows per project
- Responsive web interface built with React for consistent experience across desktop and mobile devices
Common Use Cases
- 1Software development teams managing sprints, backlogs, and feature development workflows
- 2Marketing teams coordinating campaign planning, content creation, and approval processes
- 3Small business project management for client work, internal initiatives, and team coordination
- 4Educational institutions organizing coursework, research projects, and administrative tasks
- 5Remote teams requiring self-hosted collaboration tools with complete data control
- 6Organizations in regulated industries needing project management without external data sharing
- 7Personal productivity and household management for individuals preferring Kanban-style organization
Prerequisites
- Docker and Docker Compose installed with container orchestration capabilities
- Minimum 512MB RAM for combined Planka application and PostgreSQL database operation
- Port 1337 available for Planka web interface access (configurable via PLANKA_PORT)
- Environment variables configured for database credentials, admin account, and secret key
- Sufficient disk space for PostgreSQL data, user avatars, project images, and file attachments
- Basic understanding of Kanban methodology and project management workflows
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 planka: 3 image: ghcr.io/plankanban/planka:latest4 container_name: planka5 restart: unless-stopped6 ports: 7 - "${PLANKA_PORT:-1337}:1337"8 environment: 9 - BASE_URL=http://localhost:${PLANKA_PORT:-1337}10 - DATABASE_URL=postgresql://${DB_USER}:${DB_PASSWORD}@planka-db/planka11 - SECRET_KEY=${SECRET_KEY}12 - DEFAULT_ADMIN_EMAIL=${ADMIN_EMAIL}13 - DEFAULT_ADMIN_PASSWORD=${ADMIN_PASSWORD}14 - DEFAULT_ADMIN_NAME=Admin15 - DEFAULT_ADMIN_USERNAME=admin16 volumes: 17 - planka_avatars:/app/public/user-avatars18 - planka_backgrounds:/app/public/project-background-images19 - planka_attachments:/app/private/attachments20 depends_on: 21 - planka-db2223 planka-db: 24 image: postgres:15-alpine25 container_name: planka-db26 restart: unless-stopped27 environment: 28 - POSTGRES_USER=${DB_USER}29 - POSTGRES_PASSWORD=${DB_PASSWORD}30 - POSTGRES_DB=planka31 volumes: 32 - planka_db_data:/var/lib/postgresql/data3334volumes: 35 planka_avatars: 36 planka_backgrounds: 37 planka_attachments: 38 planka_db_data: .env Template
.env
1# Planka2PLANKA_PORT=13373DB_USER=planka4DB_PASSWORD=planka_password5SECRET_KEY=your_secret_key6ADMIN_EMAIL=admin@example.com7ADMIN_PASSWORD=admin_passwordUsage Notes
- 1Planka at http://localhost:1337
- 2Login with admin credentials
- 3Create boards and projects
- 4Trello-like experience
Individual Services(2 services)
Copy individual services to mix and match with your existing compose files.
planka
planka:
image: ghcr.io/plankanban/planka:latest
container_name: planka
restart: unless-stopped
ports:
- ${PLANKA_PORT:-1337}:1337
environment:
- BASE_URL=http://localhost:${PLANKA_PORT:-1337}
- DATABASE_URL=postgresql://${DB_USER}:${DB_PASSWORD}@planka-db/planka
- SECRET_KEY=${SECRET_KEY}
- DEFAULT_ADMIN_EMAIL=${ADMIN_EMAIL}
- DEFAULT_ADMIN_PASSWORD=${ADMIN_PASSWORD}
- DEFAULT_ADMIN_NAME=Admin
- DEFAULT_ADMIN_USERNAME=admin
volumes:
- planka_avatars:/app/public/user-avatars
- planka_backgrounds:/app/public/project-background-images
- planka_attachments:/app/private/attachments
depends_on:
- planka-db
planka-db
planka-db:
image: postgres:15-alpine
container_name: planka-db
restart: unless-stopped
environment:
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=planka
volumes:
- planka_db_data:/var/lib/postgresql/data
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 planka:5 image: ghcr.io/plankanban/planka:latest6 container_name: planka7 restart: unless-stopped8 ports:9 - "${PLANKA_PORT:-1337}:1337"10 environment:11 - BASE_URL=http://localhost:${PLANKA_PORT:-1337}12 - DATABASE_URL=postgresql://${DB_USER}:${DB_PASSWORD}@planka-db/planka13 - SECRET_KEY=${SECRET_KEY}14 - DEFAULT_ADMIN_EMAIL=${ADMIN_EMAIL}15 - DEFAULT_ADMIN_PASSWORD=${ADMIN_PASSWORD}16 - DEFAULT_ADMIN_NAME=Admin17 - DEFAULT_ADMIN_USERNAME=admin18 volumes:19 - planka_avatars:/app/public/user-avatars20 - planka_backgrounds:/app/public/project-background-images21 - planka_attachments:/app/private/attachments22 depends_on:23 - planka-db2425 planka-db:26 image: postgres:15-alpine27 container_name: planka-db28 restart: unless-stopped29 environment:30 - POSTGRES_USER=${DB_USER}31 - POSTGRES_PASSWORD=${DB_PASSWORD}32 - POSTGRES_DB=planka33 volumes:34 - planka_db_data:/var/lib/postgresql/data3536volumes:37 planka_avatars:38 planka_backgrounds:39 planka_attachments:40 planka_db_data:41EOF4243# 2. Create the .env file44cat > .env << 'EOF'45# Planka46PLANKA_PORT=133747DB_USER=planka48DB_PASSWORD=planka_password49SECRET_KEY=your_secret_key50ADMIN_EMAIL=admin@example.com51ADMIN_PASSWORD=admin_password52EOF5354# 3. Start the services55docker compose up -d5657# 4. View logs58docker 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/planka-kanban-stack/run | bashTroubleshooting
- Planka container fails to start: Verify DATABASE_URL environment variable format and ensure planka-db container is running and accessible
- Cannot login with admin credentials: Check DEFAULT_ADMIN_EMAIL and DEFAULT_ADMIN_PASSWORD environment variables match your login attempt
- File attachments not saving: Ensure planka_attachments volume is properly mounted and container has write permissions to /app/private/attachments
- Database connection errors: Confirm PostgreSQL credentials (DB_USER, DB_PASSWORD) match between planka and planka-db service configurations
- Avatar or background images not displaying: Verify planka_avatars and planka_backgrounds volumes are mounted correctly and accessible
- Port 1337 already in use: Change PLANKA_PORT environment variable and update BASE_URL accordingly to use alternative port
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
plankapostgresql
Tags
#planka#kanban#trello#project-management
Category
Productivity & CollaborationAd Space
Shortcuts: C CopyF FavoriteD Download