Inhaltsverzeichnis

  1. Vorbereitung
  2. Schritt: Erstellen Sie zuerst das Caddy-Verzeichnis
  3. Schritt: Erstellen Sie nun die Caddyfile unter /etc/caddy/Caddyfile
  4. Externes Netzwerk erstellen
  5. Schritt: Fügen Sie die Docker Compose Datei für Caddy in den Stack via Portainer ein
  6. Deployment von Watchtower
  7. Einrichtung des Watchtower Stacks
  8. Abschluss

Hinweis: Die folgenden Schritte sind optional und richten sich an Benutzer, die zusätzliche Dienste wie Nextcloud, Bitwarden oder WireGuard hosten möchten.

In diesem Tutorial erläutere ich, wie Caddy als Reverse Proxy eingerichtet werden kann, um externe Dienste wie Bitwarden, Nextcloud oder WireGuard zugänglich zu machen und die Verwaltung von SSL/TLS-Zertifikaten zu vereinfachen. Diese Einrichtung eines Reverse Proxies ist insbesondere dann nützlich, wenn externe Dienste bereitgestellt werden sollen. Bei der Bereitstellung von Diensten wie AdGuard Home oder UptimeKuma, die keine Exposition gegenüber dem Internet erfordern, ist ein Reverse Proxy nicht erforderlich.

Caddy wird in diesem Szenario über Portainer als Stack deployed, um die Handhabung von SSL/TLS-Zertifikaten erheblich zu vereinfachen. Ein Deployment bezieht sich auf den Prozess, in dem die Konfiguration und der Code einer Anwendung auf einen Server oder eine Serverinfrastruktur übertragen werden, um die Anwendung in einer Produktionsumgebung laufen zu lassen.

Ein Reverse Proxy agiert als Vermittler zwischen dem Internet und den internen Servern. Er nimmt Anfragen von Clients im Internet entgegen und leitet diese an die internen Server weiter. Die internen Server bearbeiten dann die Anfragen und senden die Antworten zurück an den Reverse Proxy, der schließlich die Antworten zurück an die Clients im Internet sendet. Dieser Prozess trägt dazu bei, die interne Struktur und die IP-Adressen der Server zu verbergen, was die Sicherheit verbessert. Außerdem kann ein Reverse Proxy die Performance verbessern, SSL/TLS-Verschlüsselung bereitstellen und den Datenverkehr anhand verschiedener Kriterien an verschiedene Server verteilen.

Eine der herausragenden Eigenschaften von Caddy ist seine automatisierte Verwaltung von SSL/TLS-Zertifikaten. Durch die Integration mit Let’s Encrypt automatisiert Caddy die Erstellung und Erneuerung von Zertifikaten, was den Prozess der Aufrechterhaltung einer sicheren Verbindung zwischen Ihrem Server und den Clients erheblich vereinfacht und weiter automatisiert. Diese Automatisierung ist besonders nützlich, wenn externe Dienste betrieben werden und eine sichere, verschlüsselte Verbindung für die Nutzer gewährleistet werden soll.

Vorbereitung

Bevor wir beginnen, stellen Sie sicher, dass Sie die vorherigen Tutorials durchgegangen sind und Portainer erfolgreich auf Ihrem System installiert haben.

Schritt: Erstellen Sie zuerst das Caddy-Verzeichnis

sudo mkdir -p /etc/caddy
Schritt 1: Erstellung des Caddy-Verzeichnisses als Ausgangspunkt für die Konfiguration und Verwaltung des Caddy-Servers

Schritt: Erstellen Sie nun die Caddyfile unter /etc/caddy/Caddyfile

Die Caddyfile ist die Konfigurationsdatei für Caddy, welche essenziell für die Funktionalität von Caddy als Reverse-Proxy ist. Mit einer Caddyfile können Sie festlegen, wie eingehende HTTP- und HTTPS-Anfragen verarbeitet und an andere Server oder Dienste weitergeleitet werden sollen. Sie können auch benutzerdefinierte Routing-Regeln erstellen, Fehlerbehandlungen definieren, automatische HTTPS-Zertifikatsverwaltung konfigurieren und vieles mehr. In einem Szenario, in dem Sie mehrere Dienste wie Vaultwarden (Bitwarden), Nextcloud oder ein VPN auf einem Server hosten, ermöglicht die Caddyfile die einfache Weiterleitung von Anfragen an diese Dienste basierend auf der angeforderten Domain oder dem Pfad, wodurch die Zugänglichkeit und Sicherheit Ihrer Dienste erheblich verbessert wird.

sudo nano /etc/caddy/Caddyfile
Schritt 2: Erstellung der Caddyfile unter dem Pfad /etc/caddy/Caddyfile zur Konfiguration des Caddy-Servers nach Ihren Anforderungen

