Self-host PLANKA
updated Sep 2026deployed by usprices checked · Jul 2026Install verified on Ubuntu 26.04 · Sep 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →
Kanban board for teams and personal projects, with projects, boards, lists, cards, labels, due dates, attachments, comments and real-time updates. Source-available under the PLANKA Community License (a fair-use license): free for personal use, internal use within your own organization and non-profits, but hosting it for third parties for commercial gain needs a paid commercial license.
Key facts
CategoryProject Management
LicensePLANKA Community License
StackJavaScript, React, Sails.js, PostgreSQL
Min RAM512 MB
Official imageyes
Measured idle RAM202 MB
Difficulty
What you need
- Any VPS with at least 512 MB of RAM
- A domain you control — most self-hosted setups need HTTPS in front of them
- Under an hour if you've used Docker before
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + USKamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + AsiaDigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + AsiaPaid link — we earn a commission if you shop through it.
Install
Run these commands on your server:
# PLANKA + PostgreSQL — the official docker-compose.yml, trimmed
mkdir -p planka && cd planka
# Generated signing key and first-admin password (read it back with: cat .env)
printf 'SECRET_KEY=%s\nADMIN_PASSWORD=%s\n' "$(openssl rand -hex 64)" "$(openssl rand -hex 12)" > .env
cat > docker-compose.yml <<'EOF'
services:
planka:
image: ghcr.io/plankanban/planka:2.2.1
restart: on-failure
volumes: ["data:/app/data"]
ports: ["3000:1337"]
environment:
BASE_URL: http://SERVER_IP:3000
DATABASE_URL: postgresql://postgres@postgres/planka
SECRET_KEY: ${SECRET_KEY}
DEFAULT_ADMIN_EMAIL: admin@example.com
DEFAULT_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
DEFAULT_ADMIN_NAME: Admin
DEFAULT_ADMIN_USERNAME: admin
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:16-alpine
restart: on-failure
volumes: ["db-data:/var/lib/postgresql/data"]
environment:
POSTGRES_DB: planka
POSTGRES_HOST_AUTH_METHOD: trust
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d planka"]
interval: 10s
timeout: 5s
retries: 5
volumes:
data:
db-data:
EOF
docker compose up -d # → http://SERVER_IP:3000 (log in as admin@example.com with ADMIN_PASSWORD from .env)An alternative to
Head-to-head
More in Project Management
Project Management
Donetick
GoReactSQLite
easyRead guide →
Project Management
Kanboard
PHPPostgreSQL
easyRead guide →
Project Management
Leantime
PHPJavaScriptMySQL
easyRead guide →
Project Management
OpenProject
RubyTypeScriptPostgreSQL
hardRead guide →