Es gibt eine neue Idee, die ich erfolgreich umsetzen konnte. Es soll Nextcloud, Paperless-ngx sowie Adguard zu Hause im Netz laufen und dabei intern im LAN über lokale IP bzw. DNS hostnamen und über’s Internet über meine bestehende Domain easyr.de erreichbar sein.
Das ganze System soll auf einem leistungsfähigen und zugleich super sparsamen PC/Notebook 24/7 laufen.
Vorbereitung:
Hardware für Dockersystem -> Ich habe erst mit einer Synology Eigenbau Box und Broadwell i5 CPU herumgespielt und musste trotz, dass nur SSD’s verbaut waren einen idle Stromverbrauch von ~25W messen, was mir zu viel war. Als Lösung kam nun ein Lenovo L390 13″ Laptop mit 32GB DDR4 Speicher, i7-8765U CPU und 2TB Intel NVMe SDD mit MacOS BIG SURE (boot mit Opencore) zum Einsatz auf dem „Docker Desktop“ läuft. Das System braucht im idle ~11W, beim max. Last, was selten der Fall ist ~30W. Das ist eigentlich schon alles an Hardware, was nötig ist für so ein Projekt.
In diesem Tutorial werde ich nur grob auf die zu erledigenden Schritte eingehen.
- Damit die öffentliche Domain, in meinem Fall die easyr.de, auf meine ständig wechselnde IP zu Hause zeigen kann, muss der Provider bei dem die Domain gehostet wird eine passende API bereitstellen, damit die DNS records bei einem IP change neu gesetzt werden. Kann das der Provider, wie in meinem Fall 1blu nicht, muss für den Domainnamen eine anderer DNS Provider eingetragen werden, der das kann. Ich verwende cloudflair. Hier habe ich die hauptdomain, easyr.de, sowie diverse subdomains, z.B. cloud.easyr.de registriert, eine passende API erstellt, die nötig ist und genutzt wird um welche später als entsprechendes laufendes Dockerimage/Service die richtige IP Adresse übermittelt bekommen. Nur so ist dann auch eine Erreichbarkeit gewährleistet. Ganz wichtig zu wissen ist: Es kann immer nur EINE Subdomain pro Docker Service updated werden. Sollen also mehr als eine Subdomain mit neuer IP updated werden, müssen für jede Subdomain ein Service angelegt werden. Die API bleibt aber immer die gleiche.
- Auf dem Router zu Hause werden 2 Weiterleitungs-Regeln für die Protokolle http und https angelegt, die auf die IP Adresse bzw. den Host zeigen, auf dem die Dockerimages laufen. In diesem Fall auf den Reverse-Proxy „Nginx Proxy Manager„. Soll Nextcloud auch intern über die lokale IP über https erreichbar sein, muss der Standardport 443 verwendet werden. Ansonsten könnte man auch für die Weiterleitung Router nach NPM auch z.B. 4330 nehmen.
Hiermit sind auch schon alle Vorbereitungen erledigt, um mit der Installation der Dockerimages zu beginnen. Doch zuerst wird auf dem Mac mit der Installation von „Docker Desktop“ begonnen. Da ich Big Sure, also MacOS 11.7.10, installiert habe und auch nicht updaten werde, musste Docker Desktop in Version 4.24.0 installiert werden. Die 2TB Disk habe ich in verschiedene Partitionen aufgeteilt. 200GB für’s MacOS System auf dem auch die Dockerinstanzen in meinem User Verzeichnis liegen sowie eine große ~1.6TB Partition für die media und data Verzeichnisse die von Nextcloud und Paperless genutzt werden. Ich habe das ganz bewusst getrennt, damit ich, wenn ich z.B. ein Update einspiele, die Dockerimages besser sichern kann ohne alle Daten sichern zu müssen.
Das sieht dann so aus bei mir am Beispiel für Paperless-NGX. Für jeden Dockerservice gibt es einen Unterordner mit der entsprechenden Versionsnummer. Wichtig hierbei ist, dass die DB immer fester Bestandteil einer Dockerinstanz ist und nicht getrennt z.B. im Daten Volume liegt.
Wer, wie ich, nie zuvor mit Docker herumgespielt hat und keinerlei Erfahrungen damit hat, tut sich anfangs recht schwer. Ich hatte zum Glück Hilfe von einem Freund, der schon sehr lange mit Docker schafft und mir sehr hilfreich mit Tips zur Einrichtung zur Seite stand. Danke lieber Ralf an dieser Stelle!
Am einfachsten ist es primär nur mit den Docker-Befehlen und der docker-compose.yml auf der Konsole bzw. SSH shell zu arbeiten, um ein Dockerimage zu erstellen. Diese Config Dateien heißen immer docker-compose.yml und liegen auch immer im Order des jeweiligen Dockersystems. Ich habe für mein spezielles Setup auch ein eigenes Docker Netz mit dem Namen „web“ angelegt, welches primär von meinen Dockerinstanzen gemeinsam genutzt wird.
Beispiel für ein ganz einfaches Dockerimage „whoami“:
mit „docker compose up“ wird die Instanz ganz einfach gestartet.
Sollte es Fehler geben, werden diese auch gleich in der Konsole angezeigt. Mit contr+c kann man den task beenden, wenn alles tut, wie es soll, um mit „docker compose up -d “ die Instanz als daemon zu starten.
Nach diesem recht einfachen Prinzip werden nun alle Docker’s einer nach dem anderen angelegt. Angefangen habe ich mit dem Reverse-Proxy „Nginx Proxy Manager„, ohne den weder nextcloud noch paperless aus dem Internet via nötigen https und Let’s Encrypt Zertifikaten zu erreichen wären. Hier noch ein Screen von meinen eingerichteten Proxy Hosts, die via Internet und auch lokal über https erreichbar sind, obwohl die intern auf unverschlüsselten http ports laufen. Schön zu sehen ist und gut zu wissen, dass als Destination der Docker Servicename eingetragen werden kann.
Damit eine Synchronisation zu Hause nicht die Daten über’s Internet schickt, werden die hosts cloud.easyr.de und docs.easyr.de von einem DNS Server lokal aufgelöst. Dazu verwende ich „adguardhome„, welcher meinen OpenWRT (Fritzbox 7530) ersetzt und zusätzlich ein adblocker ist.
Kontrolle: Mein DNS zu Hause löst, wie gewünscht den hostnamen cloud.easyr.de auf die interne LAN IP auf. Der Fritzbox DNS kennt den Host nur mit der aktuellen Internet-IP.
Am Ende sollte am Mac aus Docker Desktop Perspektive alles in etwa so aussehen:
Um nervige standby’s zu verhindern habe ich auf dem Mac Amphetamine am laufen:
#