docker.recipes

Planka Kanban Board

beginner

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:latest
4 container_name: planka
5 restart: unless-stopped
6 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/planka
11 - SECRET_KEY=${SECRET_KEY}
12 - DEFAULT_ADMIN_EMAIL=${ADMIN_EMAIL}
13 - DEFAULT_ADMIN_PASSWORD=${ADMIN_PASSWORD}
14 - DEFAULT_ADMIN_NAME=Admin
15 - DEFAULT_ADMIN_USERNAME=admin
16 volumes:
17 - planka_avatars:/app/public/user-avatars
18 - planka_backgrounds:/app/public/project-background-images
19 - planka_attachments:/app/private/attachments
20 depends_on:
21 - planka-db
22
23 planka-db:
24 image: postgres:15-alpine
25 container_name: planka-db
26 restart: unless-stopped
27 environment:
28 - POSTGRES_USER=${DB_USER}
29 - POSTGRES_PASSWORD=${DB_PASSWORD}
30 - POSTGRES_DB=planka
31 volumes:
32 - planka_db_data:/var/lib/postgresql/data
33
34volumes:
35 planka_avatars:
36 planka_backgrounds:
37 planka_attachments:
38 planka_db_data:

.env Template

.env
1# Planka
2PLANKA_PORT=1337
3DB_USER=planka
4DB_PASSWORD=planka_password
5SECRET_KEY=your_secret_key
6ADMIN_EMAIL=admin@example.com
7ADMIN_PASSWORD=admin_password

Usage Notes

  1. 1Planka at http://localhost:1337
  2. 2Login with admin credentials
  3. 3Create boards and projects
  4. 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 file
2cat > docker-compose.yml << 'EOF'
3services:
4 planka:
5 image: ghcr.io/plankanban/planka:latest
6 container_name: planka
7 restart: unless-stopped
8 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/planka
13 - SECRET_KEY=${SECRET_KEY}
14 - DEFAULT_ADMIN_EMAIL=${ADMIN_EMAIL}
15 - DEFAULT_ADMIN_PASSWORD=${ADMIN_PASSWORD}
16 - DEFAULT_ADMIN_NAME=Admin
17 - DEFAULT_ADMIN_USERNAME=admin
18 volumes:
19 - planka_avatars:/app/public/user-avatars
20 - planka_backgrounds:/app/public/project-background-images
21 - planka_attachments:/app/private/attachments
22 depends_on:
23 - planka-db
24
25 planka-db:
26 image: postgres:15-alpine
27 container_name: planka-db
28 restart: unless-stopped
29 environment:
30 - POSTGRES_USER=${DB_USER}
31 - POSTGRES_PASSWORD=${DB_PASSWORD}
32 - POSTGRES_DB=planka
33 volumes:
34 - planka_db_data:/var/lib/postgresql/data
35
36volumes:
37 planka_avatars:
38 planka_backgrounds:
39 planka_attachments:
40 planka_db_data:
41EOF
42
43# 2. Create the .env file
44cat > .env << 'EOF'
45# Planka
46PLANKA_PORT=1337
47DB_USER=planka
48DB_PASSWORD=planka_password
49SECRET_KEY=your_secret_key
50ADMIN_EMAIL=admin@example.com
51ADMIN_PASSWORD=admin_password
52EOF
53
54# 3. Start the services
55docker compose up -d
56
57# 4. View logs
58docker compose logs -f

One-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 | bash

Troubleshooting

  • 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

Ad Space