Wie Sie eine Website mit Caddy auf Ubuntu 22.04 hosten

Caddy ist ein Webserver, der auf Einfachheit und Sicherheit ausgelegt ist und über eine Reihe von Funktionen verfügt, die für das Hosting von Websites nützlich sind. Zum Beispiel kann er automatisch TLS-Zertifikate von Let’s Encrypt abrufen und verwalten, um HTTPS zu aktivieren, und unterstützt HTTP/2. HTTPS ist ein System zur Sicherung des Datenverkehrs zwischen Ihren Benutzern und Ihrem Server und wird zunehmend zu einer grundlegenden Erwartung für jede Website im produktiven Betrieb – ohne HTTPS werden Chrome und Firefox warnen, dass Ihre Website „nicht sicher“ ist, wenn Benutzer versuchen, Anmeldeinformationen einzugeben.

Erstellen und Hosten mit Caddy

In diesem Tutorial bauen Sie Caddy aus dem Quellcode mithilfe von xcaddy, einem benutzerdefinierten Caddy-Bautool, und nutzen es, um eine Website zu hosten, die mit HTTPS gesichert ist. Dies umfasst das Kompilieren, Konfigurieren mit einer Caddyfile und die Installation eines Plugins. Am Ende wird Ihre Domain statische Seiten bereitstellen, die mit kostenlosen TLS-Zertifikaten von Let’s Encrypt gesichert sind.

Voraussetzungen

  • Ein Ubuntu 22.04-Server mit Root-Rechten, mindestens 2 GB RAM und einem sekundären, nicht-root Konto.
  • Das Go-Toolchain-Set ist auf Ihrem Server installiert.
  • Eine vollständig registrierte Domain.
  • Ein A-DNS-Eintrag mit your_domain, der auf die öffentliche IP-Adresse Ihres Servers zeigt, sowie ein CNAME-DNS-Eintrag mit www.your_domain, der auf @ verweist.
  • Ein persönlicher Zugangsschlüssel (API-Key) mit Lese- und Schreibrechten für Ihr DigitalOcean-Konto.

Schritt 1: Caddy bauen

In diesem Schritt bauen Sie Caddy aus dem Quellcode mit der Möglichkeit, später Plugins hinzuzufügen, ohne den Quellcode von Caddy zu ändern. Sie verwenden xcaddy, um Caddy und seine Plugins entsprechend Ihren Bedürfnissen herunterzuladen und zu bauen.

Besuchen Sie die Seite der xcaddy-Veröffentlichungen und kopieren Sie den Link der neuesten Version für die linux_amd64-Plattform. Bevor Sie sie herunterladen, wechseln Sie mit folgendem Befehl zu /tmp:

Laden Sie dann die neueste Version mit wget herunter:

wget https://github.com/caddyserver/xcaddy/releases/download/v0.3.1/xcaddy_0.3.1_linux_amd64.tar.gz

Nachdem die Datei heruntergeladen wurde, extrahieren Sie nur die Binärdatei:

tar xvf xcaddy_0.3.1_linux_amd64.tar.gz xcaddy

Bewegen Sie anschließend die ausführbare Datei xcaddy nach /usr/bin, um sie systemweit verfügbar zu machen:

Nun, da xcaddy installiert ist, bauen Sie Caddy. Erstellen Sie dafür ein separates Verzeichnis zur Speicherung:

Wechseln Sie in dieses Verzeichnis:

Um die neueste Version von Caddy ohne Drittanbieter-Plugins zu bauen, führen Sie folgenden Befehl aus:

Dieser Befehl benötigt etwas Zeit, um abgeschlossen zu werden, aber es wird eine Ausgabe ähnlich der folgenden angezeigt:

2022/08/10 15:55:18 [INFO] Temporäres Verzeichnis: /tmp/buildenv_2022-08-10-1555.834895411

Sobald der Prozess abgeschlossen ist, befindet sich die ausführbare Datei caddy im aktuellen Verzeichnis. Verschieben Sie diese Datei nach /usr/bin, um sie zu installieren:

