Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Synology / NAS 11.09.2026 · 11 min Lesezeit

Vikunja auf dem Synology NAS installieren: Aufgaben und Projekte selbst verwalten

Vikunja ist die leichtgewichtige Open-Source-Alternative zu Todoist und Trello – mit Listen, Kanban, Gantt und CalDAV, selbst gehostet auf dem Synology NAS. Diese Anleitung zeigt die Installation als Docker-Compose-Projekt mit PostgreSQL und JWT-Secret.

Vikunja auf dem NAS: Aufgaben, Kanban, CalDAV. Illustration mit Laptop und Administrationsoberfläche. KI-generiert

Wer Aufgaben und Projekte im Team organisieren möchte, greift oft zu Todoist, Trello oder Asana – und gibt damit die Kontrolle über seine Daten ab. Vikunja schließt diese Lücke: Die selbst gehostete Aufgabenverwaltung bietet vier Ansichtsmodi (Liste, Kanban, Gantt, Kalender), Team-Sharing, CalDAV-Integration und eine offene REST-API – und läuft als schlanker Docker-Container auf deinem Synology NAS. Wer bereits eine vollwertige Projektmanagement-Suite sucht, findet mit OpenProject auf dem Synology NAS eine Alternative mit Zeiterfassung und Ressourcenplanung; für die meisten KMU-Teams und Einzelpersonen ist Vikunja jedoch der schnellere, leichtgewichtigere Einstieg mit voller Datenhoheit.

