Planka mit Docker Compose: Eigenes Kanban-Board lokal auf Port 3000 starten
Wenn aktuelle News nicht belastbar genug sind, muss der Fallback echten Nutzwert haben. Planka ist dafuer stark genug: ein selbst hostbares Kanban-Board mit sichtbarem Ergebnis im Browser, sauber dokumentiertem Docker-Weg und einem klaren lokalen Endpunkt auf http://127.0.0.1:3000.
Stand: 15. Juni 2026, 10:00 Uhr CEST. Die aktuelle PLANKA-Doku verweist weiter auf den Compose-Weg, die Release-Seite listet v2.1.1 als neueste Version, und das GitHub-Container-Paket fuehrt 2.1.1 zugleich als latest. Fuer ein reproduzierbares Setup pinne ich hier trotzdem bewusst auf ghcr.io/plankanban/planka:2.1.1 statt blind auf latest.
Wichtig ist noch ein Punkt aus der offiziellen Admin-Doku: seit Version 1.13 wird kein Administrator automatisch erzeugt. Genau deshalb setzt dieses Tutorial die Admin-Zugangsdaten beim ersten Start direkt ueber Umgebungsvariablen.
Was du am Ende hast
- ein laufendes Planka-Board unter
http://127.0.0.1:3000 - persistente Daten fuer Anwendung und PostgreSQL in lokalen Ordnern
- einen ersten Admin-Login ohne manuelle Nacharbeit im Container
- ein sichtbares Ergebnis statt nur eines weiteren abstrakten Docker-Grundlagenposts
Voraussetzungen
Du brauchst:
- Docker Engine oder Docker Desktop
docker composeopenssl- einen freien Port
3000
Kurz pruefen:
docker --version
docker compose version
openssl version
1. Arbeitsordner anlegen
Starte bewusst in einem neuen Projektordner:
mkdir planka-lab && cd planka-lab
2. Secret Key erzeugen
Die offizielle Docker-Doku verlangt einen SECRET_KEY. Erzeuge ihn direkt lokal:
openssl rand -hex 64
Kopiere die Ausgabe. Du brauchst sie gleich fuer PLANKA_SECRET_KEY.
3. .env mit deinen Werten anlegen
Lege jetzt eine planka-lab/.env an:
POSTGRES_PASSWORD=ersetze-das-durch-ein-starkes-db-passwort
PLANKA_SECRET_KEY=ersetze-das-durch-deinen-hex-key
[email protected]
PLANKA_ADMIN_PASSWORD=ersetze-das-durch-ein-starkes-admin-passwort
PLANKA_ADMIN_NAME=Eckelsoft Admin
PLANKA_ADMIN_USERNAME=eckelsoft
Fuer einen reinen lokalen Test ist die .test-Adresse praktisch, weil sie nicht versehentlich als echte Mailadresse missverstanden wird.
4. Compose-Datei schreiben
Erstelle jetzt planka-lab/compose.yaml:
services:
postgres:
image: postgres:16-alpine
container_name: planka-postgres
restart: unless-stopped
environment:
POSTGRES_DB: planka
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- ./postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d planka"]
interval: 10s
timeout: 5s
retries: 5
planka:
image: ghcr.io/plankanban/planka:2.1.1
container_name: planka
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
ports:
- "3000:1337"
environment:
BASE_URL: http://127.0.0.1:3000
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@postgres/planka
SECRET_KEY: ${PLANKA_SECRET_KEY}
DEFAULT_ADMIN_EMAIL: ${PLANKA_ADMIN_EMAIL}
DEFAULT_ADMIN_PASSWORD: ${PLANKA_ADMIN_PASSWORD}
DEFAULT_ADMIN_NAME: ${PLANKA_ADMIN_NAME}
DEFAULT_ADMIN_USERNAME: ${PLANKA_ADMIN_USERNAME}
volumes:
- ./data:/app/data
Warum genau diese Werte?
3000:1337folgt dem offiziellen Docker-Muster: lokal3000, intern lauscht Planka auf1337.postgres:16-alpineentspricht dem offiziellen Compose-Beispiel.DEFAULT_ADMIN_*spart dir den spaeteren manuellen Bootstrap und ist laut offizieller Admin-Doku ausdruecklich vorgesehen.- Das lokale Volume
./data:/app/databehaelt Uploads und Anwendungsdaten ueber Neustarts hinweg.
Nach dem ersten erfolgreichen Login kannst du die
DEFAULT_ADMIN_*-Variablen wieder aus compose.yaml entfernen, wenn du diesen Bootstrap-Zugang nicht dauerhaft im Compose-Setup behalten willst.
5. Stack starten
Ziehe die Images und starte dann den Stack:
docker compose pull
docker compose up -d
Beim ersten Start initialisiert PostgreSQL die Datenbank, danach startet Planka mit dem Admin-Konto aus deiner .env.
6. Funktion sauber pruefen
Nimm jetzt die drei sinnvollen Checks mit:
docker compose ps
docker compose logs --tail=100 postgres
docker compose logs --tail=100 planka
curl -I http://127.0.0.1:3000
Woran du ein gutes Ergebnis erkennst:
docker compose pszeigt beide Container als laufend an- die Logs von
postgresenthalten keine dauernden Restart-Schleifen - die Logs von
plankaenden nicht in Datenbankfehlern curl -Iliefert einen erfolgreichen HTTP-Status stattconnection refused
Damit ist der wichtigste Teil verifiziert: Die Weboberflaeche antwortet wirklich lokal und der App-Container kommt an seine Datenbank.
7. Im Browser einloggen
Oeffne jetzt:
http://127.0.0.1:3000
Melde dich mit den Werten aus deiner .env an:
PLANKA_ADMIN_EMAILPLANKA_ADMIN_PASSWORD
Wenn der Login steht, kannst du direkt:
- einen Workspace anlegen
- dein erstes Projekt erstellen
- ein Board mit Listen wie
Backlog,In ArbeitundErledigtbauen
Genau dort wird der Nutzwert sichtbar: nicht nur Container laufen, sondern ein echtes Aufgabenboard ist nach wenigen Minuten einsatzbereit.
8. Was das Setup praktisch taugt
Planka ist fuer kleine Teams, Solo-Projekte und interne Ablagen stark, weil es den typischen Kanban-Kern ohne SaaS-Zwang liefert:
- Boards, Karten und Listen laufen auf deinem eigenen Host
- PostgreSQL und App-Daten bleiben lokal unter deiner Kontrolle
- das Ergebnis ist sofort sichtbar und nicht nur ein Backend ohne Oberflaeche
Gerade fuer Nebenprojekte, Vereinsarbeit, kleine Agenturteams oder private Roadmaps ist das greifbarer als ein weiterer allgemeiner Docker-Text ohne klares Endprodukt.
9. Update und Alltag
Ein normales Update faehrt sich so:
docker compose pull
docker compose up -d
Zum Stoppen:
docker compose down
Deine Daten bleiben erhalten, solange die Ordner planka-lab/data und planka-lab/postgres bestehen bleiben.
Fazit
Planka ist als Docker-Compose-Projekt ein sinnvoller Fallback, weil die offizielle Doku konkret bleibt, die aktuelle Version verifizierbar ist und der Nutzen sofort sichtbar wird. Du startest nicht nur zwei Container, sondern landest am Ende bei einem echten Kanban-Board mit eigenem Admin-Zugang und lokaler Datenhaltung.