Überprüfen Sie die Installation, indem Sie den Befehl caddy version ausführen:

Die Ausgabe zeigt die Version von Caddy, die Sie gerade kompiliert haben:

Ausgabe: v2.6.1 h1:EDqo59TyYWhXQnfde93Mmv4FJfYe00dO60zMiEt+pzo=

Schritt 2: Installation von Caddy

Erstellen eines Systembenutzers für Caddy

Nachdem Sie überprüft haben, dass Caddy erfolgreich gebaut wurde, können Sie es als systemd-Dienst konfigurieren. Um Caddy sicher auszuführen, benötigt es einen eigenen Benutzer und eine eigene Gruppe. Diese Schritte schützen Ihren Server, indem sie sicherstellen, dass der Dienst mit eingeschränkten Berechtigungen läuft.

Erstellen Sie zunächst eine neue Systemgruppe namens caddy mit folgendem Befehl:

sudo groupadd --system caddy

Erstellen Sie anschließend den Benutzer caddy, der zur Gruppe caddy gehört. Dieser Benutzer wird den Webserver ausführen, jedoch keine direkten Login-Berechtigungen haben:

sudo useradd --system \
    --gid caddy \
    --create-home \
    --home-dir /var/lib/caddy \
    --shell /usr/sbin/nologin \
    --comment "Caddy Webserver" \
    caddy

Dieser neue Benutzer hat nun ein Home-Verzeichnis unter /var/lib/caddy, aber keine Login-Shell, um unbefugten Zugriff zu verhindern. Mit diesem Schritt wird sichergestellt, dass Caddy in einer sicheren Umgebung läuft.

Rechteverwaltung und Verzeichnisse erstellen

Die Binärdatei von Caddy sollte nur von root geändert werden können, um Sicherheitslücken zu vermeiden. Ändern Sie den Eigentümer der Datei wie folgt:

sudo chown root:root /usr/bin/caddy

Setzen Sie die Berechtigungen der Datei auf 755, damit root vollständige Lese-, Schreib- und Ausführungsrechte hat, während andere Benutzer nur lesen und ausführen können:

sudo chmod 755 /usr/bin/caddy

Erstellen Sie nun das Verzeichnis /etc/caddy, das für die Konfigurationsdateien verwendet wird:

Setzen Sie die Eigentümer- und Gruppenrechte dieses Verzeichnisses wie folgt:

sudo chown -R root:caddy /etc/caddy

Erstellen Sie das Verzeichnis /etc/ssl/caddy, um TLS-Zertifikate sicher zu speichern, und setzen Sie die Berechtigungen so, dass nur der caddy-Benutzer darauf zugreifen kann:

sudo mkdir /etc/ssl/caddy
sudo chown -R root:caddy /etc/ssl/caddy
sudo chmod 0770 /etc/ssl/caddy

Installation und Aktivierung des Caddy-Dienstes

Laden Sie die systemd-Unit-Datei von Caddy herunter, um es als Dienst zu konfigurieren:

sudo sh -c 'curl https://raw.githubusercontent.com/caddyserver/dist/master/init/caddy.service > /etc/systemd/system/caddy.service'

Setzen Sie die Berechtigungen der Datei so, dass sie nur vom Benutzer root bearbeitet werden kann:

sudo chmod 644 /etc/systemd/system/caddy.service

Laden Sie den systemd-Daemon neu, um die Änderungen zu übernehmen:

sudo systemctl daemon-reload

Aktivieren Sie den Caddy-Dienst, sodass er beim Systemstart geladen wird, und starten Sie ihn direkt:

sudo systemctl enable caddy
sudo systemctl start caddy

Überprüfen Sie den Status des Dienstes mit:

sudo systemctl status caddy

Mit diesem Schritt haben Sie Caddy erfolgreich als systemd-Dienst installiert und gestartet.

Schritt 3: Konfiguration von Caddy

