Planka is an open-source, Kanban-style project management tool including boards, lists, and cards for organizing tasks and tracking team progress. This guide deploys it via Docker Compose with a PostgreSQL backend and Traefik-managed HTTPS, then builds a board and tests collaboration.
Prerequisites: a Linux server (2 vCPU / 4GB RAM minimum), Docker + Docker Compose, a domain A record (e.g.
planka.example.com).
Set Up the Project
$ mkdir ~/planka
$ cd ~/planka
$ openssl rand -hex 64
Environment file — replace domain, email, secret key, and DB password:
$ nano .env
DOMAIN=planka.example.com
LETSENCRYPT_EMAIL=admin@example.com
BASE_URL=https://planka.example.com
SECRET_KEY=YOUR_GENERATED_SECRET_KEY
POSTGRES_DB=planka
POSTGRES_USER=planka_admin
POSTGRES_PASSWORD=STRONG_DATABASE_PASSWORD
Deploy with Docker Compose
$ nano docker-compose.yml
services:
traefik:
image: traefik:v3.7.0
restart: unless-stopped
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=${LETSENCRYPT_EMAIL}"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
postgres:
image: postgres:16-alpine
container_name: planka-db
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- ./pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
planka:
image: ghcr.io/plankanban/planka:2.1.1
container_name: planka-app
depends_on:
postgres:
condition: service_healthy
environment:
BASE_URL: ${BASE_URL}
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres/${POSTGRES_DB}
SECRET_KEY: ${SECRET_KEY}
volumes:
- ./data:/app/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.planka.rule=Host(`${DOMAIN}`)"
- "traefik.http.routers.planka.entrypoints=websecure"
- "traefik.http.routers.planka.tls.certresolver=letsencrypt"
restart: unless-stopped
$ docker compose up -d
$ docker compose ps -a
Create the admin account:
$ docker compose run --rm planka npm run db:create-admin-user
Enter email, password, name (username optional).
$ docker compose logs
Confirm PostgreSQL accepts connections and Planka starts cleanly.
First-Run Setup
Visit https://planka.example.com, log in with your admin credentials, accept the End User Terms of Service to reach the dashboard.
Build a Kanban Board
1. Create a project: Create project → name (e.g. Team Collaboration Project) → optional description → Create project.
2. Create a board: open the project → Create board → name (e.g. Development Tasks) → Create board.
3. Add lists and cards: Add list for To Do, In Progress, Completed. Under each, Add card, name it, Enter. Drag cards between lists to confirm movement works.
4. Invite a team member: profile avatar → Administration → Add user (name, email, password) → Add User. Back on the board, open the members panel, search for the new user, add them.
Next Steps
Planka is running with persistent PostgreSQL storage and automatic HTTPS. From here:
- Set up OIDC for SSO instead of local accounts
- Configure SMTP for email notifications on card activity
- Explore custom labels, due dates, and card attachments for richer workflows
For the full guide, visit the original article on Vultr Docs.
Top comments (0)