Voraussetzungen

  • Synology NAS mit x86_64-Prozessor (z. B. DS923+, DS723+, DS1522+, DS1821+) und DSM 7.2 oder neuer
  • Container Manager aus dem Synology Package Center installiert
  • Mindestens 512 MB freier RAM (empfohlen: 1 GB für Vikunja + PostgreSQL zusammen)
  • Mindestens 2 GB freier Speicherplatz auf /volume1
  • Eigene Domain oder Synology QuickConnect/DDNS mit aktivem HTTPS-Zertifikat (Let's Encrypt über DSM)
  • SSH-Zugriff auf das NAS für die Berechtigungsschritte (Anleitung: SSH auf dem Synology NAS aktivieren und verbinden)
  • Internet-Zugang für den Docker-Image-Pull

Schritt 1: Verzeichnisse anlegen und Berechtigungen setzen

Öffne die File Station in DSM und lege folgende Ordnerstruktur unter /volume1/docker/ an (Grundlagen dazu: Docker-Ordner und Berechtigungen auf dem Synology NAS):

/volume1/docker/vikunja/
├── data/      ← Dateianhänge, Projektbilder, Uploads
└── db/        ← PostgreSQL-Datenbankdaten

Das data-Verzeichnis muss dem internen Container-Benutzer mit UID 1000 gehören, damit Vikunja Dateien schreiben kann. Verbinde dich per SSH mit dem NAS und führe aus:

sudo chown -R 1000:1000 /volume1/docker/vikunja/data

Das db-Verzeichnis übernimmt PostgreSQL automatisch mit den richtigen Rechten (UID 999 im offiziellen Image); hier ist kein manuelles chown nötig.

Verifizieren: Prüfe die Berechtigungen:

ls -la /volume1/docker/vikunja/

Erwartete Ausgabe: data mit Owner 1000, db mit Owner root:

drwxr-xr-x  2 1000 1000  data
drwxr-xr-x  2 root root  db

Schritt 2: JWT-Secret generieren

Vikunja signiert alle Benutzer-Sessions mit einem geheimen Schlüssel (VIKUNJA_SERVICE_SECRET). Ist dieser Wert nicht fest gesetzt, generiert der Container bei jedem Neustart einen neuen Zufallswert – alle eingeloggten Benutzer werden sofort ausgeloggt. Generiere deshalb jetzt ein sicheres Secret über SSH auf dem NAS:

openssl rand -hex 32

Der Befehl gibt eine 64 Zeichen lange Hex-Zeichenkette aus. Kopiere diesen Wert – du trägst ihn im nächsten Schritt in die compose.yaml ein.

Wichtig: Der früher verwendete Variablenname VIKUNJA_SERVICE_JWTSECRET ist offiziell deprecated. Verwende ausschließlich VIKUNJA_SERVICE_SECRET, sonst kann es in neueren Versionen zu Problemen bei der Token-Validierung kommen.

Verifizieren: Die Ausgabe von openssl rand -hex 32 muss exakt 64 Zeichen lang sein. Prüfe das mit:

openssl rand -hex 32 | wc -c

Erwartetes Ergebnis: 65 (64 Zeichen + Zeilenumbruch).

Schritt 3: compose.yaml erstellen

Lege im Verzeichnis /volume1/docker/vikunja/ eine Datei namens compose.yaml an. Ersetze die Platzhalter durch deine tatsächlichen Werte:

ParameterWert (Beispiel)Hinweis
Imagevikunja/vikunja:2.3.0Stabile Version April 2026; gepinnter Tag für Produktion
Port3456:3456HTTP; wird per Reverse Proxy zu HTTPS
Datenbankpostgres:18Empfohlen für Mehrbenutzerbetrieb
data-Volume/volume1/docker/vikunja/data:/app/vikunja/filesAnhänge und Uploads; UID 1000 erforderlich
db-Volume/volume1/docker/vikunja/db:/var/lib/postgresqlDatenbankdaten
services:
  vikunja:
    image: vikunja/vikunja:2.3.0
    container_name: vikunja
    environment:
      VIKUNJA_SERVICE_PUBLICURL: "https://vikunja.meinedomain.synology.me"
      VIKUNJA_SERVICE_SECRET: "HIER_DEN_GENERIERTEN_64-ZEICHEN-STRING_EINTRAGEN"
      VIKUNJA_SERVICE_TIMEZONE: "Europe/Berlin"
      VIKUNJA_SERVICE_ENABLEREGISTRATION: "true"
      VIKUNJA_SERVICE_ENABLECALDAV: "true"
      VIKUNJA_DATABASE_TYPE: postgres
      VIKUNJA_DATABASE_HOST: db
      VIKUNJA_DATABASE_USER: vikunja
      VIKUNJA_DATABASE_PASSWORD: "sicheresDbPasswort"
      VIKUNJA_DATABASE_DATABASE: vikunja
    ports:
      - "3456:3456"
    volumes:
      - /volume1/docker/vikunja/data:/app/vikunja/files
    depends_on:
      db:
        condition: service_healthy
    restart: unless-stopped

  db:
    image: postgres:18
    container_name: vikunja-db
    environment:
      POSTGRES_USER: vikunja
      POSTGRES_PASSWORD: "sicheresDbPasswort"
      POSTGRES_DB: vikunja
    volumes:
      - /volume1/docker/vikunja/db:/var/lib/postgresql
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -h localhost -U $$POSTGRES_USER"]
      interval: 2s
      start_period: 30s

Beachte dabei folgende Punkte:

  • VIKUNJA_SERVICE_PUBLICURL: Die vollständige HTTPS-URL ohne abschließenden Schrägstrich. Ein Slash am Ende kann zu CORS-Fehlern führen.
  • VIKUNJA_SERVICE_TIMEZONE: Nur tz-Datenbank-Namen wie Europe/Berlin oder Europe/Vienna sind gültig. Werte wie UTC+2 oder GMT+2 funktionieren nicht und führen zu falschen Zeitstempeln.
  • depends_on mit healthcheck: Stellt sicher, dass Vikunja erst startet, wenn PostgreSQL bereit ist. Nie weglassen.
  • POSTGRES_PASSWORD und VIKUNJA_DATABASE_PASSWORD müssen identisch sein.

Verifizieren: Öffne die Datei nach dem Speichern nochmals und prüfe, ob alle Umgebungsvariablen korrekt eingetragen sind und kein Platzhalter-Text mehr vorhanden ist. Eine falsche YAML-Einrückung verhindert den Start – jede Zeile unter environment: muss mit genau zwei weiteren Leerzeichen eingerückt sein.

Schritt 4: Container-Projekt im Container Manager starten

Öffne den Container Manager in DSM und lege ein neues Compose-Projekt an (Schritt für Schritt: Container Manager: Docker-Compose-Projekt anlegen, starten und aktualisieren). Wichtig: Wähle „Projekt" und nicht „Container" – nur als Projekt werden beide Services im selben Docker-Netzwerk gestartet, damit der vikunja-Container den db-Service per Hostname erreichen kann.

Gib als Projektpfad /volume1/docker/vikunja an und importiere die compose.yaml. Container Manager lädt dann automatisch die Images vikunja/vikunja:2.3.0 und postgres:18 aus dem Docker Hub und startet beide Container.

Verifizieren: Im Container Manager sollten nach wenigen Minuten beide Container den Status „Wird ausgeführt" zeigen. Prüfe die Logs des vikunja-Containers auf:

Starting Vikunja on port 3456

Erscheinen Fehler wie dial tcp: connection refused, hat PostgreSQL noch nicht geantwortet – warte 30 Sekunden und schau erneut. Der Healthcheck-Mechanismus fängt das in aller Regel automatisch ab.

Schritt 5: Reverse Proxy und HTTPS einrichten

Damit du Vikunja über deine Domain per HTTPS erreichst, richtest du in DSM einen Reverse Proxy ein. Gehe zu Systemsteuerung → Anmeldeportal → Erweitert → Reverse Proxy und lege eine neue Regel an:

  • Quelle: HTTPS, deine Domain (z. B. vikunja.meinedomain.synology.me), Port 443
  • Ziel: HTTP, localhost, Port 3456

Aktiviere unter „Benutzerdefinierter Header" die WebSocket-Unterstützung oder trage folgende Header manuell ein, damit Vikunjas Echtzeit-Updates funktionieren:

Upgrade: $http_upgrade
Connection: upgrade

Für die DSM-Firewall musst du Port 3456 nur dann öffnen, wenn du direkt (ohne Reverse Proxy) auf Vikunja zugreifen willst. Bei Nutzung des Reverse Proxys reicht Port 443. Details: DSM-Firewall auf dem Synology NAS: Ports für Docker-Container freigeben.

Verifizieren: Rufe https://vikunja.meinedomain.synology.me im Browser auf. Du solltest die Vikunja-Anmeldeseite sehen. Ein gültiges HTTPS-Zertifikat ohne Browser-Warndialog bestätigt, dass der Reverse Proxy korrekt konfiguriert ist.

Schritt 6: Ersten Benutzer registrieren und Registrierung sperren

Bei Vikunja gibt es keinen vordefinierten Admin-Account: Der erste registrierte Benutzer wird automatisch Administrator. Klicke auf der Anmeldeseite auf „Registrieren" und lege deinen Admin-Account an. Danach können sich bei Bedarf alle Teammitglieder selbst registrieren – lasse dafür VIKUNJA_SERVICE_ENABLEREGISTRATION: "true" temporär aktiv.

Sobald alle gewünschten Benutzer angelegt sind, setze in der compose.yaml die Variable auf "false" und starte den Container im Container Manager neu (Projekt → Stoppen → Starten). Das verhindert, dass sich unbekannte Personen selbst einen Account erstellen.

Für Team-Einladungen ohne offene Registrierung kannst du alternativ den SMTP-Mailer konfigurieren: Trage dazu VIKUNJA_MAILER_ENABLED: "true" und die passenden VIKUNJA_MAILER_*-Variablen (Host, Port, Absender) in die compose.yaml ein.

Verifizieren: Melde dich mit dem gerade angelegten Account an. Unter Einstellungen → Allgemein siehst du die Versionsnummer (sollte 2.3.0 lauten) und kannst bestätigen, dass der Login funktioniert.

Schritt 7: Erstes Projekt und Kanban-Board einrichten

Nach dem Login landest du auf der Übersicht. Lege über das „+"-Symbol ein neues Projekt an. In der Projektansicht kannst du oben rechts zwischen den vier Ansichtsmodi wechseln:

  • Liste: klassische Aufgabenliste mit Fälligkeitsdaten und Prioritäten
  • Kanban: Spalten nach Status (z. B. „Offen", „In Arbeit", „Erledigt")
  • Gantt: Zeitplan-Ansicht für Projekte mit Abhängigkeiten
  • Kalender: Aufgaben als Kalendereinträge nach Fälligkeitsdatum

Für Teams: Klicke im Projekt auf „Teilen" und lade andere Benutzer mit den Rechten „Lesen", „Schreiben" oder „Admin" ein. So lässt sich Vikunja als zentrales Aufgaben-Tool für kleine Teams nutzen – ohne dass Daten das eigene Netzwerk verlassen. Vikunja unterstützt seit v2.3.0 außerdem Plugins, mit denen sich die Funktionalität ohne eigenen Fork erweitern lässt. Wer Ressourcenplanung, Zeiterfassung und Budgetverwaltung benötigt, sollte einen Blick auf OpenProject auf dem Synology NAS werfen – das richtet sich an größere Teams mit komplexeren Anforderungen.

Verifizieren: Erstelle im Kanban-Board eine Testaufgabe, verschiebe sie von „Offen" in „In Arbeit" und prüfe, ob die Änderung nach einem Browser-Reload erhalten bleibt. Das bestätigt, dass die Datenbankverbindung zu PostgreSQL stabil funktioniert.

Schritt 8: CalDAV-Abonnement im Kalender einrichten

Vikunja ist standardmäßig als CalDAV-Server aktiv. Aufgaben mit Fälligkeitsdaten können so in Apple Kalender, Thunderbird oder iOS/Android-Kalender-Apps als Einträge angezeigt werden – ohne zusätzliche Konfiguration am Server.

Die CalDAV-Adresse lautet:

https://vikunja.meinedomain.synology.me/dav/

So richtest du das Abonnement ein:

  • Apple Kalender (macOS): Kalender → Einstellungen → Accounts → Account hinzufügen → Anderen CalDAV-Account hinzufügen. Server-URL, Vikunja-Benutzername und Passwort eingeben.
  • iOS: Einstellungen → Kalender → Accounts → Account hinzufügen → Sonstige → CalDAV-Account hinzufügen.
  • Thunderbird: Im Kalender „Neuer Kalender" → „Im Netzwerk" → CalDAV, dann die obige URL eingeben.

Möchtest du CalDAV deaktivieren, setze VIKUNJA_SERVICE_ENABLECALDAV: "false" in der compose.yaml und starte den Container neu. Wer Vikunja mit einem Terminbuchungs-Tool kombinieren möchte, findet mit Cal.com auf dem Synology NAS eine selbst gehostete Calendly-Alternative, die CalDAV-fähig ist.

Verifizieren: Füge den CalDAV-Account im Kalender-Client hinzu. Erstelle in Vikunja eine Aufgabe mit Fälligkeitsdatum und warte 1–2 Minuten. Der Eintrag sollte im Kalender-Client erscheinen. Fehlt er, prüfe ob VIKUNJA_SERVICE_ENABLECALDAV: "true" gesetzt ist und der Reverse Proxy CalDAV-Requests korrekt weiterleitet.

Troubleshooting / Typische Fehler

  • „Session nach Neustart ungültig" / alle Benutzer ausgeloggt: VIKUNJA_SERVICE_SECRET ist nicht gesetzt oder leer. Lösung: In der compose.yaml einen festen 64-Zeichen-Zufallsstring eintragen (openssl rand -hex 32) und den Container neu erstellen.
  • Zeitstempel um Stunden verschoben: Ursache ist ein UTC/GMT-Offset-Format wie UTC+2. Korrekt ist ein tz-Datenbank-Name wie Europe/Berlin. Compose-Datei anpassen, Container neu starten.
  • CORS-Fehler im Browser: VIKUNJA_SERVICE_PUBLICURL hat einen abschließenden Schrägstrich. Die URL muss ohne Slash enden: https://vikunja.domain.com.
  • „Permission denied" beim Hochladen von Anhängen: Das data-Verzeichnis gehört nicht UID 1000. Lösung: sudo chown -R 1000:1000 /volume1/docker/vikunja/data.
  • „connection refused" beim Vikunja-Start: PostgreSQL war noch nicht bereit. Der depends_on-Block mit condition: service_healthy und dem pg_isready-Healthcheck löst das in aller Regel automatisch. Prüfe, ob du diesen Block nicht entfernt hast.
  • Login schlägt fehl / Token-Fehler: Alter Variablenname VIKUNJA_SERVICE_JWTSECRET statt VIKUNJA_SERVICE_SECRET verwendet. Variable umbenennen, Container neu erstellen.
  • Vikunja-Container kann „db" nicht erreichen: Das Compose-Projekt wurde als Einzelcontainer statt als „Projekt" angelegt. Im Container Manager als neues Projekt neu importieren.
  • Echtzeit-Updates funktionieren nicht: WebSocket-Header fehlen im Reverse Proxy. Upgrade: $http_upgrade und Connection: upgrade unter „Benutzerdefinierter Header" ergänzen.
  • PostgreSQL startet nicht / „data directory has wrong ownership": Lösung: sudo chown -R 999:999 /volume1/docker/vikunja/db (UID 999 ist der postgres-User im offiziellen Image).

Häufige Fragen

Wie generiere ich ein sicheres VIKUNJA_SERVICE_SECRET?

Per SSH auf dem Synology NAS: openssl rand -hex 32 erzeugt einen 64 Zeichen langen Hex-String. Den Wert trägst du in der compose.yaml bei VIKUNJA_SERVICE_SECRET ein und startest den Container danach neu. Alternativ kannst du in einem Passwort-Manager einen langen Zufallsstring generieren.

Wie abonniere ich Vikunja-Aufgaben per CalDAV im Kalender?

CalDAV ist standardmäßig aktiv. Die Server-Adresse lautet https://deine-vikunja-domain.tld/dav/. In Apple Kalender, iOS, Thunderbird oder Android-Kalender-Apps fügst du einen neuen CalDAV-Account mit dieser URL sowie deinem Vikunja-Benutzernamen und Passwort hinzu. Aufgaben mit Fälligkeitsdatum erscheinen dann automatisch als Kalendereinträge.

Was ist der Unterschied zwischen Vikunja und OpenProject?

Vikunja ist auf schnelle, unkomplizierte Aufgabenverwaltung ausgerichtet: geringe Systemanforderungen, einfache Einrichtung, vier Ansichtsmodi und CalDAV – ideal für kleine Teams als Todoist- oder Trello-Ersatz. OpenProject hingegen ist eine vollwertige Projektmanagement-Suite mit Gantt-Diagrammen, Zeiterfassung, Ressourcenplanung und Budgetverwaltung – für Teams mit komplexen Anforderungen und höherem Administrations-Aufwand.

Wie lade ich Teammitglieder ein?

Ohne konfigurierten Mailer gibt es keine E-Mail-Einladung. Der einfachste Weg: Lasse VIKUNJA_SERVICE_ENABLEREGISTRATION: "true" solange aktiv, bis sich alle Teammitglieder selbst registriert haben. Danach auf "false" setzen und den Container neu starten. Alternativ kannst du über die VIKUNJA_MAILER_*-Variablen (z. B. Gmail-SMTP-Relay) E-Mail-Einladungen aktivieren.

Wie aktualisiere ich Vikunja auf eine neue Version?

Erstelle zuerst ein Backup der Verzeichnisse /volume1/docker/vikunja/data und /volume1/docker/vikunja/db. Ändere dann in der compose.yaml den Image-Tag (z. B. von 2.3.0 auf 2.4.0) und klicke im Container Manager auf „Projekt aktualisieren". Vikunja führt Datenbank-Migrationen automatisch beim Start durch.

Kann ich von SQLite auf PostgreSQL migrieren?

Ja – Vikunja bietet einen eingebauten Migrations-Befehl. Details dazu findest du in der offiziellen Dokumentation unter „Migrating to a new database backend". Für Neuinstallationen empfiehlt es sich, direkt mit PostgreSQL zu starten, da SQLite für den Mehrbenutzerbetrieb nicht geeignet ist.

Fazit

Vikunja ist in etwa 35 Minuten auf dem Synology NAS einsatzbereit – als schlanker, leistungsfähiger Ersatz für Todoist, Trello und ähnliche Cloud-Dienste. Das Compose-Projekt mit PostgreSQL und festem JWT-Secret bildet eine stabile Grundlage für den Dauerbetrieb; CalDAV und die vier Ansichtsmodi decken die Bedürfnisse kleiner Teams vollständig ab. Wer mehr als Aufgabenverwaltung braucht – etwa Zeiterfassung oder Ressourcenplanung – sollte die schwergewichtigere Alternative OpenProject in Betracht ziehen. Für alle anderen ist Vikunja die erste Wahl, wenn Datenhoheit und einfache Handhabung im Vordergrund stehen.

Weiterführende Anleitungen und Quellen

Offizielle Quellen: Vikunja Dokumentation – Full Docker Example | Vikunja Konfigurationsoptionen (Umgebungsvariablen) | Vikunja auf GitHub