In diesem Abschnitt erstellen Sie eine grundlegende Konfiguration für Caddy, um statische Dateien von Ihrem Server bereitzustellen.

Erstellen Sie eine grundlegende HTML-Datei namens index.html im Verzeichnis /var/www:

sudo nano /var/www/index.html

Fügen Sie die folgenden Zeilen ein:

<!DOCTYPE html>
<html>
<head>
    <title>Hallo von Caddy!</title>
</head>
<body>
    <h1 style="font-family: sans-serif">Diese Seite wird von Caddy bereitgestellt</h1>
</body>
</html>

Wenn diese Datei in einem Webbrowser angezeigt wird, zeigt sie eine Überschrift mit dem Text „Diese Seite wird von Caddy bereitgestellt“. Speichern und schließen Sie die Datei.

Caddy liest seine Konfiguration aus einer Datei namens Caddyfile, die sich unter /etc/caddy befindet. Erstellen und öffnen Sie die Datei zur Bearbeitung:

sudo nano /etc/caddy/Caddyfile

Fügen Sie die folgenden Zeilen hinzu:

http:// {
    root * /var/www
    encode gzip
    file_server
}

Diese grundlegende Caddy-Konfiguration gibt an, dass der gesamte HTTP-Datenverkehr zu Ihrem Server mit Dateien (file_server) aus dem Verzeichnis /var/www (das als root festgelegt ist) bereitgestellt und mit gzip komprimiert wird, um die Ladezeiten auf der Clientseite zu reduzieren.

Caddy bietet verschiedene Direktiven für viele Anwendungsfälle. Zum Beispiel kann die log-Direktive nützlich sein, um alle HTTP-Anfragen zu protokollieren. Weitere Optionen finden Sie auf der offiziellen Dokumentationsseite für Direktiven.

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Um zu testen, ob alles korrekt funktioniert, starten Sie den Caddy-Dienst:

sudo systemctl start caddy

Führen Sie anschließend systemctl status aus, um Informationen über den Status des Caddy-Dienstes zu erhalten:

sudo systemctl status caddy

Sie erhalten die folgende Ausgabe:

Ausgabe:
● caddy.service - Caddy
     Geladen: geladen (/etc/systemd/system/caddy.service; deaktiviert; Vorgabeeinstellung: aktiviert)
     Aktiv: aktiv (läuft) seit Mi 2022-08-10 15:02:41 UTC; vor 2s
       Docs: https://caddyserver.com/docs/
   Haupt-PID: 5443 (caddy)
      Tasks: 7 (Limit: 1119)
     Speicher: 7.5M
        CPU: 30ms
     CGroup: /system.slice/caddy.service
             └─5443 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

Besuchen Sie nun die IP-Adresse Ihres Servers in einem Webbrowser. Ihre Beispiel-Webseite wird angezeigt mit dem Text „Diese Seite wird von Caddy bereitgestellt“.

Sie haben Caddy nun so konfiguriert, dass statische Dateien von Ihrem Server bereitgestellt werden. Im nächsten Schritt erweitern Sie die Funktionalität von Caddy durch Plugins.

Schritt 4: Aktivieren von automatischem TLS mit Let’s Encrypt

Plugins können das Verhalten von Caddy ändern und erweitern. Im Allgemeinen bieten sie zusätzliche Konfigurationsdirektiven, die sich an Ihren Anwendungsfall anpassen. In diesem Schritt aktivieren Sie die automatische Bereitstellung und Erneuerung von Let’s Encrypt-Zertifikaten mithilfe von TXT-DNS-Einträgen zur Verifizierung. Um die Verifizierung mithilfe von TXT-DNS-Einträgen durchzuführen, installieren Sie das offizielle Plugin, um mit der DigitalOcean-DNS-API zu arbeiten.

Um ein Plugin hinzuzufügen, müssen Sie Caddy mit xcaddy neu kompilieren und die Repositories der Plugins angeben, die verfügbar sein sollen. Führen Sie den folgenden Befehl aus, um Caddy mit Unterstützung für DigitalOcean-DNS zu kompilieren:

xcaddy build --with github.com/caddy-dns/digitalocean@master

Die Ausgabe wird etwa wie folgt aussehen:

...
2022/08/10 15:03:24 [INFO] exec (timeout=0s): /usr/local/go/bin/go get -d -v github.com/caddy-dns/digitalocean@master github.com/caddyserver/caddy/v2
go: downloading github.com/caddy-dns/digitalocean v0.0.0-20220527005842-9c71e343246b
go: downloading github.com/libdns/digitalocean v0.0.0-20220518195853-a541bc8aa80f
...

Sobald die Kompilierung abgeschlossen ist, verschieben Sie die erstellte Binärdatei in das Verzeichnis /usr/bin:

Setzen Sie anschließend die richtigen Berechtigungen:

sudo chown root:root /usr/bin/caddy
sudo chmod 755 /usr/bin/caddy

Im nächsten Schritt konfigurieren Sie Caddy, um mit der DigitalOcean-API zu arbeiten, um DNS-Einträge zu setzen. Damit Caddy auf Ihren API-Token zugreifen kann, bearbeiten Sie die systemd-Unit-Datei von Caddy, um eine Umgebungsvariable hinzuzufügen. Öffnen Sie die Datei zur Bearbeitung:

sudo nano /etc/systemd/system/caddy.service

Fügen Sie in der [Service]-Sektion die folgende Zeile hinzu, wobei Sie your_token_here durch Ihren API-Token ersetzen:

Environment=DO_AUTH_TOKEN=your_token_here

Speichern und schließen Sie die Datei. Laden Sie den systemd-Daemon neu, um sicherzustellen, dass die Konfiguration angewendet wurde:

sudo systemctl daemon-reload

Starten Sie Caddy neu, um die Konfigurationsänderungen zu übernehmen:

sudo systemctl restart caddy

Prüfen Sie, ob der Dienst korrekt gestartet wurde:

sudo systemctl status caddy

Wenn alles korrekt funktioniert, ist Caddy nun bereit, Ihre Website mit automatischem TLS von Let’s Encrypt zu hosten.

Fazit

Sie haben nun Caddy auf Ihrem Server installiert und konfiguriert, sodass statische Seiten unter Ihrer gewünschten Domain bereitgestellt und mit kostenlosen Let’s Encrypt TLS-Zertifikaten gesichert werden. Dieses Setup stellt sicher, dass Ihre Website über HTTPS erreichbar ist und den aktuellen Sicherheitsanforderungen moderner Webdienste entspricht.

Die wichtigsten Erkenntnisse aus diesem Tutorial:

  • Sie haben Caddy aus dem Quellcode mit xcaddy gebaut und können Plugins und Funktionalitäten anpassen.
  • Sie haben Caddy als systemd-Dienst installiert und konfiguriert, damit es automatisch beim Systemstart ausgeführt wird.
  • Sie haben Caddy so konfiguriert, dass es statische Dateien mit gzip-Komprimierung bereitstellt, um die Ladezeiten auf der Client-Seite zu optimieren.
  • Sie haben Ihre Website mit Let’s Encrypt TLS-Zertifikaten gesichert und die DNS-Verifizierung über das DigitalOcean-API-Plugin konfiguriert.

Ein sinnvoller nächster Schritt wäre, Benachrichtigungen einzurichten, wenn neue Versionen von Caddy veröffentlicht werden. Sie könnten beispielsweise den Atom-Feed für Caddy-Veröffentlichungen oder einen dedizierten Dienst wie dependencies.io verwenden.

Sie können die Dokumentation von Caddy durchstöbern, um mehr Informationen über die Konfiguration und Erweiterung seiner Funktionen für Ihren Anwendungsfall zu erhalten. Mit seiner modularen Architektur und Benutzerfreundlichkeit ist Caddy ein leistungsstarkes Tool für Webhosting und Sicherheit.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: