Meine liebsten Self-Hosted Tools (Part 1)

In diesem Post stelle ich einige meiner liebsten, selbst gehosteten Tools vor. In einem zweiten Teil werde ich weitere Tools vorstellen.

Meine liebsten Self-Hosted Tools (Part 1)
Hintergrundbild: Unsplash, Logos: Home Assistant, Vaultwarden, Ghost, AdGuard Home

Im folgenden Artikel stelle ich einige Tools vor, welche ich bei mir zu Hause oder in der Cloud selbst hoste und ich weiterempfehlen kann.

Beim Verfassen dieses Artikels habe ich mich entschlossen, die Tools in zwei Teile zu unterteilen und dafür bei den einzelnen Tools etwas mehr ins Detail zu gehen, um somit insgesamt einen grösseren Mehrwert zu bieten. Part 2 wird zu einem späteren Zeitpunkt folgen.

Home Assistant

Home Assistant ist eine Open-Source Software um sich ein umfassendes und unabhängiges Smart-Home-System aufzubauen. Es können Smart-Home-Geräte von diversen Herstellern integriert und über ein Tool gesteuert werden. Man fügt einfach alle smarten Geräte, die man hat, zu Home Assistant hinzu. Anschliessend kann man damit Automationen bauen, sich Szenen einrichten oder ganze Dashboards zur Steuerung bauen. Man kann beispielsweise eine Automation machen, welche die Heizung stoppt, wenn das Fenster geöffnet wird. Oder man verknüpft die Helligkeit der Lichter mit der Umgebungshelligkeit oder der Sonne, um nur einige Beispiele zu nennen. Mit Home Assistant kann man alles bauen, was man sich nur vorstellen kann. Ausserdem gibt es eine grosse Community rund um Home Assistant. Dort kann man sich bei Schwierigkeiten Hilfe holen oder Inspirationen finden, für neue Automationen.

Beispiel eines Home Assistant Dashboards

Ich nutze Home Assistant nun bereits seit ca. 1.5 Jahren und hatte seither eine Menge Spass damit. Es gab in dieser Zeit regelmässig Updates, welche neue Funktionen gebracht und damit das Nutzungserlebnis verbessert haben. Ich bin mit Home Assistant sehr zufrieden und kann es jedem, der etwas technisch versiert ist und sich ein Smart Home aufbauen möchte, empfehlen.

Seit kurzem gibt es mit dem Home Assistant Voice Preview Edition sogar einen Sprachassistenten, welcher komplett lokal und ohne Internetanbindung betrieben werden kann. Weitere Details dazu findest du hier. Entsprechend leistungsfähige Hardware wird vorausgesetzt, damit alles lokal funktioniert.

Ich habe bereits einen ganzen Blogpost rund um Home Assistant geschrieben. Wenn dich das Thema interessiert, findest du diesen hier: ⬇️

Home Assistant Guide
Der Guide rund um Home Assistant. Dieser Artikel soll als Nachschlagewerk und Hilfestellung für diverse Themen und Erkenntnisse rund um Home Assistant dienen.

Mein Guide rund um Home Assistant

Vaultwarden (Bitwarden)

Bitwarden ist ein Open-Source Passwort-Manager, der einfach zu verwenden ist und nützliche Funktionen bietet. Vaultwarden ist eine alternative Implementierung der Bitwarden Client API. Das heisst, auf dem Server läuft Vaultwarden, zur Bedienung verwendet man jedoch die offiziellen Apps von Bitwarden. Es gibt einige Unterschiede in der Funktionalität zwischen diesen beiden Server-Implementierungen und wie diese gehostet werden können, sowie ob diese zusätzliche Lizenzen benötigen.

Für den Privatgebrauch empfehle ich die Verwendung von Vaultwarden, da es leicht zu betreiben und komplett kostenlos ist. Am einfachsten ist es, Vaultwarden in Form eines Docker oder Podman Containers zu betreiben. Beispielsweise mit folgender docker-compose.yml kann Vaultwarden gestartet werden.

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://vault.example.com" # Ersetze example.com mit deiner Domain
      SIGNUPS_ALLOWED: false # Anmeldungen verhindern (Auf true setzen um Registrierungen zu erlauben)
    volumes:
      - ./data/:/data/
    ports:
      - 80:80

docker-compose.yml

Mit der Umgebungsvariable SIGNUPS_ALLOWED kannst du steuern, ob sich Benutzer selbstständig auf deinem Server registrieren können. Ich empfehle diese Option nur zu Beginn auf true zu setzen, damit du für dich ein Konto erstellen kannst.

Vaultwarden bietet ein Admin Portal, welches durch das Setzen der Umgebungsvariable ADMIN_TOKEN aktiviert werden kann. Beim Wert dieser Umgebungsvariable handelt es sich um einen Argon2 Hash eines Zugangspasswortes für das Admin Portal. Wie du diesen Hash generieren und somit das Admin Portal aktivieren kannst, erfährst du auf dem Wiki von Vaultwarden. Nach der Aktivierung kann das Admin Portal unter dem Pfad /admin deines Vaultwarden Servers erreicht werden. Im Admin Portal lassen sich die Benutzer auf dem eigenen Server verwalten, Diagnosedaten ansehen und einige allgemeine Einstellungen festlegen. Im Admin Portal kannst du dann auch Benutzer anhand eines E-Mail-Adresse für die Registrierung auf deinem Server einladen. Somit kannst du dann trotz deaktivierter Registrierung SIGNUPS_ALLOWED weitere Benutzer zu deinem Server hinzufügen.

Wenn du die URL deines Vaultwarden Servers ohne Zusätze wie /admin aufrufst, landest du auf dem Web Vault. Das ist die Webversion von Vaultwarden, mit welcher du deinen Passwörter ohne die Installation der Client-Apps verwalten kannst.

Vaultwarden Web Vault

Für die alltägliche Nutzung empfehle ich jedoch die Installation der Client-Apps von Bitwarden auf deinen Geräten sowie die Installation des Browser Plugins in deinem Browser. Damit lassen sich deine Passwörter automatisch beim Anmelden ausfüllen und neue Passwörter gleich bei der Registrierung generieren und speichern.

Weitere Infos zu Vaultwarden findest du zudem auf dem offiziellen GitHub Repository:

GitHub - dani-garcia/vaultwarden: Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs
Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs - dani-garcia/vaultwarden

GitHub Repository von Vaultwarden

Falls du dich fragst, wieso du überhaupt einen Passwort Manager verwenden solltest, habe ich in folgendem Blogpost die Gründe genauer erläutert.

Wieso du einen Passwort-Manager brauchst!
Hier erfährst du was ein Passwort Manager ist und wieso du einen brauchst.

Kurz vorweggenommen erhöht die Verwendung eines Passwort Manager die Sicherheit deiner Online-Konten, da du dadurch sichere und verschiedenen Passwörter verwendest. Zudem erleichtert es dir deinen Alltag, da du dir nur noch ein einziges Passwort merken musst. Nämlich das Master-Passwort, welches den Schlüssel zu deinem Passwort Manager bildet.

Ghost

Ghost ist eine leistungsfähige und minimalistische Blogging-Software. Ghost ist auch die Software, mit der ich diesen Blog hier betreibe. Es kann sowohl als Headless CMS als auch als vollständige CMS-Lösung zum Betrieb eines Blogs oder einer Website verwendet werden. Im Fall eines Headless CMS stellt Ghost lediglich die Schnittstelle zur Bearbeitung der Inhalte zur Verfügung. Das eigentliche Hosting der Website wird dabei mithilfe von anderen Lösungen implementiert. Das hat den Vorteil, dass die bestehende Infrastruktur/Aufbau einer Website übernommen und gleichzeitig mittels dem leistungsstarken und simplen Editor von Ghost bearbeitet werden kann. Details zum Betrieb von Ghost als Headless CMS findest du in der Dokumentation von Ghost.

Screenshot aus dem Editor von Ghost

In der Regel wird man seinen Blog jedoch vollständig mittels Ghost betreiben. Dabei stellt Ghost sowohl den Editor als auch den Webserver für das Hosting dar. Die einfachste Art Ghost zu betreiben, ist auch hier die Verwendung eines Container-Images. Ghost kann mithilfe folgender docker-compose.yml-Datei betrieben werden.

services:
  ghost:
    image: ghost:5-alpine
    restart: unless-stopped
    ports:
      - 2368:2368
    environment:
      database__client: mysql
      database__connection__host: db
      database__connection__user: root
      database__connection__password: ghost
      database__connection__database: ghost
      url: https://example.com
    volumes:
      - ./data:/var/lib/ghost/content
    depends_on:
      - db

  db:
    image: mysql:8.0
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ghost
    volumes:
      - ./db:/var/lib/mysql

docker-compose.yml

Beachte, dass du die URL (https://example.com) entsprechend an deinem Umgebung anpassen musst.

Nach dem ersten Start von Ghost kannst du unter https://<DEIN-GHOST-BLOG>/ghost den Setup-Wizard erreichen. Lege dort den Namen für deinen Blog fest und erstelle deinen Administratoraccount. Nachdem du das Setup abgeschlossen hast, landest du gleich im Admin Bereich deines Ghost Blogs. Dort hast du die Möglichkeit gleich mit dem Schreiben deiner Blogposts zu beginnen. Ich empfehle jedoch zu Beginn die Einstellungen durchzugehen und deinen Bedürfnissen entsprechend zu konfigurieren.

Einstellungen von Ghost öffnen

In den Einstellungen können beispielsweise das Theme deines Blogs, Metadaten, die Zugriffseinstellungen und Weiteres konfiguriert werden. Es ist auch möglich kostenlose und kostenpflichtige Mitgliedschaften für deinen Blog einzurichten, welche, je nach Mitgliedsstufen, den Zugriff auf andere Posts ermöglichen. Hierzu kann ein Stripe-Konto mit Ghost verknüpft werden.

Wenn du deinen Ghost Blog nicht selbst hosten willst, gibt es auch die Möglichkeit Ghost(Pro) zu abonnieren. Das ist ein Hosting-Angebot der Entwickler von Ghost, wobei dir die komplette Installation & Wartung abgenommen wird. Ghost(Pro) Abonnements starten ab 9$/Monat. Dabei unterstützt man auch die Entwicklung von Ghost selbst. Wem das zu teuer ist, kann Ghost auch für 1.90$/Monat über PikaPods hosten lassen.

AdGuard Home

Eine weitere Software, welche ich hoste und gerne nutze - wenn auch nur passiv - ist AdGuard Home. AdGuard Home ist ein AdBlocker auf DNS Ebene. Das heisst AdGuard Home fungiert als DNS-Server im Netzwerk und filtert dabei die Werbung raus, bevor sie geladen werden kann. Ein DNS-Server ist für die Übersetzung von Domainnamen wie google.com oder blog.michivonah.ch in IP-Adressen (Beispiel 192.168.123.132) zuständig, welcher der Computer für die Kommunikation braucht. Die Domainnamen wie google.com sind einfach gesagt nur dazu da, damit wir Menschen uns die Zahlen einer IP-Adresse nicht merken müssen und stattdessen einen einfachen Namen eingeben können.

Nun fragst du dich vielleicht, was denn jetzt AdGuard Home macht, damit die Werbung nicht angezeigt wird. Eigentlich ist es ganz einfach. In der Regel nutzen die Betreiber einer Website Drittanbieter Tools wie "Google Ads" oder "Meta Ads" um Werbung auf ihren Websites einzubauen. Diese bieten den Vorteil, das man nicht selbst Verhandlungen mit den Werbetreibenden führen muss, um mittels Werbung Geld zu verdienen. Man stellt dann lediglich einem Drittanbieter den Platz auf der eigenen Website zur Verfügung und erhält für die generierten Klicks auf die Werbung dann Geld. Wenn dann jemand die Website besucht, wird automatisch beim Laden eine Verbindung zum Anbieter der Werbung hergestellt um die entsprechenden Werbung zu laden und anzuzeigen. Hier kommt nun AdGuard Home ins Spiel. Da diese Werbungen nicht von der eigentlichen Website sondern von einem Drittanbieter geladen werden, können einfach die Anfragen nach der IP-Adresse hinter Werbefirmen abgelehnt bzw. ignoriert werden, wodurch die Werbung nicht geladen werden kann und somit auch nicht angezeigt wird. AdGuard Home gibt also bei Anfragen nach Werbefirmen einfach keine Antwort zurück. Damit du dir das ganze etwas besser vorstellen kannst, habe ich versucht den Ablauf in folgendem Bild einfach darzustellen:

Abruf einer Website im Internet (stark vereinfacht)

Zu erklären, wie das alles im Detail funktioniert würden den Rahmen dieses Blogposts sprengen. Ich wollte hiermit lediglich auf einfache Art und Weise erklären, was AdGuard Home ist und was es macht. Im Alltag wirst du von diesem Prozess nach der Konfiguration nichts merken - ausser der fehlenden Werbung natürlich - da dies alles im Hintergrund geschieht.

Bitte beachte, dass diese Art der Filterung von Werbung nicht mit allen Websites & Services funktioniert. Vorallem bei Diensten, welche die Werbung von ihren eigenen Servern laden wie YouTube, Spotify oder Instagram funktioniert dies nicht. Für die grosse Mehrheit an Mobile Games und News-Websites funktioniert diese Methode jedoch hervorragend.

Wie auch die anderen vorgestellten Tools kann AdGuard Home als Container betrieben werden. Hier ein Beispiel, wie ein docker-compose.yml für AdGuard Home aussehen könnte.

services:
    adguardhome:
        image: adguard/adguardhome
        container_name: adguardhome
        restart: unless-stopped
        volumes:
            - ./work:/opt/adguardhome/work
            - ./conf:/opt/adguardhome/conf
            - ./certs:/app/certs
        ports:
            - 53:53/tcp
            - 53:53/udp
            - 80:80/tcp
            - 443:443/tcp
            - 443:443/udp
            - 3000:3000/tcp
            - 853:853/tcp
            - 784:784/udp
            - 853:853/udp
            - 8853:8853/udp
            - 5443:5443/tcp
            - 5443:5443/udp

docker-compose.yml

Nach dem Start von AdGuard Home kann die Konfiguration über den Browser abgeschlossen werden. Anschliessend kann die IP-Adresse von AdGuard Home im Router oder direkt auf deinen Geräten als DNS-Server eingetragen werden. Nun sollte die Filterung von Werbung beim Aufruf von Websites bereits funktionieren.

Ich empfehle AdGuard Home in einer separaten virtuellen Maschine oder auf einer dedizierten Hardware zu installieren, damit ein Ausfall deines Servers nicht auch gleichzeitig den gesamtes Netzwerk lahmlegen würde.

Zum Thema DNS AdBlocking und AdGuard Home werde ich zu gegebenem Zeitpunkt einen separaten und ausführlichen Blogpost verfassen, wobei ich dann auch meine Tipps & Erfahrungen für die Konfiguration von AdGuard Home erläutern werde. Wenn du bereits jetzt mehr Informationen zur Konfiguration brauchst, empfehle ich die Knowledge Base von AdGuard zu konsultieren. Ebenfalls gibt es auf YouTube einige gute Anleitungen zur Konfiguration von AdGuard Home.

Was läuft im Hintergrund?

Das waren einige Tools, welche du selbst hosten kannst und dir einen direkten Nutzen bringen. Im Hintergrund läuft bei mir Traefik als Reverse Proxy, welcher dafür sorgt, dass alle Dienste über eine Domain mit zugehörigen SSL-Zertifikaten erreichbar sind. Dazu wie Traefik funktioniert und wie Traefik eingerichtet werden kann, habe ich bereits einen eigenen Blogpost gemacht. Diesen findest du unten verlinkt.

Traefik als Reverse Proxy für deine Dienste verwenden
In diesem Beitrag erkläre ich dir, was Traefik ist und wie du Traefik als Reverse Proxy für deine Dienste nutzen kannst.

In meinem Fall laufen alle Dienste in Form von Docker Containern auf einem Mini-PC von ASUS oder in einer virtuellen Maschine in der Cloud von Hetzner. Hetzner bietet Server in der Cloud zu attraktiven Preise mit Standorten in Deutschland, Finnland, Singapur und den USA. Wenn du die Cloud von Hetzner ausprobieren willst, erhältst du mit dem Code ekSYgfaQl5qf ein Startguthaben von 20€. Als kleines Dankeschön für deine Anmeldung erhalte ich von Hetzner 10€ Guthaben auf meinem Account gutgeschrieben. Danke für deine Unterstützung.

Eine weitere Variante um die genannten Tools in der Cloud zu nutzen, ohne sich selbst um den Betrieb und die Wartung kümmern zu müssen, ist die Verwendung von PikaPods. Darauf habe ich im Abschnitt zu Ghost bereits hingewiesen. PikaPods ist ein Anbieter von gemanagtem Container-Hosting. Das heisst PikaPods kümmert sich um den Betrieb der Container, du hast jedoch Zugriff auf die Container, deren Konfiguration und die Daten darin. Es gibt die Möglichkeit deine eigene Domain mit den Tools zu verbinden und Offsite Backups zu konfigurieren. Der Preis für das Hosting hängt von dem gewählten Tool ab und liegt in der Regel zwischen 1$ und 4$ pro Monat. Mit der Registrierung bei PikaPods erhält man automatisch ein Startguthaben von 5$ und kann somit gleich beginnen. Für Tools wie Home Assistant macht es jedoch wenig Sinn diese in der Cloud zu betreiben, da diese nur im Heimnetzwerk einen Nutzen bringen.

Im zweiten Teil werde ich vier weitere Tools vorstellen. In der Zwischenzeit kannst du ja bereits das eine oder andere Tool hosten. Wenn du weitere tolle Tools kennst, kann du dich auch gerne bei mir melden.