So installieren Sie den Caddy-Webserver unter Linux

Heutzutage ist eine sichere Verbindung über HTTPS für den Betrieb einer Webseite unerlässlich. Ohne diese Verschlüsselung könnten sensible Nutzerdaten ungeschützt im Internet übertragen werden. Um dieses Risiko zu minimieren, greifen viele Linux-Webmaster auf Tools wie LetsEncrypt zurück, die die Erstellung von Zertifikaten erleichtern. Trotz der Vereinfachung durch LetsEncrypt kann die Aktivierung auf Servern mit Nginx oder Apache unter Linux immer noch kompliziert sein. Glücklicherweise gibt es eine komfortablere Lösung: den Caddy-Webserver. Dieser Server aktiviert HTTPS standardmäßig, wodurch die üblichen Probleme mit SSL-Zertifikaten entfallen.

Installation von Caddy

Die Installation des Caddy-Webservers verläuft unabhängig vom verwendeten Serverbetriebssystem sehr ähnlich. Die Benutzerfreundlichkeit der Installation ist auf die Entscheidung der Entwickler zurückzuführen, ein Bash-Skript zum Herunterladen und Installieren der Software zu verwenden. So entfällt das Hinzufügen von Software-Repositories oder die Installation über Binärdateien.

In diesem Tutorial wird der Ubuntu Server als Beispiel verwendet, wobei der Caddy-Webserver auf den meisten anderen Linux-Distributionen, einschließlich Desktop-Systemen, problemlos funktioniert. Zunächst muss das Curl-Programm auf dem Linux-Rechner installiert sein. Falls nicht, kann es über den Paketmanager installiert werden.

Hinweis: Ob Curl bereits installiert ist, lässt sich durch Ausführen des Befehls `curl` im Terminal überprüfen. Erscheint die Hilfeseite, ist Curl bereits vorhanden.

curl https://getcaddy.com | bash -s personal

Die private Nutzung von Caddy ist kostenlos. Falls Caddy jedoch in einer kommerziellen Umgebung eingesetzt werden soll, muss der Installationsbefehl angepasst werden:

curl https://getcaddy.com | bash -s commercial

Der Befehl führt das Skript über die Bash aus und startet den Installationsprozess automatisch. Das Caddy-Installationsprogramm lädt die Binärdatei des Webservers herunter und platziert sie im Verzeichnis `/usr/local/bin/`. Bei erfolgreicher Installation erscheint die Meldung „Successfully Installed“.

Nach der Installation müssen die Rechte der Caddy-Binärdatei angepasst werden. Führen Sie folgenden Befehl im Terminal mit sudo-Rechten aus:

sudo setcap cap_net_bind_service=+ep /usr/local/bin/caddy

Konfiguration von Caddy

Nach der Installation muss Caddy konfiguriert werden, insbesondere die Verzeichnisstruktur. Um dies zu beschleunigen, ist es sinnvoll, im Root-Terminal zu arbeiten, um nicht für jeden Befehl `sudo` gefolgt vom Passwort eingeben zu müssen.

Auf den meisten Systemen kann man sich direkt als Root-Benutzer anmelden:

su

Auf Ubuntu-Servern ist das Root-Konto aus Sicherheitsgründen jedoch gesperrt. Man erhält eine Root-Shell über:

sudo -s

Sobald der Root-Zugriff gegeben ist, können die benötigten Verzeichnisse für den Caddy-Server erstellt werden:

mkdir /etc/caddy
mkdir /etc/ssl/caddy

Hinweis: Sollte bereits ein Verzeichnis `/var/www/` existieren, kann der letzte `mkdir`-Befehl übersprungen werden.

mkdir /var/www

Als Nächstes wird eine neue „Caddyfile“ im Ordner `/etc/caddy/` erstellt:

touch /etc/caddy/Caddyfile

Die Rechte für den Unterordner `/etc/ssl/caddy` werden mit dem Befehl `chmod` angepasst:

chmod 0770 /etc/ssl/caddy

Zuletzt wird das Verzeichnis `/var/www/` dem Benutzer `www-data` zugeordnet:

chown www-data: /var/www

Caddy Systemd-Datei

Die meisten Server, speziell Ubuntu Server, verwenden `systemd` als Init-System. Da der Webserver über ein Bash-Skript installiert wird, muss die systemd-Datei manuell erstellt werden. Zuerst wird eine leere Servicedatei erzeugt:

touch /lib/systemd/system/caddy.service

Diese neue Datei `caddy.service` wird mit folgendem Inhalt befüllt:

[Unit]
Description=Caddy HTTP/2-Webserver
Documentation=https://caddyserver.com/docs
After=network-online.target
Wants=network-online.target

[Service]
Restart=on-failure
StartLimitInterval=86400
StartLimitBurst=5

User=www-data
Group=www-data
; Von Letsencrypt ausgestellte Zertifikate werden in dieses Verzeichnis geschrieben.
Environment=CADDYPATH=/etc/ssl/caddy

ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp
ExecReload=/bin/kill -USR1 $MAINPID

LimitNOFILE=1048576
LimitNPROC=64

PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=full
ReadWriteDirectories=/etc/ssl/caddy

; Die folgenden zusätzlichen Sicherheitsanweisungen funktionieren nur mit systemd v229 oder höher.
; Sie schränken Privilegien, die Caddies erlangen können, weiter ein. Entkommentieren Sie, wenn Sie möchten.
; Beachten Sie, dass Sie möglicherweise Funktionen hinzufügen müssen, die von verwendeten Plugins benötigt werden.
;CapabilityBoundingSet=CAP_NET_BIND_SERVICE
;AmbientCapabilities=CAP_NET_BIND_SERVICE
;NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Dieser Codeblock ist umfangreich, daher ist Genauigkeit wichtig. Nach dem Speichern der Änderungen kann die Datei über Strg+X geschlossen werden.

systemctl enable caddy.service
systemctl start caddy.service

Nach der Einrichtung von systemd sollte alles bereit sein.

Einrichten von Domains

Vor der eigentlichen Nutzung von Caddy muss dieser konfiguriert werden. Zunächst wird ein Ordner für die Domain erstellt:

Hinweis: „test-domain.org“ muss durch die eigene Domain ersetzt werden.

mkdir -p /var/www/test-domain.org/

Anschließend wird die zuvor erstellte Datei `Caddyfile` bearbeitet:

nano /etc/caddy/Caddyfile

Fügen Sie folgenden Code hinzu, um die neue Domain zu aktivieren:

meine-domain.com {
    root /var/www/test-domain.org
    }

Der Caddy-Dienst wird neu gestartet, um die Änderungen zu übernehmen. Danach ist Caddy auf dem Server einsatzbereit.

systemctl restart caddy.service