Hier ist ein Beispiel für eine Caddyfile, die Sie verwenden können. Ersetzen Sie example.com durch Ihre eigene Domain wenn Sie bereits eine Domain und DynDNS besitzen. Im nachfolgenden Tutorial „5. DynDNS mit Fritzbox: Einrichtung des kostenlosen DynDNS-Dienstes über die Fritzbox mit Selfhost“ werden wir erörtern, wie Sie sich eine kostenfreie Domain für diesen Zweck zulegen können.

example.com {
    reverse_proxy vaultwarden:80
}

Wichtiger Hinweis an dieser Stelle: Verwenden Sie den obigen beispielhaft angegebenen Inhalt für die Caddyfile nicht, sondern rufen Sie bitte die weiteren Selfhosting Tutorials auf und nehmen bitte aus Sicherheitsgründen die dortige angegebene Caddyfile.

Um den obigen Inhalt in die Caddyfile einzufügen, können Sie ihn zunächst in Ihren Zwischenspeicher kopieren (Strg+C). In der Nano-Editor-Sitzung fügen Sie den Inhalt ein, indem Sie die rechte Maustaste drücken und dann die Option „Paste“ (Einfügen) wählen, die in Ihrem Remote-Desktop-Manager (RDM) angezeigt wird.

Schritt 3: Übertragung des kopierten Inhalts in die Caddyfile durch Einfügen mittels Rechtsklick und Auswahl von ‚Paste‘ im Nano-Editor Ihrer Remote-Desktop-Manager-Sitzung

Speichern und Schließen Sie die Caddyfile:

  • Um die Datei zu speichern, drücken Sie Strg + O und dann Enter.
  • Um den Editor zu verlassen, drücken Sie Strg + X.

Externes Netzwerk erstellen

Bevor Sie die Container via Portainer starten, müssen Sie ein externes Netzwerk manuell im Terminal erstellen:

docker network create caddy_reverse_proxy
Erstellung des Caddy-Netzwerks

Schritt: Fügen Sie die Docker Compose Datei für Caddy in den Stack via Portainer ein

Nachdem die Caddyfile vorbereitet wurde, ist es an der Zeit, die Docker Compose Datei für Caddy in den Stack via Portainer einzufügen.

Öffnen Sie Portainer in Ihrem Webbrowser mit http://Ihre-lokale-IP-vom-Raspberry-Pi:9000 und melden Sie sich an.

Schritt 4: Zugriff auf Portainer über http://Ihre-lokale-IP-vom-Raspberry-Pi:9000 im Webbrowser und Anmeldung im System

Überprüfung des zuvor erstellen Caddy-Netzwerks „caddy_reverse_proxy“ in Portainer:

Darstellung – caddy_reverse_proxy Netzwerk

Klicken Sie nun unter Environments auf „local“ – (blau umrandet)

Schritt 5: Auswahl des lokalen Umfelds durch Anklicken der Option ‚local‘ (blau umrandet) unter dem Abschnitt ‚Environments

Navigieren Sie in der linken Menüleiste zu „Stacks“ und klicken Sie in der sich daraufhin öffnenden Übersicht oben rechts auf den blauen Button „+ Add Stack“.

Schritt 6: Navigation zur Option ‚Stacks‘ in der linken Menüleiste, und anschließender Klick oben rechts auf den blauen Button ‚+ Add Stack‘, um zur Übersichtsseite für das Hinzufügen eines neuen Stacks zu gelangen

Geben Sie Ihrem Stack einen Namen, zum Beispiel caddy-stack.

Schritt 7: Benennen Sie Ihren Stack, indem Sie im dafür vorgesehenen Feld den Namen ‚caddy-stack‘ eingeben

Kopieren Sie den folgenden Inhalt und fügen Sie ihn in das Feld Web editor ein:

version: '3.7'

services:
  caddy:
    image: caddy:latest
    container_name: caddy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /etc/caddy/Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - caddy_reverse_proxy
    restart: unless-stopped
    deploy:
         labels:
            - com.docker.security.seccomp.profile=default

volumes:
  caddy_data:
  caddy_config:

networks:
  caddy_reverse_proxy:
    external: true
Schritt 8: Kopieren Sie den nachfolgend aufgeführten Text und fügen Sie ihn in das Feld ‚Web editor‘ ein, um die Konfiguration für Ihren Caddy-Stack bereitzustellen

Scrollen Sie nach unten zum Bereich „Action“ und klicken Sie auf die Schaltfläche „Deploy the stack“, um den Caddy-Service zu starten.

Schritt 9: Deployen des Stacks

Nach dem Deployment sollte Caddy nun als Reverse Proxy laufen und die Anfragen an Ihre Dienste entsprechend der Konfiguration in der Caddyfile weiterleiten.

Hinweis: Wenn Sie planen, mehrere Docker-Compose-Projekte mit Diensten zu haben, die entweder:

  1. Direkt miteinander kommunizieren müssen,
  2. Vom gleichen Reverse Proxy (Caddy) verwaltet werden,

