Zum Inhalt

Self-Hosting Projektmanagement: Vikunja unter Debian Linux (Go Backend, Kanban, Gantt & CalDAV)

Erstellt: 06.11.2026 Aktualisiert: 06.11.2026

Management Summary: Ältere selbstgehostete Kanban-Lösungen (Kanboard, Wekan) leiden oft unter veralteten PHP-Oberflächen oder ressourcenhungrigen MongoDB-Instanzen. Vikunja ist der moderne Open-Source-Standard für persönliches und teamweites Projektmanagement: Es vereint eine schlanke Go-API mit einem reaktiven Vue 3 SPA-Frontend, bietet vier frei umschaltbare Ansichten (Liste, Kanban-Board, Gantt-Timeline und Tabelle), beherrscht Todoist-ähnliche Quick-Add-Syntax (*label +projekt @assignee morgen) und synchronisiert Aufgaben nativ per CalDAV mit mobilen Apps.

  • 4 Ansichten auf ein Datenmodell


    Wechsle jedes Projekt nahtlos zwischen Aufgabenliste, Kanban-Board (mit WIP-Limits), Gantt-Diagramm und Tabellenansicht.

  • Quick-Add Magic-Syntax


    Tippe Kernel-Patch deployen *dringend @nejat !3 morgen 09:00, um Labels, Priorität, Zuweisung und Frist in einem Durchgang zu setzen.

  • Natives CalDAV & API-Tokens


    Synchronisiere Aufgaben nativ mit Android (Tasks.org / DAVx⁵), iOS Erinnerungen und Thunderbird über integrierte CalDAV-Endpunkte.

  • Einheitlicher Single-Container


    Seit Vikunja v0.21+ werden Go-Backend und Vue 3-Frontend in einem einzigen Container ausgeliefert, der < 45 MB RAM benötigt.


1. Vikunja Unified-Architektur

In älteren Versionen (vor 0.21) benötigte Vikunja getrennte Container für api und frontend, verbunden über einen internen Nginx-Proxy. Das moderne Vikunja bettet das kompilierte Vue 3-Frontend direkt in die Go-Binary auf Port 3456 ein:

%%{init: {'flowchart': {'wrappingWidth': 350}}}%%
flowchart TB
    CLI["🌐 Web- & CalDAV-Clients<br/>(Vue 3 SPA & Mobil)"]
    PROXY["🔒 Reverse Proxy<br/>tasks.nejat-hakan.de<br/>(TLS 1.3)"]
    VIK["🚀 Vikunja Unified (Go)<br/>127.0.0.1:3456<br/>(API + CalDAV + UI)"]
    PG["🗄️ PostgreSQL 17<br/>Aufgaben & Kanban ACLs"]

    CLI <--> PROXY
    PROXY <--> VIK
    VIK <--> PG

2. Produktives compose.yaml (Vikunja + PostgreSQL 17)

Bereite das Dateiverzeichnis für Anhänge mit UID 1000-Berechtigungen vor (Vikunja läuft im Container standardmäßig rootless als UID 1000) und starte den Stack mit PostgreSQL 17:

# Datei: /opt/vikunja-ops/01_prepare_dirs.sh
sudo mkdir -p /srv/containers/vikunja/{files,postgres}
sudo chown -R 1000:1000 /srv/containers/vikunja/files
# Datei: /srv/containers/vikunja/compose.yaml
services:
  vikunja:
    image: docker.io/vikunja/vikunja:latest
    container_name: vikunja
    depends_on:
      vikunja-db:
        condition: service_healthy
    restart: unless-stopped
    ports:
      - "127.0.0.1:3456:3456/tcp"
    environment:
      VIKUNJA_SERVICE_PUBLICURL: "https://tasks.nejat-hakan.de/"
      VIKUNJA_SERVICE_TIMEZONE: "Europe/Berlin"
      # Öffentliche Registrierung nach Anlegen der Team-Accounts schließen!
      VIKUNJA_SERVICE_ENABLEREGISTRATION: "false"
      VIKUNJA_SERVICE_JWTTTL: "2592000"
      # Datenbank-Verbindung
      VIKUNJA_DATABASE_TYPE: "postgres"
      VIKUNJA_DATABASE_HOST: "vikunja-db"
      VIKUNJA_DATABASE_USER: "vikunja"
      VIKUNJA_DATABASE_PASSWORD: "${VIKUNJA_DB_PASSWORD}"
      VIKUNJA_DATABASE_DATABASE: "vikunja"
    volumes:
      - /srv/containers/vikunja/files:/app/vikunja/files:rw

  vikunja-db:
    image: docker.io/library/postgres:17-bookworm
    container_name: vikunja-db
    restart: unless-stopped
    environment:
      POSTGRES_USER: "vikunja"
      POSTGRES_PASSWORD: "${VIKUNJA_DB_PASSWORD}"
      POSTGRES_DB: "vikunja"
    volumes:
      - /srv/containers/vikunja/postgres:/var/lib/postgresql/data:rw
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U vikunja -d vikunja"]
      interval: 10s
      timeout: 5s
      retries: 5

3. Benutzer per CLI anlegen (bei geschlossener öffentlicher Registrierung)

Da wir VIKUNJA_SERVICE_ENABLEREGISTRATION: "false" gesetzt haben, um unerwünschte Anmeldungen aus dem Internet zu verhindern, legst du Benutzerkonten sauber über die CLI im Container an:

# Datei: /opt/vikunja-ops/02_create_admin_user.sh
docker exec -it vikunja /app/vikunja/vikunja user create \
    --username nejat \
    --email nejat.hakan@googlemail.com \
    --password "Sicheres_Initial_Passwort_2026!"

Nächste Schritte & Empfehlungen

Integriere Vikunja in deine umfassende kollaborative Plattform:

  • Joplin E2EE Notizenserver


    Verknüpfe Vikunja-Aufgaben direkt mit verschlüsselten Architekturdokumenten in Joplin.

    Joplin Leitfaden

  • Forgejo Selbstgehosteter Git-Server


    Verwalte Code-Repositories, Pull Requests und CI/CD-Pipelines parallel zu deinen Projekt-Boards.

    Forgejo Leitfaden

  • Mattermost Team-Chat


    Sende automatisierte Webhook-Benachrichtigungen aus Vikunja in deine DevOps-Chat-Kanäle.

    Mattermost Leitfaden