HedgeDoc per Docker installieren und gemeinsam schreiben¶
Veröffentlicht am 22. August 2026 · Geschätzte Lesezeit: 4 Minuten
HedgeDoc ist ein gemeinsamer Markdown-Editor: Mehrere angemeldete Benutzer können Notizen gleichzeitig bearbeiten und Änderungen sofort sehen. Datenbank und Uploads bleiben in Docker-Volumes erhalten. Für die erste Einrichtung reichen etwa 20 Minuten.
Voraussetzungen
- Ein Linux-Server mit Docker und Docker Compose
- Eine feste IP-Adresse für den Server
- Der Port 3000 im Heimnetz frei
- Ein Browser und grundlegender Zugriff auf das Terminal des Servers
1. Arbeitsordner und geheime Werte anlegen¶
Erstelle auf dem Docker-Server einen Projektordner und wechsle hinein:
Der nächste Befehl erzeugt ein zufälliges Datenbankpasswort und ein dauerhaftes
Sitzungsgeheimnis. Ersetze <server-ip> durch die feste IP-Adresse des Servers,
zum Beispiel 192.168.1.20:
printf 'POSTGRES_PASSWORD=%s\nCMD_SESSION_SECRET=%s\nHEDGEDOC_DOMAIN=%s\n' "$(openssl rand -hex 24)" "$(openssl rand -hex 32)" '<server-ip>' > .env
Schütze die Datei vor anderen lokalen Benutzern:
Das Sitzungsgeheimnis muss bei Neustarts gleich bleiben. Sonst werden alle Benutzer abgemeldet.
2. Compose-Datei erstellen¶
Lege im Ordner ~/hedgedoc eine Datei namens compose.yaml mit folgendem Inhalt an:
services:
database:
image: postgres:17.7-alpine
container_name: hedgedoc-db
restart: unless-stopped
environment:
POSTGRES_USER: hedgedoc
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: hedgedoc
volumes:
- hedgedoc-db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U hedgedoc -d hedgedoc"]
interval: 10s
timeout: 5s
retries: 5
app:
image: quay.io/hedgedoc/hedgedoc:1.11.1
container_name: hedgedoc
restart: unless-stopped
depends_on:
database:
condition: service_healthy
ports:
- "3000:3000"
environment:
CMD_DB_URL: postgres://hedgedoc:${POSTGRES_PASSWORD}@database:5432/hedgedoc
CMD_DOMAIN: ${HEDGEDOC_DOMAIN}
CMD_URL_ADDPORT: "true"
CMD_PROTOCOL_USESSL: "false"
CMD_SESSION_SECRET: ${CMD_SESSION_SECRET}
CMD_ALLOW_ANONYMOUS: "false"
CMD_ALLOW_ANONYMOUS_EDITS: "false"
CMD_ALLOW_EMAIL_REGISTER: "true"
CMD_DEFAULT_PERMISSION: private
CMD_ENABLE_UPLOADS: registered
volumes:
- hedgedoc-uploads:/hedgedoc/public/uploads
volumes:
hedgedoc-db-data:
name: hedgedoc-db-data
hedgedoc-uploads:
name: hedgedoc-uploads
Die Versionsangaben entsprechen der aktuellen offiziellen Docker-Anleitung. Prüfe vor späteren Änderungen immer die HedgeDoc-Versionshinweise und die PostgreSQL-Migration.
3. HedgeDoc starten¶
Starte Datenbank und Anwendung auf dem Docker-Server:
Prüfe den Zustand beider Container:
Falls HedgeDoc nicht startet, zeigen die letzten Protokollzeilen meist den Grund:
4. Erstes Konto anlegen¶
Öffne http://<server-ip>:3000 im Browser und ersetze <server-ip> durch die IP
aus der .env-Datei. Registriere dein erstes Konto mit einem langen, einmaligen
Passwort. Lege alle weiteren benötigten Konten ebenfalls jetzt an.
Registrierung danach schließen
Solange CMD_ALLOW_EMAIL_REGISTER auf true steht, kann jeder mit Zugriff auf
die Seite ein Konto anlegen. Schließe die Registrierung nach der Einrichtung.
5. Registrierung schließen¶
Ändere in compose.yaml beim Dienst app genau diese Zeile:
Übernimm die Änderung anschließend auf dem Docker-Server:
Vorhandene Konten können sich weiterhin anmelden. Für einen neuen Benutzer kannst du die Registrierung kurz wieder aktivieren und danach erneut schließen.
6. Gemeinsame Notiz prüfen¶
Melde dich an und erstelle eine neue Notiz. Der Standardwert private verhindert,
dass sie automatisch öffentlich sichtbar wird. Öffne die Freigabeeinstellungen der
Notiz und wähle erst dann eine passende Berechtigung für die Zusammenarbeit.
Freigaben bewusst wählen
Verwende privat für persönliche Inhalte. Teile bearbeitbare Notizen nur mit den vorgesehenen Personen und prüfe den Link einmal in einem privaten Browserfenster.
7. Daten und Uploads sichern¶
Erstelle im Projektordner einen Datenbankexport. Der Befehl läuft auf dem Docker-Server und schreibt eine SQL-Datei mit Datum und Uhrzeit:
Stoppe die Anwendung kurz, bevor du hochgeladene Dateien sicherst:
Archiviere anschließend das Upload-Volume im aktuellen Ordner:
docker run --rm -v hedgedoc-uploads:/data:ro -v "$PWD:/backup" alpine sh -c 'tar czf /backup/hedgedoc-uploads-$(date +%F-%H%M).tar.gz -C /data .'
Starte HedgeDoc wieder:
Sichere SQL-Datei, Upload-Archiv, compose.yaml und die vertrauliche .env-Datei
verschlüsselt auf einem anderen Gerät. Entferne HedgeDoc im Notfall nur mit
docker compose down; die Option -v würde die Volumes löschen.
8. Zugriff über das Internet absichern¶
Für reinen Heimnetzbetrieb bleibt die gezeigte HTTP-Konfiguration ausreichend. Für
öffentlichen Zugriff brauchst du einen HTTPS-Reverse-Proxy mit WebSocket-Unterstützung
für /socket.io/. Passe dann die Domain ohne Protokoll an und ändere in compose.yaml:
Ersetze <hedgedoc-domain> beispielsweise durch notes.example.de. Leite diese
Domain im Reverse-Proxy an http://<server-ip>:3000 weiter und veröffentliche Port
3000 nicht zusätzlich direkt im Router.
9. Typische Fehler beheben¶
- Datenbank bleibt ungesund: Prüfe, ob
.envvorhanden ist und der WertPOSTGRES_PASSWORDnicht leer ist. - Anmeldung endet nach jedem Neustart: Kontrolliere, ob
CMD_SESSION_SECRETin der.env-Datei unverändert vorhanden ist. - Gemeinsames Schreiben aktualisiert sich nicht: Aktiviere im Reverse-Proxy die
Weiterleitung von WebSockets für
/socket.io/. - Bilder fehlen nach einer Wiederherstellung: Spiele neben dem SQL-Export auch das gesicherte Upload-Volume ein.
- Neue Registrierung nicht möglich: Aktiviere sie nur kurz für die Einrichtung des Kontos und schließe sie danach wieder.
10. Quellen und Videos¶
- Offizielle HedgeDoc-Docker-Anleitung
- Offizielle HedgeDoc-Konfiguration
- Offizielle Hinweise zum Reverse-Proxy
- Video: Deploying HedgeDoc with Docker
- Video-Reihe zu HedgeDoc
Fertig¶
HedgeDoc läuft nun mit geschlossener Registrierung, privaten Standardnotizen und dauerhaft gespeicherten Daten. Erstelle eine Testnotiz, melde dich mit einem zweiten Konto an und prüfe, ob freigegebene Änderungen in beiden Browserfenstern erscheinen.