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

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

Outline: Wissen im Team. Dokumente teilen, Echtzeit-Kollaboration, SSO mit Keycloak. Illustration mit Laptop und NAS.

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

ParameterWert
Docker-Image (empfohlen)docker.getoutline.com/outlinewiki/outline:latest
Aktueller Stable-Tag1.12.0 (Stand 24.10.2026), für Produktion festschreiben: outlinewiki/outline:1.12.0
Architekturlinux/amd64, linux/arm64
Image-Größeca. 300 MB komprimiert
Interner Port3000 (Web-UI)
Externer Port (Empfehlung)4997 → 3000
Pflicht-AbhängigkeitenPostgreSQL ≥ 12, Redis ≥ 4
RAM (Minimum/Empfehlung)512 MB / 1 GB+
LizenzBSL 1.1, Selbsthosting für interne Nutzung kostenlos
Volume (Host)Container-PfadZweck
/volume1/docker/outline/data/var/lib/outline/dataUploads und Dateianhänge (Pflicht!)
/volume1/docker/outline/db/var/lib/postgresql/dataPostgreSQL-Datenbankdateien
/volume1/docker/outline/redis/dataRedis-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.
  • URL mit 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 data gehört nicht UID 1001. Führen Sie sudo chown -R 1001:1001 /volume1/docker/outline/data aus und starten Sie outline neu.
  • 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/data ist nicht eingebunden. Prüfen Sie den Volume-Eintrag und den Host-Pfad.
  • Alle Nutzer abgemeldet nach Konfigurationsänderung: SECRET_KEY oder UTILS_SECRET wurden 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

Offizielle Quellen: Outline Docker-Hosting-Dokumentation · Outline GitHub Repository · Outline .env.sample (alle Umgebungsvariablen)