Vikunja als Aufgabenverwaltung mit Docker installieren¶
Veröffentlicht am 7. August 2026 · Geschätzte Lesezeit: 5 Minuten
Vikunja verwaltet persönliche Aufgaben und gemeinsame Projekte in Listen, Tabellen oder Kanban-Boards. Anwendung, Anhänge und PostgreSQL-Datenbank laufen auf deinem eigenen Server. Für Installation und ersten Funktionstest brauchst du ungefähr 25 bis 35 Minuten.
Voraussetzungen
- Ein Linux-Server mit Docker und Docker Compose
- Eine feste IP-Adresse oder DHCP-Reservierung für den Server
- Port 3456 im lokalen Netz frei
opensslund ein Benutzer mitsudo-Rechten
1. Arbeitsordner anlegen¶
Erstelle Ordner für Compose-Datei, Anhänge, Datenbank und Sicherungen:
Vikunja läuft im Container standardmäßig mit der Benutzer-ID 1000. Gib ihm Schreibrechte auf den Anhangsordner:
Übergib die übrigen Arbeitsdateien deinem Linux-Benutzer. Ersetze <benutzer> durch
deinen Benutzernamen:
Wechsle in den Arbeitsordner:
2. Zufällige Geheimnisse erzeugen¶
Der folgende Befehl erzeugt ein Datenbankpasswort und einen separaten geheimen
Anwendungsschlüssel. Beide werden direkt in die Datei .env geschrieben und nicht
auf dem Bildschirm angezeigt:
printf 'VIKUNJA_DB_PASSWORD=%s\nVIKUNJA_SERVICE_SECRET=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
Schütze die Datei vor anderen lokalen Benutzern:
Prüfe nur die Namen der beiden gesetzten Variablen:
Datei nicht veröffentlichen
.env enthält das Datenbankpasswort und den Signaturschlüssel. Veröffentliche
sie niemals und nimm sie nur verschlüsselt in deine Sicherung auf.
3. Compose-Datei erstellen¶
Lege unter /opt/vikunja die Datei compose.yaml mit folgendem Inhalt an. Ersetze
<server-ip> durch die feste IP-Adresse deines Servers, zum Beispiel
192.168.178.20:
services:
vikunja:
image: vikunja/vikunja:latest
container_name: vikunja
restart: unless-stopped
environment:
VIKUNJA_SERVICE_PUBLICURL: http://<server-ip>:3456/
VIKUNJA_SERVICE_SECRET: ${VIKUNJA_SERVICE_SECRET}
VIKUNJA_DATABASE_HOST: db
VIKUNJA_DATABASE_PASSWORD: ${VIKUNJA_DB_PASSWORD}
VIKUNJA_DATABASE_TYPE: postgres
VIKUNJA_DATABASE_USER: vikunja
VIKUNJA_DATABASE_DATABASE: vikunja
ports:
- "<server-ip>:3456:3456"
volumes:
- ./files:/app/vikunja/files
depends_on:
db:
condition: service_healthy
db:
image: postgres:18
container_name: vikunja-db
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${VIKUNJA_DB_PASSWORD}
POSTGRES_USER: vikunja
POSTGRES_DB: vikunja
volumes:
- ./db:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -h localhost -U $$POSTGRES_USER"]
interval: 2s
start_period: 30s
Die Datenbank ist nicht nach außen freigegeben. Der Eintrag
VIKUNJA_SERVICE_PUBLICURL muss genau zu der Adresse passen, die du im Browser
verwendest; sonst kann die Registrierung mit unauthorized scheitern.
4. Container starten¶
Starte Vikunja und PostgreSQL im Hintergrund:
Prüfe, ob die Datenbank gesund und Vikunja gestartet ist:
Bei Problemen zeigen die Protokolle die Ursache:
Keine Shell im Vikunja-Container
Das offizielle Vikunja-Image enthält keine interaktive Shell. Ein Befehl wie
docker exec -it vikunja sh funktioniert deshalb nicht. Verwende zur Fehlersuche
docker compose logs.
5. Konto und erstes Projekt anlegen¶
Öffne die Oberfläche im Browser:
Ersetze <server-ip> durch die Adresse aus der Compose-Datei. Registriere das erste
Konto mit einem langen, einzigartigen Passwort. Lege anschließend ein Projekt namens
Test und darin eine Aufgabe mit Fälligkeitsdatum an.
Zugriff aus dem Internet absichern
Leite Port 3456 nicht unverschlüsselt im Router weiter. Nutze außerhalb des Heimnetzes ein VPN oder einen HTTPS-Reverse-Proxy. Aktiviere bei öffentlich erreichbaren Installationen nach dem Anlegen aller Konten zusätzlich eine passende Registrierungsbeschränkung.
6. API-Funktion prüfen¶
Rufe im Browser die folgende Adresse auf:
Ersetze <server-ip> wieder durch die Server-IP. Erscheint eine JSON-Antwort mit
Versions- und Funktionsangaben, sind Oberfläche und API erreichbar.
7. Datenbank und Anhänge sichern¶
Erstelle zuerst im Arbeitsordner einen logischen PostgreSQL-Export. Der Befehl läuft im Datenbankcontainer und schreibt die Ausgabe auf den Host:
cd /opt/vikunja
docker compose exec -T db pg_dump -U vikunja vikunja > "backup/vikunja-$(date +%F).sql"
Packe Datenbankexport, Anhänge, Compose-Datei und Geheimnisse in ein Archiv:
Gelöschte Projekte sind endgültig weg
Vikunja besitzt für gelöschte Projekte keinen Papierkorb. Kopiere das Archiv regelmäßig auf ein zweites Speichermedium und teste die Wiederherstellung.
Für einen sicheren Rückweg stoppst du den Stack, benennst /opt/vikunja um und
richtest eine leere Installation mit derselben Konfiguration ein. Kopiere files
zurück und spiele den SQL-Export nur in eine leere Datenbank ein:
Ersetze <vikunja-backup.sql> durch den vollständigen Pfad zum entpackten
SQL-Export. Überschreibe keine produktive Datenbank ohne zusätzliche Sicherung.
8. Vikunja aktualisieren¶
Erstelle zuerst eine Sicherung. Lade danach im Arbeitsordner die aktuellen Images:
Erstelle die Container neu; die Daten in db und files bleiben erhalten:
Prüfe anschließend Status und Protokoll:
9. Typische Fehler beheben¶
Bei unauthorized während der Registrierung kontrollierst du die öffentliche URL:
Sie muss einschließlich Port und abschließendem Schrägstrich zur Browseradresse
passen. Scheitert ein Anhang mit permission denied, korrigiere den Besitz:
Ist die Datenbank noch nicht bereit, warte kurz und prüfe beide Protokolle:
Bei address already in use ist Port 3456 belegt. Ändere sowohl die linke
Portnummer im Port-Mapping als auch den Port in VIKUNJA_SERVICE_PUBLICURL auf
denselben freien Wert.
10. Quellen und Video¶
- Offizielle Vikunja-Docker-Anleitung
- Offizielle Hinweise zur Sicherung
- Vikunja mit Docker – deutschsprachiges Video
Fertig¶
Vikunja läuft jetzt mit PostgreSQL und speichert Anhänge dauerhaft unter
/opt/vikunja/files. Öffne deine Testaufgabe, hänge eine kleine Datei an und starte
die Container neu. Sind Aufgabe und Anhang danach noch vorhanden, funktioniert die
Grundinstallation.