Artikel-Serie: Joplin Notes - Joplin Server auf Docker-Basis installieren und einrichten

  Oliver Pifferi   Lesezeit: 7 Minuten  🗪 7 Kommentare Auf Mastodon ansehen

Ein kleines Tutorial für all diejenigen, die mehr aus Joplin herausholen und ihren eigenen Joplin Server auf Docker hosten möchten. Ein funktionierender Reverse Proxy wird vorausgesetzt.

artikel-serie: joplin notes - joplin server auf docker-basis installieren und einrichten

Eine Übersicht aller bisher erschienenen Artikel findet Ihr im ersten Artikel: Inhaltsverzeichnis


Eine Information vorab:

Eigentlich wäre es im dritten Artikel der Serie um die Grundfunktionen gegangen. Aber dann kam Oliver um die Ecke und hat uns mit diesem tollen Artikel überrascht. Da er thematisch zum zweiten Artikel »Installation« passt, schieben wir ihn ein. Im nächsten Artikel wird es dann um die Grundfunktionen gehen, damit alle, die mit Joplin neu starten, endlich beginnen können.

An alle Linux- und IT-Neulinge: Der Artikel von Oliver richtet sich eher an die fortgeschrittenen Nutzer. Wenn Ihr gerade erst startet, schaut Euch den zweiten Artikel (siehe oben) an und nehmt eine einfachere Variante zum Betrieb von Joplin Notes.

Vielen Dank an Oliver für diesen Artikel! Wir hoffen auf Nachahmende. Eine Artikel-Einreichung geht ganz unkompliziert über unser Artikel-Formular


Die Nutzung unserer Daten auf jedem Gerät ist heutzutage Standard. Die Kontrolle darüber, wo diese Daten gespeichert werden, ist eine andere Sache – in Bezug auf Joplin kannst Du neben WebDAV auch andere Plattformen verwenden, um Deine Daten zu synchronisieren: Eine davon ist der Joplin Server, der recht einfach zu implementieren ist, sofern man sich der Hilfe von Docker bedienen kann.

Joplin ist eine kostenlose Open-Source-Anwendung für die Erstellung von Notizen und die Verwaltung von Aufgaben, die eine große Anzahl von in Notizbüchern organisierten Notizen verarbeiten kann. Die Notizen sind durchsuchbar, können kopiert, getaggt und verändert werden – entweder direkt aus der Anwendung oder aus Deinem eigenen Texteditor heraus. Die Notizen werden im Markdown-Format abgelegt und Clients für alle modernen Betriebssysteme (Desktop und Mobile) sind entsprechend verfügbar.

Während Joplin die Synchronisierung von Notebooks und Daten mit verschiedenen privaten und öffentlichen Cloud-Diensten und (natürlich) der eigenen Joplin Cloud vereinfacht, ist es auch möglich, mit ein wenig Hilfe von Docker einen eigenen Sync-Server zu hosten. Auch wenn sich die Verbindung dazu offiziell noch in der Beta-Phase befindet, möchte ich Dir in diesem Tutorial zeigen, wie Du Deinen eigenen Joplin-Server im Handumdrehen einrichten kannst. Im vorliegenden Anwendungsfall hoste ich einen kleinen Debian-basierten VPS zu Hause (und setze damit den allgemeinen #selfhosted-Trend fort) und verwende den Nginx Proxy Manager (NPM), um das Reverse Proxying und die Ausstellung des gewünschten SSL-Zertifikats zu übernehmen. Alles, was Du noch zusätzlich benötigst, ist eine Domain oder Subdomain und die offenen Ports 80/tcp und 443/tcp, die ordnungsgemäß an die interne IP des Reverse Proxys weitergeleitet werden.

Die Serverinstallation

Nachdem wir unsere bevorzugte Linux-Distribution installiert haben, um die Grundlage für unseren Joplin-Server zu schaffen (in meinem Fall ist es Debian), müssen zunächst ein paar Vorbereitungen getroffen werden. Die nachfolgenden Schritte beziehen sich, wie gerade erwähnt, auf Debian 12 und auch meinen Standard in Bezug auf die Dateiablage (hier im /opt-Verzeichnis). Das kann bei Dir entsprechend anders aussehen und sollte entsprechend berücksichtigt werden.

  1. Installiere die aktuellste Docker-Engine – siehe https://docs.docker.com/engine/install/
  2. Lege ein Verzeichnis z. B. in /opt an und nenne es zum Beispiel joplin-server, sodass der Basispfad /opt/joplin-server existiert und Docker dort die Daten der PostgreSQL-Datenbank ablegen kann: Mehr Verzeichnisse benötigen wir hier nicht, da Joplin alles in der Datenbank und nicht auf Dateiebene außerhalb von PostgreSQL speichert
  3. Wechsele dann in das just erstellte Verzeichnis und erstelle die Datei docker-compose.yml mit dem Beispielinhalt aus https://codeberg.org/oliverpifferi/docker/src/commit/c6752206728acbd29b6bf9ac42e81852da819c90/docker_joplin_server.yaml – bitte passe hier die entsprechenden Werte für Datenbank-/Benutzername und Kennwort der PostgreSQL-Datenbank oder andere Parameter wie die benötigten E-Mail-Einstellungen entsprechend Deiner Umgebung an. Das Dockerfile an sich ist recht überschaubar und selbsterklärend, sodass das recht schnell erledigt sein sollte.
  4. Starte den fertigen Stack durch Eingabe von docker compose up -d!

Jetzt kannst respektive solltest Du überprüfen, ob beide Container laufen, indem Du docker ps auf der Kommandozeile eingibst oder Du kannst Dir die entsprechenden Protokolle durch den Befehl docker logs anzeigen lassen. Der erste initiale Start bzw. die Hintergrundprozesse dauern ein wenig, da die Datenbank erst einmal befüllt werden muss und dann der Applikations-Container dann darauf aufsetzt: Habe also gegebenenfalls ein wenig Geduld, denn wie immer kann es je nach System kann dieser Prozess oder auch das vorherige Herunterladen ein wenig Zeit in Anspruch nehmen!

Der Reverse Proxy

Sobald die Dienste auf dem Zielsystem eingerichtet sind (oder während dies geschieht), kannst Du Dich mit dem Reverse-Proxy beschäftigen. Dieser sorgt dafür, dass Dein Joplin Server nicht nur über die interne IP und den definierten Port, sondern über die vorher ausgesuchte Domain verfügbar gemacht wird. In dem hier vorliegenden Beispiel soll der bereits vorhandene Nginx Proxy Server dafür sorgen, die interne IP samt des Ports auf unsere gewählte https-URL zu mappen und sich sowohl um die Zuweisung eines Let’s Encrypt-Zertifikates als auch die notwendige Verlängerung zu kümmern. Hierfür wird natürlich vorausgesetzt, dass die Ports 80/tcp und 443/tcp in Deinem Router respektive Firewall via NAT an Deinen Reverse Proxy weitergeleitet werden. Ist das bisher nicht geschehen, oder Du hast noch keinen Reverse Proxy im Einsatz, ist das eine vorab zu erledigende „Pflichtaufgabe“, um den Joplin Server von aussen verfügbar zu machen, sofern Du das willst!

Dazu melde Dich einfach am Nginx Proxy Manager an, wähle dann „Proxy Hosts“ und dann „Add Proxy Host“, um einen neuen Host hinzuzufügen. Es öffnet sich ein neues Fenster, in das Du den entsprechenden Domänennamen (z. B. joplin.meinedomain.de), das Protokoll („Scheme“), den Weiterleitungshostnamen/IP und den Zielport eingeben musst. Das Schema ist http, der Port ist 22300, wie in der Datei docker-compose.yml konfiguriert, und die IP ist die interne Ziel-IP des Hosts, auf dem der Joplin Server läuft. Aktiviere nun noch die angezeigten Optionen für das Caching von Assets, das Blockieren gängiger Exploits und die Unterstützung von Web-Sockets und klicke dann auf „Save“.

Sobald der Host erstellt wurde, editiere ihn direkt und wechsele dann zur Registerkarte „SSL“. Wähle jetzt „Request new SSL Certificate“ und aktiviere die Optionen „Force SSL“, „HTTP/2-Support“ und „HSTS aEnabled“ an und klicke anschliessend auf „Save“ – natürlich solltest Du den Nutzungsbestimmungen für Let’s Encrypt auch entsprechend zustimmen. Sobald das Zertifikat abgerufen wurde, kann die restliche Arbeit dann im Browser erledigt werden, da der Joplin Server über https und das passende, frisch erstellte Zertifikat auch von aussen erreicht werden kann.

Das erste Anmelden und das Ändern des initialen Benutzers

Nach der Erstinstallation und der (hoffentlich erfolgreichen) Konfiguration Deines Reverse-Proxys kannst Du dann Deinen Joplin Server über die offizielle URL wie https://joplin.meinedomain.de öffnen – natürlich entsprechend der (Sub-)Domain, für die Du Dich anfangs entschieden hast. Verwende nun die Standard-Zugangsdaten admin@localhost als Benutzername und admin als Passwort – im Nachgang solltest Du nach dem ersten Log-in diese Werte entsprechend ändern, idealerweise in einem anderen Benutzernamen und unter Verwendung eines sicheren Kennwortes. Durch die Eingabe einer korrekten E-Mail-Adresse und der vorherigen richtigen Konfiguration in der docker-compose.yml-Datei solltest Du diese E-Mail-Adresse dann noch bestätigen: Joplin verschickt dann eine entsprechende Mail. Unter dem Abschnitt „Admin“ findest Du dann verschiedene Optionen, darunter den Abschnitt „Benutzer“, in dem Du Deinen ersten individuellen Benutzer für Deinen Joplin-Desktop- und/oder Mobil-Client anlegen kannst. Auch hier gilt: Lege besser pro User dedizierte Accounts an, sodass Du nicht mit dem Administrator arbeiten musst, was eben immer ein Sicherheitsrisiko darstellt!

Sobald Du eine der offiziellen Anwendungen installiert hast, öffne einfach den Konfigurationsbildschirm und gehe zum Abschnitt „Synchronisation“. Wähle dort „Joplin Server (Beta)“ als Synchronisationsziel aus, gebe dann die gewählte URL mit dem entsprechenden Benutzernamen und dem gesetzten Passwort ein, teste und speichere diese einmal und schon hast Du Deinen Client erfolgreich mit Deiner persönlichen Joplin Server-Instanz verbunden! Natürlich gibt es noch erweiterte Optionen wie den Synchronisationsintervall, die Behandlung von Anhängen, Proxy-Einstellungen oder die maximale Anzahl gleichzeitiger Verbindungen zu Deinem Joplin Server: Auch hier ist eine Feinabstimmung auf Deine speziellen Bedürfnisse möglich und auch die Ende-zu-Ende-Verschlüsselung ist ein weiterer Sicherheitsaspekt, den Du bei Bedarf aktivieren solltest!

Geschafft!

Du hast es erfolgreich geschafft, einen selbst gehosteten Joplin Server auf einem Debian VPS samt Reverse-Proxy zu installieren – sicherlich nicht ganz trivial, allerdings schon in kürzester Zeit und mit weniger Aufwand als vielleicht ursprünglich erwartet. Deine spezifischen Bedürfnisse werden sicherlich unterschiedlich sein und es gibt auch andere Lösungen in Bezug auf einen Reverse-Proxy wie den klassischen Nginx, Apache oder viele andere. Am Ende liegt die Wahl (natürlich) letztlich bei Dir und Deinen speziellen Anforderungen. Übrigens funktioniert auch der auf Nginx basierende Reverse-Proxy auf Synology NAS-Systemen hervorragend mit dieser Art des Deployments!

Quellen:
Coverfoto - https://joplinapp.org

Tags

joplin, docker, Joplin Notes, Notes, Artikel-Serie, Selfhosting

Maaz
Geschrieben von Maaz am 30. April 2025 um 17:06

Vielen Dank für die Joplin-Serie. Benutze es schon seit einiger Zeit, freue mich trotzdem über neuen Input. Eine Frage zum Server... Ich nutze webdav um die Dateien abzulegen. Habe ich irgendwelche Vorteile von der Serverlösung oder ist der Funktionsumfang identisch?

Oliver Pifferi
Geschrieben von Oliver Pifferi am 30. April 2025 um 19:17

Das hängt von Deinen Anforderungen ab - WebDAV tut es genauso, bei uns war es dann aber so, dass ich das nicht auf Verzeichnis-/Nutzerebene jeweils einrichten wollte und die Art des Deployments entsprechend interessant fand. Hier landet auch alles direkt in der Datenbank und nicht im Dateisystem - je nachdem gefällt Dir das eine oder das andere mehr. Am Ende ist das ein Weg, Joplin zu synchronisieren - wenn bisher also WebDAV das Mittel Deiner Wahl war und das passt - perfekt :-) !

Maaz
Geschrieben von Maaz am 1. Mai 2025 um 00:26

Okay, vielen Dank!

Benno
Geschrieben von Benno am 2. Mai 2025 um 17:04

Danke für den spannenden Artikel.

Kannst du sagen, was sind die Anforderungen an den VPS-Server (Kernelanzahl, RAM, Festplatten-Grösse), zum Beispiel für eine 5-köpfige Familie?

Kann NGinX auf dem gleichen VPS als weitere Docker-Komponente gehostet werden?

Merci vielmals. Benno

Oliver Pifferi
Geschrieben von Oliver Pifferi am 2. Mai 2025 um 19:24

Hallo Benno, ich habe den Server auf einer Proxmox-VM für eine sechsköpfige Familie laufen und bei zwei Kernen und 4 GB RAM unter Alpine Linux dreht das Ding quasi Däumchen - viel Last braucht das nicht. Den Reverse Proxy kannst Du natürlich auch auf der Maschine laufen lassen - das sollte (je nach Last von außen) der Sache keinen Abbruch tun!

Mike
Geschrieben von Mike am 14. Juni 2025 um 07:05

Toller Artikel. Ich nutze seit geraumer Zeit auch Joplin incl. dem Joplin-Server. Was ich mich immer wieder Frage. Warum stellt man solche Instanzen immer ins Netz? Klar man will von Unterwegs auch darauf zugreifen können, aber ist eine VPN-Lösung mit gezielter Freigabe nicht sicherer?

Oliver Pifferi
Geschrieben von Oliver Pifferi am 2. August 2025 um 12:16

Das hängt ganz von der Art Deines Deployments ab - und von den Endanwendern. Ein VPN ist natürlich sicherer (und da spricht nichts gegen), ich hab da aber "Experten" in der Familie, denen dieser zusätzliche Schritt (ein Klick mehr für die Einwahl) aufgrund von Affinität oder Alter sichtbar schwer fällt. Nach außen hin veröffentliche ich in meinem Use Case nur die Webserver-Ports 80/443 (TCP) über den Reverse Proxy (mittlerweile Pangolin), SSH ist natürlich nur intern nutzbar - von daher hält sich das Risiko IMHO in Grenzen, zumal davor auch eine Hardware-Firewall steht.

Der Artikel selbst stellt ja auch nur die technische Machbarkeit per se dar - mit Optionen in alle Richtungen, aber auch gegen eine komplett interne Nutzung oder eben Unterstützung durch ein VPN spricht natürlich nichts.