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 mitwww.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
:
cd /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:
sudo mv xcaddy /usr/bin
Nun, da xcaddy installiert ist, bauen Sie Caddy. Erstellen Sie dafür ein separates Verzeichnis zur Speicherung:
mkdir ~/caddy
Wechseln Sie in dieses Verzeichnis:
cd ~/caddy
Um die neueste Version von Caddy ohne Drittanbieter-Plugins zu bauen, führen Sie folgenden Befehl aus:
xcaddy build
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:
sudo mv caddy /usr/bin
Überprüfen Sie die Installation, indem Sie den Befehl caddy version
ausführen:
caddy version
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:
sudo mkdir /etc/caddy
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
:
sudo mv caddy /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.