dann macht es Sinn, von Anfang an ein externes Netzwerk wie caddy_reverse_proxy zu erstellen. Dies bietet folgende Vorteile:

  • Einfachheit: Alle Ihre Projekte können dasselbe Netzwerk verwenden, sodass Sie sich nicht um individuelle Netzwerkkonfigurationen für jedes Projekt kümmern müssen.
  • Kommunikation: Dienste aus verschiedenen Compose-Dateien können leicht miteinander kommunizieren, wenn sie im selben Netzwerk sind.
  • Zentralisierung: Ein gemeinsames Netzwerk für Ihren Reverse-Proxy und alle anderen Dienste erleichtert die Verwaltung und Fehlerbehebung.

Es ermöglicht Ihnen, problemlos weitere Dienste oder Container hinzuzufügen und sie ohne großen Aufwand in dasselbe Netzwerk zu integrieren. Wenn Sie zum Beispiel später einen anderen Service oder eine andere Anwendung hinzufügen möchten, müssen Sie nur sicherstellen, dass sie sich im gleichen externen Netzwerk befinden, und sie können sofort mit den bereits vorhandenen Diensten kommunizieren oder von Ihrem Reverse Proxy verwaltet werden.

Schritt 10: Nach erfolgreichem Deployment agiert Caddy nun als Reverse Proxy und leitet die Anfragen gemäß der Konfiguration in der Caddyfile an Ihre Dienste weiter

Deployment von Watchtower

Nachdem Caddy eingerichtet ist, wollen wir sicherstellen, dass unser Server stets mit der neuesten Version läuft, ohne manuelle Eingriffe. Dafür nutzen wir Watchtower, ein Automatisierungstool, das Ihre Docker-Container automatisch aktualisiert, wenn neue Images verfügbar sind.

Watchtower überprüft in regelmäßigen Abständen die Container auf Ihrem System und vergleicht die aktuell laufenden Versionen mit den auf dem Docker Hub oder einer anderen Docker-Image-Registry verfügbaren neuesten Versionen. Wenn es eine Aktualisierung gibt, holt sich Watchtower das neue Image und startet den Container neu mit der aktualisierten Version. Dies stellt sicher, dass Sie immer die neuesten Sicherheits- und Funktionsupdates für Ihre Container erhalten.

Einrichtung des Watchtower Stacks

  1. Erstellung des Watchtower Stacks:
    Navigieren Sie zurück zu der Stacks-Übersicht in Portainer und klicken Sie auf den blauen Button „+ Add Stack“.
  2. Benennung des Stacks:
    Geben Sie Ihrem Stack einen Namen, zum Beispiel watchtower-stack.
  3. Konfiguration des Stacks:
    Kopieren Sie den folgenden Inhalt und fügen Sie ihn in das Feld Web editor ein:
version: '3.3'
services:
  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_CLEANUP=true  # Entfernt alte Images nach dem Update
      - WATCHTOWER_SCHEDULE=0 0 4 * * *  # Geplante Aktualisierungen jeden Tag um 4 Uhr
    restart: always  # Stellt sicher, dass der Container nach einem Neustart automatisch gestartet wird

Schritt 11: Deployment von Watchtower

Deployment des Stacks:
Klicken Sie auf den Button Deploy the stack am unteren Rand der Seite.

Schritt 12: Im Bereich „Containers“ in Portainer überprüfen Sie, ob der neu erstellte Watchtower-Container erfolgreich läuft.

Mit Watchtower im Betrieb wird Ihr Caddy-Container automatisch aktualisiert, sobald neue Images verfügbar sind. Sie können die Logs von Watchtower überprüfen, um zu sehen, wann Aktualisierungen durchgeführt wurden oder ob Fehler aufgetreten sind.

Mit diesen Schritten ist Ihr Tutorial für das Deployment von Caddy und Watchtower komplett. Durch die Implementierung von Watchtower können Sie sich darauf verlassen, dass Ihre Docker-Container immer auf dem neuesten Stand sind, und Ihre Zeit für wichtigere Aufgaben freimachen.

Abschluss

Nach Abschluss dieser Anleitung haben Sie erfolgreich Caddy als Reverse Proxy eingerichtet und sind nun in der Lage, Ihre Dienste wie beispielsweise Vaultwarden, Nextcloud oder WireGuard VPN sicher und effizient zu veröffentlichen. Die automatisierte Handhabung von SSL/TLS-Zertifikaten durch Caddy erleichtert die Aufgabe, Ihre Dienste sicher im Internet zugänglich zu machen. Bei Fragen oder wenn Sie Unterstützung benötigen, zögern Sie nicht, einen Kommentar zu hinterlassen oder mich direkt zu kontaktieren. Mit der gewonnenen Kenntnis können Sie nun die spannende Reise in die Welt der selbst gehosteten Dienste beginnen und Ihre eigene, maßgeschneiderte Cloud-Infrastruktur aufbauen und verwalten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert