Outline auf dem Synology NAS installieren: modernes Team-Wiki als Notion-Alternative
Outline als Team-Wiki auf dem Synology NAS: Compose-Stack mit PostgreSQL, Redis und Keycloak-OIDC für Echtzeit-Kollaboration, verschachtelte Dokumente und SSO ohne Cloud-Abhängigkeit, eingerichtet in etwa 45 Minuten.
Geprüft am 24.10.2026 · für Outline 1.12.0
WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Wer im Team strukturiertes Wissen aufbauen und pflegen möchte, ohne Notion oder Confluence in der Cloud zu nutzen, findet in Outline eine starke Alternative. Das Open-Source-Wiki auf Basis von React und Node.js bietet Echtzeit-Kollaboration, verschachtelte Seiten, einen Markdown-Editor, Volltextsuche und fein abgestufte Zugriffsrechte, selbst gehostet auf dem eigenen Synology NAS. Der Unterschied zu klassischen Wikis wie BookStack: Statt einer festen Buch-Kapitel-Struktur gibt es frei verlinkbare, verschachtelte Dokumente im Notion-Stil, und statt eines eigenen Passwort-Logins setzt Outline auf einen externen Identity Provider wie Keycloak. Das passt zu Unternehmen, die Single Sign-on (SSO) betreiben oder planen.
Voraussetzungen
- Synology NAS mit 64-Bit-CPU: Intel/AMD (x86_64, z. B. DS923+, DS723+, DS1522+) oder ARM64. 32-Bit-ARM-Modelle unterstützt das offizielle Image nicht
- DSM 7.2 oder neuer mit installiertem Container Manager
- Mindestens 4 GB RAM im NAS, davon 2 GB für den Outline-Stack verfügbar
- Mindestens 10 GB freier Speicher auf dem NAS-Volume
- Eigene Domain mit gültigem TLS-Zertifikat (Let's Encrypt oder Wildcard) und eingerichtetem Synology Reverse Proxy
- Laufende Keycloak-Instanz mit konfiguriertem Realm, falls noch nicht vorhanden: Keycloak auf dem Synology NAS installieren
- SSH-Zugang zum NAS für Ordnerrechte und Secrets (Anleitung: SSH auf dem Synology NAS aktivieren und verbinden)
- Optional: SMTP-Zugangsdaten für E-Mail-Benachrichtigungen
Eckdaten auf einen Blick
| Parameter | Wert |
|---|---|
| Docker-Image (empfohlen) | docker.getoutline.com/outlinewiki/outline:latest |
| Aktueller Stable-Tag | 1.12.0 (Stand 24.10.2026), für Produktion festschreiben: outlinewiki/outline:1.12.0 |
| Architektur | linux/amd64, linux/arm64 |
| Image-Größe | ca. 300 MB komprimiert |
| Interner Port | 3000 (Web-UI) |
| Externer Port (Empfehlung) | 4997 → 3000 |
| Pflicht-Abhängigkeiten | PostgreSQL ≥ 12, Redis ≥ 4 |
| RAM (Minimum/Empfehlung) | 512 MB / 1 GB+ |
| Lizenz | BSL 1.1, Selbsthosting für interne Nutzung kostenlos |
| Volume (Host) | Container-Pfad | Zweck |
|---|---|---|
| /volume1/docker/outline/data | /var/lib/outline/data | Uploads und Dateianhänge (Pflicht!) |
| /volume1/docker/outline/db | /var/lib/postgresql/data | PostgreSQL-Datenbankdateien |
| /volume1/docker/outline/redis | /data | Redis-Persistenz |
Schritt 1: Keycloak-Client für Outline anlegen
Outline hat keine eigene Passwortverwaltung, ein externer Anmeldedienst ist Pflicht. Am saubersten läuft das über Keycloak mit OIDC. Melden Sie sich in der Keycloak-Admin-Konsole an und wechseln Sie in Ihren Realm (z. B. myrealm).
Legen Sie unter Clients → Create client einen neuen Client an:
- Client ID:
outline - Client type: OpenID Connect
- Client authentication: ON (der Client wird „confidential“ und erhält ein Secret)
- Root URL:
https://wiki.ihre-domain.tld - Valid Redirect URIs:
https://wiki.ihre-domain.tld/auth/oidc.callback - Web Origins:
https://wiki.ihre-domain.tld
Speichern Sie den Client und kopieren Sie im Reiter „Credentials“ das Client Secret, Sie benötigen es in der Compose-Datei. Die OIDC-Endpunkte Ihres Realms folgen diesem Muster:
https://keycloak.ihre-domain.tld/realms/myrealm/protocol/openid-connect/auth
https://keycloak.ihre-domain.tld/realms/myrealm/protocol/openid-connect/token
https://keycloak.ihre-domain.tld/realms/myrealm/protocol/openid-connect/userinfo
Verifizieren: Rufen Sie https://keycloak.ihre-domain.tld/realms/myrealm/.well-known/openid-configuration im Browser auf. Sie sehen ein JSON-Dokument mit authorization_endpoint, token_endpoint und userinfo_endpoint. Unter Clients ist outline gelistet.
Schritt 2: Ordnerstruktur anlegen und Secrets generieren
Allgemeine Hinweise zu Ordnern und Berechtigungen gibt Docker-Ordner und Berechtigungen auf dem Synology NAS. Verbinden Sie sich per SSH mit dem NAS und legen Sie die Ordner an:
sudo mkdir -p /volume1/docker/outline/data
sudo mkdir -p /volume1/docker/outline/db
sudo mkdir -p /volume1/docker/outline/redis
sudo chown 1001:1001 /volume1/docker/outline/data
Outline läuft im Container als Benutzer nodejs mit der UID 1001. Gehört ihm der Ordner data nicht, scheitern Uploads mit „Permission denied“. Datenbank- und Redis-Ordner richten die jeweiligen Container selbst ein.
Erzeugen Sie dann die beiden Pflicht-Secrets:
openssl rand -hex 32 # SECRET_KEY, Ausgabe notieren
openssl rand -hex 32 # UTILS_SECRET, zweiten Wert notieren
Beide Ausgaben sind 64 Zeichen lange Hex-Werte. Bewahren Sie sie sicher auf. Ändern Sie sie nach dem ersten Start, werden alle Sitzungen ungültig und verschlüsselt gespeicherte Daten in der Datenbank können unbrauchbar werden.
Ohne SSH-Zugang erzeugen Sie die Werte in PowerShell 7 mit einem kryptografischen Zufallsgenerator:
-join ((1..32) | ForEach-Object { '{0:x2}' -f [System.Security.Cryptography.RandomNumberGenerator]::GetInt32(256) })
Verifizieren: ls -ln /volume1/docker/outline zeigt für data den Eigentümer 1001. Beide Secrets sind genau 64 Zeichen lang:
echo -n "IHR_GENERIERTER_SECRET_KEY" | wc -c
# Erwartete Ausgabe: 64
Schritt 3: compose.yaml erstellen
Wie Sie ein Compose-Projekt im Container Manager anlegen, erklärt Container Manager auf dem Synology NAS: Docker-Compose-Projekt anlegen. Legen Sie ein Projekt „outline“ an und fügen Sie folgenden Inhalt ein. Ersetzen Sie alle Platzhalter durch Ihre Werte:
services:
outline:
image: docker.getoutline.com/outlinewiki/outline:latest
container_name: outline
restart: unless-stopped
ports:
- "4997:3000"
volumes:
- /volume1/docker/outline/data:/var/lib/outline/data
environment:
NODE_ENV: "production"
URL: "https://wiki.ihre-domain.tld"
SECRET_KEY: "ihr-64-zeichen-secret-key-hier-einfuegen"
UTILS_SECRET: "ihr-64-zeichen-utils-secret-hier-einfuegen"
DATABASE_URL: "postgresql://outlineuser:sicheresPasswort@outline-db:5432/outline"
REDIS_URL: "redis://outline-redis:6379"
FILE_STORAGE: "local"
FILE_STORAGE_LOCAL_ROOT_DIR: "/var/lib/outline/data"
FILE_STORAGE_UPLOAD_MAX_SIZE: "262144000"
OIDC_CLIENT_ID: "outline"
OIDC_CLIENT_SECRET: "ihr-keycloak-client-secret"
OIDC_AUTH_URI: "https://keycloak.ihre-domain.tld/realms/myrealm/protocol/openid-connect/auth"
OIDC_TOKEN_URI: "https://keycloak.ihre-domain.tld/realms/myrealm/protocol/openid-connect/token"
OIDC_USERINFO_URI: "https://keycloak.ihre-domain.tld/realms/myrealm/protocol/openid-connect/userinfo"
OIDC_USERNAME_CLAIM: "preferred_username"
OIDC_SCOPES: "openid profile email"
OIDC_DISPLAY_NAME: "Keycloak SSO"
SMTP_HOST: "smtp.example.com"
SMTP_PORT: "465"
SMTP_USERNAME: "user@example.com"
SMTP_PASSWORD: "smtp-passwort"
SMTP_FROM_EMAIL: "outline@example.com"
SMTP_SECURE: "true"
depends_on:
- outline-db
- outline-redis
networks:
- outline-net
outline-db:
image: postgres:16-alpine
container_name: outline-db
restart: unless-stopped
volumes:
- /volume1/docker/outline/db:/var/lib/postgresql/data
environment:
POSTGRES_USER: "outlineuser"
POSTGRES_PASSWORD: "sicheresPasswort"
POSTGRES_DB: "outline"
networks:
- outline-net
outline-redis:
image: redis:7-alpine
container_name: outline-redis
restart: unless-stopped
volumes:
- /volume1/docker/outline/redis:/data
networks:
- outline-net
networks:
outline-net:
driver: bridge
Hinweise zu den Werten: URL steht ohne abschließenden Schrägstrich, sonst entstehen beim OIDC-Rücksprung fehlerhafte Redirect-Adressen. Das Datenbankpasswort muss in DATABASE_URL und POSTGRES_PASSWORD identisch sein. postgres:16-alpine ist eine bewährte, noch mehrere Jahre unterstützte Hauptversion, Outline verlangt mindestens Version 12. FILE_STORAGE_UPLOAD_MAX_SIZE entspricht mit 250 MB dem Standard aus der offiziellen .env.sample. Die SMTP-Zeilen sind optional.
Verifizieren: Der Container Manager speichert die compose.yaml ohne Fehlerhinweis. Die Platzhalter für SECRET_KEY, UTILS_SECRET, OIDC_CLIENT_SECRET und das Datenbankpasswort sind durch eigene Werte ersetzt.
Schritt 4: Stack starten und Datenbank initialisieren
Starten Sie das Projekt im Container Manager. Zuerst starten outline-db und outline-redis, dann outline. Beim ersten Start legt PostgreSQL seine Dateien an. Outline kann dabei mit „Connection refused“ scheitern und neu starten, weil depends_on nur die Reihenfolge regelt, nicht die Bereitschaft der Datenbank. Dank restart: unless-stopped verbindet sich Outline beim nächsten Versuch. Die Datenbankmigrationen führt Outline beim Start automatisch aus.
Verfolgen Sie das Protokoll von outline im Container Manager. Nach erfolgreicher Initialisierung erscheint eine Zeile ähnlich:
Listening on http://localhost:3000 / https://wiki.ihre-domain.tld
Verifizieren: Das Protokoll enthält die Zeile „Listening on …“, der Container zeigt im Container Manager nach etwa einer Minute den Status „healthy“. Ein Aufruf von http://NAS-IP:4997 leitet auf HTTPS um, das ist gewollt (FORCE_HTTPS ist standardmäßig aktiv). Den Anmeldebildschirm prüfen Sie nach Schritt 5 über die Domain.
Schritt 5: Reverse Proxy mit WebSocket-Unterstützung einrichten
Outline erwartet HTTPS: URL beginnt mit https://, und viele OIDC-Provider lehnen HTTP-Callback-Adressen ab. Legen Sie unter Systemsteuerung → Anmeldeportal → Erweitert → Reverse Proxy einen Eintrag an:
- Quelle: HTTPS,
wiki.ihre-domain.tld, Port 443 - Ziel: HTTP,
localhost, Port 4997
Wechseln Sie im Eintrag zum Reiter Benutzerdefinierte Kopfzeile und wählen Sie Erstellen → WebSocket. DSM ergänzt dann die Header Upgrade und Connection. Ohne WebSocket funktioniert die Echtzeit-Kollaboration nicht, Nutzer sehen keine Änderungen anderer Bearbeiter.
Weisen Sie dem Eintrag unter Systemsteuerung → Sicherheit → Zertifikat ein gültiges Zertifikat für wiki.ihre-domain.tld zu oder erstellen Sie dort eines per Let's Encrypt.
Verifizieren: https://wiki.ihre-domain.tld lädt ohne Zertifikatswarnung den Outline-Anmeldebildschirm mit der Schaltfläche „Keycloak SSO“. In den Entwicklertools des Browsers erscheinen unter „Netzwerk“ nach der Anmeldung erfolgreiche wss://-Verbindungen.
Schritt 6: OIDC-Roundtrip testen und erste Anmeldung
Klicken Sie auf die Anmeldeschaltfläche. Sie werden zu Keycloak weitergeleitet. Melden Sie sich mit einem Benutzer aus Ihrem Realm an. Keycloak leitet zurück an Outline, das den Benutzer anlegt und die Startseite öffnet.
Der erste angemeldete Benutzer wird Administrator des Workspaces. Legen Sie unter Einstellungen → Workspace den Namen fest. Weitere Teammitglieder melden sich über Keycloak an und erscheinen automatisch in Outline.
Erstellen Sie ein Testdokument über „Neue Seite“. Öffnen zwei Personen das Dokument gleichzeitig, sehen beide die Cursor des anderen in Echtzeit.
Verifizieren: Nach der Anmeldung erscheint das Dashboard mit Ihrem Benutzernamen, unter Einstellungen → Mitglieder ist Ihr Konto als Administrator gelistet. Das Testdokument lässt sich speichern und über die Suche (Strg+K) wiederfinden.
Schritt 7: DSM-Firewall-Port freigeben
Nutzen Sie die DSM-Firewall, muss der Reverse Proxy Port 4997 intern erreichen können. Das Vorgehen beschreibt DSM-Firewall auf dem Synology NAS: Ports für Docker-Container freigeben. Aus dem Internet ist nur Port 443 des Reverse Proxy nötig, Port 4997 bleibt von außen gesperrt.
Verifizieren: https://wiki.ihre-domain.tld ist erreichbar, der direkte Zugriff auf Port 4997 aus einem externen Netz (z. B. Mobilfunk) wird geblockt.
Updates einspielen und Backups
Sichern Sie vor jedem Update die Datenbank per pg_dump:
sudo docker exec outline-db pg_dump -U outlineuser outline > /volume1/docker/outline/backup_$(date +%Y%m%d).sql
Führen Sie dann im Projektordner das Update aus:
docker compose pull
docker compose up -d
Die Migrationen laufen beim Start des neuen Containers automatisch. Im Test des Updates von 1.10.1 auf 1.11.0 spielte Outline beim Start die neuen Migrationen ein (unter anderem Icon und Farbe für Gruppen sowie ein Grund für archivierte oder gelöschte Dokumente), ein vorher in der Datenbank angelegter Marker blieb erhalten, der Container meldete healthy, die Anmeldeseite zeigte weiter die Schaltfläche „Keycloak SSO“, und die API wies Aufrufe ohne Anmeldung mit 401 ab. Das Update von 1.11.0 auf 1.12.0 am 24.10.2026 verlief genauso: Outline spielte drei neue Migrationen ein (unter anderem Besitzer für Sammlungen als Grundlage der neuen persönlichen Dokumente), der Marker blieb erhalten, der Container meldete healthy, die Anmeldeseite zeigte weiter „Keycloak SSO“, und die API antwortete ohne Anmeldung mit 401. 1.12.0 hebt Node im Image auf 26.12.1 und schließt damit laut Release Notes mehrere Sicherheitslücken; das Projekt empfiehlt ein zeitnahes Update. Neu ist ein persönlicher Bereich für private Dokumente je Benutzer, den Administratoren in den Einstellungen abschalten können. Für automatisierte Sicherungen mit Rotation eignet sich PostgreSQL-Backup automatisieren mit cron.
Troubleshooting / Typische Fehler
- Keine Anmeldeschaltfläche: Kein Anmeldedienst konfiguriert. Prüfen Sie, ob alle
OIDC_*-Variablen gesetzt sind. - „redirect_uri mismatch“ nach dem Keycloak-Login: Die Valid Redirect URI stimmt nicht exakt. Sie lautet
https://wiki.ihre-domain.tld/auth/oidc.callback, ohne abschließenden Schrägstrich. URLmit abschließendem Schrägstrich: führt zu fehlerhaften Redirect-Adressen. Immer ohne Schrägstrich am Ende eintragen.- Endlose Umleitung oder Zertifikatsfehler auf Port 4997: Outline leitet HTTP-Aufrufe auf HTTPS um. Rufen Sie Outline über die Domain am Reverse Proxy auf, nicht direkt über die NAS-IP.
- „Connection refused“ beim Start: PostgreSQL ist noch nicht bereit. Outline startet automatisch neu, prüfen Sie das Protokoll nach 60 Sekunden erneut.
- „Permission denied“ beim Upload: Der Ordner
datagehört nicht UID 1001. Führen Siesudo chown -R 1001:1001 /volume1/docker/outline/dataaus und starten Sieoutlineneu. - Echtzeit-Kollaboration funktioniert nicht: WebSocket-Header am Reverse Proxy fehlen. Eintrag bearbeiten → Benutzerdefinierte Kopfzeile → Erstellen → WebSocket.
- Anhänge nach Neustart verschwunden: Das Volume
/var/lib/outline/dataist nicht eingebunden. Prüfen Sie den Volume-Eintrag und den Host-Pfad. - Alle Nutzer abgemeldet nach Konfigurationsänderung:
SECRET_KEYoderUTILS_SECRETwurden geändert. Stellen Sie die ursprünglichen Werte wieder her.
Häufige Fragen
Kann ich mich ohne Keycloak oder OIDC einloggen?
Nein, Outline braucht einen externen Anmeldedienst. Neben OIDC (z. B. Keycloak) unterstützt es unter anderem Slack, Google, Microsoft Entra ID (Azure) und Discord. Die Variablen heißen dann z. B. GOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET oder SLACK_CLIENT_ID/SLACK_CLIENT_SECRET.
Wie unterscheidet sich Outline von BookStack und Docmost?
BookStack nutzt eine feste Hierarchie aus Buch, Kapitel und Seite mit eingebautem Passwort-Login, ideal für streng gegliederte Dokumentation. Docmost orientiert sich an Confluence und bringt Spaces und eine eigene Anmeldung mit. Outline setzt auf frei verlinkbare, verschachtelte Dokumente im Notion-Stil und ist auf SSO ausgelegt, passend für Teams mit bestehendem Identity Provider.
Funktioniert Outline auf einem Synology ARM-NAS?
Auf Modellen mit 64-Bit-ARM-CPU (ARM64) ja, das offizielle Image wird für linux/amd64 und linux/arm64 gebaut. Ältere Modelle mit 32-Bit-ARM-CPU werden nicht unterstützt. Welche CPU Ihr Modell hat, zeigt das Datenblatt von Synology.
Was macht die BSL-1.1-Lizenz in der Praxis?
Die Business Source License 1.1 erlaubt die Nutzung, untersagt aber einen „Document Service“: ein kommerzielles Angebot, das Dritten außerhalb Ihrer Beschäftigten und Auftragnehmer die Funktionen von Outline bereitstellt. Für den internen Betrieb im eigenen Unternehmen fallen keine Kosten an. Jede Version wird vier Jahre nach Veröffentlichung unter Apache 2.0 frei.
Wie häufig sollte ich Outline aktualisieren?
Outline wird aktiv gepflegt, ein Update-Rhythmus von 4 bis 8 Wochen ist sinnvoll. Für Produktivumgebungen schreiben Sie statt :latest einen Tag wie outlinewiki/outline:1.12.0 fest und spielen Updates bewusst mit vorherigem Datenbank-Backup ein.
Wie konfiguriere ich Keycloak für Outline im Detail?
Die Installation beschreibt Keycloak auf dem Synology NAS installieren. Für Outline zählen: Client mit „Client authentication“ (confidential), Redirect URI exakt auf /auth/oidc.callback und die drei OIDC-Endpunkte aus dem Well-Known-Dokument des Realms.
Fazit
Outline eignet sich für kleine Unternehmen, die Echtzeit-Kollaboration, SSO und eine Notion-ähnliche Oberfläche ohne Cloud-Abhängigkeit wollen. Der Stack mit PostgreSQL 16 und Redis 7 läuft auf Synology-NAS mit 64-Bit-CPU und DSM 7.2. Voraussetzung ist ein laufender OIDC-Provider, mit bestehendem Keycloak ist Outline in unter 45 Minuten eingerichtet. Zwei Regeln sind entscheidend: SECRET_KEY und UTILS_SECRET nach dem ersten Start nicht mehr ändern und WebSocket am Reverse Proxy aktivieren.
Weiterführende Anleitungen und Quellen
- Keycloak auf dem Synology NAS installieren: SSO und zentrale Logins mit OIDC und SAML: Voraussetzung für die OIDC-Anmeldung
- BookStack auf dem Synology NAS installieren: das Firmen-Wiki für IT-Dokumentation: Alternative mit fester Buch-Hierarchie und eigenem Login
- MySQL & PostgreSQL Backup automatisieren mit cron: mysqldump, pg_dump, Rotation und rclone-Cloud-Sync
Offizielle Quellen: Outline Docker-Hosting-Dokumentation · Outline GitHub Repository · Outline .env.sample (alle Umgebungsvariablen)


