So hosten Sie eine Website mit Caddy unter CentOS 7

Einführung

Caddy ist ein neuer Webserver, der mit Blick auf die Benutzerfreundlichkeit erstellt wurde. Es ist einfach genug, um als schneller Entwicklungsserver verwendet zu werden, und robust genug, um in Produktionsumgebungen verwendet zu werden.

Es verfügt über eine intuitive Konfigurationsdatei, HTTP / 2-Unterstützung und automatische TLS-Verschlüsselung. HTTP / 2 ist die neue Version des HTTP-Protokolls, mit der Websites schneller werden, indem unter anderem eine einzelne Verbindung zum Übertragen mehrerer Dateien und zur Komprimierung von Headern verwendet wird. TLS wird für die Bereitstellung von Websites verwendet, die über eine sichere Verbindung verschlüsselt sind. Obwohl es im Internet weit verbreitet ist, ist es oft mühsam, Zertifikate manuell abzurufen und zu installieren.

Caddy arbeitet eng mit Let’s Encrypt zusammen, einer kostenlosen Zertifizierungsstelle TLS / SSL-Zertifikate und ruft die Zertifikate bei Bedarf automatisch ab und erneuert sie. Mit anderen Worten, jede Website, die Caddy bedient, kann automatisch über eine sichere Verbindung bedient werden, ohne dass eine zusätzliche Konfiguration oder Aktion erforderlich ist.

In diesem Tutorial installieren und konfigurieren Sie Caddy. Nachdem Sie dieses Tutorial durchgearbeitet haben, erhalten Sie eine einfache funktionierende Website, die über HTTP / 2 und eine sichere TLS-Verbindung bereitgestellt wird.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Ein mit https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7 eingerichteter CentOS 7-Server, einschließlich eines sudo-Benutzers ohne Rootberechtigung.

  • Ein Domänenname, der so konfiguriert ist, dass er auf Ihren Server verweist. Dies ist erforderlich, damit Caddy ein SSL-Zertifikat für die Website erhalten kann. Ohne die Verwendung eines geeigneten Domainnamens wird die Website nicht sicher mit TLS-Verschlüsselung bereitgestellt. Sie können lernen, wie Sie Domains auf DigitalOcean Droplets verweisen, indem Sie How To Setup a Hostname mit DigitalOcean Tutorial.

  • Optional kann der Texteditor "+ nano " mit " sudo yum install nano " installiert werden. CentOS wird standardmäßig mit dem Texteditor ` vi ` ausgeliefert, ` nano +` kann jedoch benutzerfreundlicher sein.

Schritt 1 - Installieren der Caddy-Binärdateien

Das Caddy-Projekt enthält ein Installationsskript, mit dem die Binärdateien des Caddy-Servers abgerufen und installiert werden. Geben Sie zum Ausführen Folgendes ein:

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

Sie können das Skript anzeigen, indem Sie "+ https: // getcaddy.com " in Ihrem Browser aufrufen oder die Datei mit " wget" oder "+ curl" herunterladen, bevor Sie sie ausführen.

Während der Installation verwendet das Skript "+ sudo +", um Administratorrechte zu erhalten, damit Caddy-Dateien in systemweiten Verzeichnissen abgelegt werden können, sodass Sie möglicherweise zur Eingabe eines Kennworts aufgefordert werden.

Die Befehlsausgabe sieht folgendermaßen aus:

Caddy installation script outputDownloading Caddy for linux/amd64...
https://caddyserver.com/download/linux/amd64?plugins=
Extracting...
Putting caddy in /usr/local/bin (may require password)
[sudo] password for sammy:
Caddy 0.10.2
Successfully installed

Nach Abschluss des Skripts werden die Caddy-Binärdateien auf dem Server installiert und können verwendet werden. Sie können überprüfen, ob Caddy-Binärdateien vorhanden sind, indem Sie "+ which +" verwenden, um deren Position zu überprüfen.

which caddy

Die Befehlsausgabe besagt, dass sich die Caddy-Binärdatei in + / usr / local / bin / caddy + befindet.

Caddy erstellt während der Installation keine systemweite Konfiguration und installiert sich nicht als Dienst. Dies bedeutet, dass es während des Startvorgangs nicht automatisch gestartet wird. In den nächsten Schritten erstellen wir das Benutzerkonto für Caddy, die Dateien, die Caddy benötigt, um zu funktionieren, und installieren die Servicedatei.

Schritt 2 - Benutzer und Gruppe für Caddy erstellen

Während Apache und Nginx, zwei der beliebtesten HTTP-Server, während der Installation aus Systempaketen eigene, nicht privilegierte Benutzer erstellen, tut Caddy dies nicht. Aus Sicherheitsgründen sollte es auch nicht mit dem Superuser-Konto "+ root " gestartet werden. In diesem Schritt erstellen wir einen dedicadierten Benutzer mit dem Namen " caddy +", der ausschließlich zum Ausführen von Caddy und zum Zugreifen auf seine Dateien verwendet wird.

Geben Sie Folgendes ein, um einen Benutzer mit dem Namen "+ Caddy +" zu erstellen:

sudo adduser -r -d /var/www -s /sbin/nologin

Der Schalter "+ -r " macht das neu erstellte Konto zu einem sogenannten Systemkonto. Der Schalter " -d " bezeichnet das Ausgangsverzeichnis für diesen Benutzer. In unserem Fall ist es " / var / www ", das wir erstellen später. Der nichtprivilegierte Benutzer sollte nicht in der Lage sein, sich anzumelden und auf die System-Shell zuzugreifen. Dies stellen wir sicher, indem der Schalter " -s " eine gewünschte Shell auf " / sbin / nologin " setzt, ein Systembefehl, der die Systemanmeldung nicht zulässt. Der letzte Parameter ist der Benutzername selbst - in unserem Fall "+".

Sobald der Benutzer für den Caddy-Webserver verfügbar ist, können wir im nächsten Schritt die erforderlichen Verzeichnisse zum Speichern der Caddy-Konfigurationsdateien konfigurieren.

Schritt 3 - Einrichten der erforderlichen Verzeichnisse

Die automatische TLS-Unterstützung und die Unit-Datei von Caddy (die wir im nächsten Schritt installieren werden) setzen voraus, dass bestimmte Verzeichnisse und Dateien mit bestimmten Berechtigungen vorhanden sind. In diesem Schritt erstellen wir sie alle.

Erstellen Sie zunächst ein Verzeichnis, in dem sich das Hauptverzeichnis "+ Caddyfile +" befindet. Hierbei handelt es sich um eine Konfigurationsdatei, die Caddy mitteilt, welche Websites wie bedient werden sollen.

sudo mkdir /etc/caddy

Ändern Sie den Eigentümer dieses Verzeichnisses in den Benutzer * root * und dessen Gruppe in * www-data *, damit Caddy es lesen kann.

sudo chown -R root:caddy /etc/caddy

Erstellen Sie in diesem Verzeichnis ein leeres "+ Caddyfile +", das wir später bearbeiten werden.

sudo touch /etc/caddy/Caddyfile

Erstellen Sie ein anderes Verzeichnis in + / etc / ssl +. Caddy benötigt dies, um die privaten SSL-Schlüssel und -Zertifikate zu speichern, die es automatisch von Let’s Encrypt erhält.

sudo mkdir /etc/ssl/caddy

Caddy muss in der Lage sein, in dieses Verzeichnis zu schreiben, wenn es das Zertifikat erhält, also machen Sie den Besitzer zum * Caddy * -Benutzer. Sie können die Gruppe unverändert als * root * belassen:

sudo chown -R caddy:root /etc/ssl/caddy

Stellen Sie dann sicher, dass niemand anderes diese Dateien lesen kann, indem Sie alle Zugriffsrechte für andere entfernen.

sudo chmod 0770 /etc/ssl/caddy

Das endgültige Verzeichnis, das wir erstellen müssen, ist dasjenige, in dem die Website selbst veröffentlicht wird. Wir werden "+ / var / www +" verwenden, was üblich ist und auch der Standardpfad, wenn wir andere Webserver wie Apache oder Nginx verwenden.

sudo mkdir /var/www

Dieses Verzeichnis sollte vollständig im Besitz von * caddy * sein.

sudo chown caddy:caddy /var/www

Sie haben jetzt die erforderliche Umgebung für die Ausführung von Caddy vorbereitet. Im nächsten Schritt werden wir Caddy als Systemdienst konfigurieren, um sicherzustellen, dass er mit dem Systemstart beginnt und mit "+ systemctl +" verwaltet werden kann.

Schritt 4 - Caddy als Systemdienst installieren

Während sich Caddy nicht als Dienst installiert, bietet das Projekt eine offizielle https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files [+ systemd + unit file]. Diese Datei nimmt die Verzeichnisstruktur an, die wir im vorherigen Schritt eingerichtet haben. Stellen Sie daher sicher, dass Ihre Konfiguration übereinstimmt.

Laden Sie die Datei aus dem offiziellen Caddy-Repository herunter. Der zusätzliche Parameter "+ -o " zum Befehl " curl " speichert die Datei im Verzeichnis " / etc / systemd / system / " und macht sie für " systemd +" sichtbar.

sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service

Bevor wir weitermachen können, müssen wir die Datei leicht modifizieren, damit unser nicht privilegierter Benutzer "+ caddy +" den Server ausführt.

Öffnen wir die Datei mit "+ vi " oder Ihrem bevorzugten Texteditor (hier ist eine https://www.digitalocean.com/community/tutorials/installing-and-using-the-vim-text-editor-on-a-cloud) -server # modal-editing [kurze Einführung in ` vi +`])

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

und suchen Sie das Fragment, das für die Angabe des Benutzerkontos und der Gruppe verantwortlich ist.

/etc/systemd/system/caddy.service

; User and group the process will run as.
User=
Group=

Ändern Sie beide Werte wie folgt in "+ Caddy +":

/etc/systemd/system/caddy.service

; User and group the process will run as.
User=
Group=

Speichern und schließen Sie die Datei, um sie zu beenden. Die Servicedatei kann jetzt mit unserer Installation verwendet werden. Machen Sie + systemd + auf die neue Servicedatei aufmerksam.

sudo systemctl daemon-reload

Aktivieren Sie dann Caddy, um beim Booten ausgeführt zu werden.

sudo systemctl enable caddy.service

Sie können überprüfen, ob der Dienst ordnungsgemäß geladen und für den Start beim Systemstart aktiviert wurde, indem Sie seinen Status überprüfen.

sudo systemctl status caddy.service

Die Ausgabe sollte wie folgt aussehen:

Caddy service status output● caddy.service - Caddy HTTP/2 web server
  Loaded:  (/etc/systemd/system/caddy.service; ; vendor preset: disabled)
  Active: inactive (dead)
    Docs: https://caddyserver.com/docs

Konkret heißt es, dass der Dienst * geladen * und * aktiviert * ist, aber noch nicht ausgeführt wird. Wir werden den Server noch nicht starten, da die Konfiguration noch unvollständig ist.

Sie haben Caddy jetzt als Systemdienst konfiguriert, der beim Booten automatisch gestartet wird, ohne dass Sie ihn manuell ausführen müssen. Als Nächstes lassen wir den Webdatenverkehr durch die Firewall zu.

Schritt 5 - Zulassen von HTTP- und HTTPS-Verbindungen (optional)

Wenn Sie dem Additional Recommended Steps for New CentOS 7 Servers -Tutorial ebenfalls gefolgt sind und a verwenden Firewall müssen wir manuell Firewall-Regeln hinzufügen, um den Internetverkehr an Caddy weiterzuleiten.

Caddy bedient Websites mit den Protokollen HTTP und HTTPS. Daher müssen wir den Zugriff auf die entsprechenden Ports zulassen, damit Caddy über das Internet verfügbar ist.

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

Wenn alle drei Befehle ausgeführt werden, wird die folgende Erfolgsmeldung ausgegeben:

firewall-cmd outputsuccess

Auf diese Weise kann Caddy den Besuchern Websites frei zur Verfügung stellen. Im nächsten Schritt erstellen wir eine Beispielwebseite und aktualisieren die Caddy-Datei, um sie bereitzustellen und die Caddy-Installation zu testen.

Schritt 6 - Erstellen einer Test-Webseite und einer Caddy-Datei

Beginnen wir mit der Erstellung einer sehr einfachen HTML-Seite, auf der eine einfache * Hello World! * - Nachricht angezeigt wird. Dieser Befehl erstellt eine "+ index.html " - Datei in dem zuvor erstellten Website-Verzeichnis mit nur der Textzeile " <h1> Hallo Welt! </ H1> +".

echo '<h1>Hello World!</h1>' | sudo tee /var/www/index.html

Als nächstes füllen wir das "+ Caddyfile " aus. Das ` Caddyfile +` besteht in seiner einfachsten Form aus einem oder mehreren Serverblöcken, die jeweils die Konfiguration für eine einzelne Website definieren. Ein Serverblock beginnt mit einer Adressdefinition und wird von geschweiften Klammern gefolgt. In die geschweiften Klammern können Sie Konfigurationsanweisungen einfügen, die auf diese Website angewendet werden sollen.

Eine Adressendefinition wird in der Form +: //: + angegeben. Caddy übernimmt einige Standardeinstellungen von selbst, wenn Sie einige Felder leer lassen. Wenn Sie beispielsweise das Protokoll, aber nicht den Port angeben, wird dieser automatisch abgeleitet (d. H. Port + 80 + wird für HTTP und Port + 443 + für HTTPS angenommen). Die Regeln für das Adressformat sind ausführlich in der offiziellen Caddyfile-Dokumentation beschrieben.

Öffnen Sie das in Schritt 2 erstellte "+ Caddyfile " mit " vi +" oder Ihrem bevorzugten Texteditor.

sudo vi /etc/caddy/Caddyfile

Fügen Sie den folgenden Inhalt ein:

/ etc / caddy / Caddyfile

http:// {
   root /var/www
   gzip
}

Speichern Sie dann die Datei und beenden Sie sie. Lassen Sie uns erklären, was dieses spezielle Caddyfile macht.

Hier verwenden wir ": // +" für die Adressdefinition. Dies teilt Caddy mit, dass es sich an den Port " 80 +" binden und alle Anforderungen unter Verwendung des normalen HTTP-Protokolls (ohne TLS-Verschlüsselung) bedienen soll, unabhängig vom Domänennamen, der für die Verbindung zum Server verwendet wird. Auf diese Weise können Sie über die IP-Adresse Ihres Servers auf die von Caddy gehosteten Websites zugreifen.

In den geschweiften Klammern unseres Serverblocks befinden sich zwei Anweisungen:

  • Die Direktive + root + teilt Caddy mit, wo sich die Website-Dateien befinden. In unserem Beispiel haben wir die Testseite "+ / var / www +" erstellt.

  • Die Direktive "+ gzip +" weist Caddy an, die Gzip-Komprimierung zu verwenden, um die Website schneller zu machen. Es ist keine zusätzliche Konfiguration erforderlich.

Sobald die Konfigurationsdatei fertig ist, starten Sie den Caddy-Dienst.

sudo systemctl start caddy

Wir können jetzt testen, ob die Website funktioniert. Hierfür verwenden Sie die öffentliche IP-Adresse Ihres Servers. Wenn Sie die IP-Adresse Ihres Servers nicht kennen, können Sie sie mit "+ curl -4 icanhazip.com " abrufen. Wenn Sie es haben, besuchen Sie " http: // +" in Ihrem Lieblingsbrowser, um die * Hello World! * - Website aufzurufen.

Dies bedeutet, dass Ihre Caddy-Installation ordnungsgemäß funktioniert. Im nächsten Schritt aktivieren Sie mit der automatischen TLS-Unterstützung von Caddy eine sichere Verbindung zu Ihrer Website.

Schritt 7 - Konfigurieren von automatischem TLS

Eine der Hauptfunktionen, die Caddy von anderen Webservern unterscheidet, ist die Fähigkeit, TLS-Zertifikate von Let’s Encrypt, einer kostenlosen Zertifizierungsstelle, automatisch anzufordern und zu erneuern. Um Caddy so einzurichten, dass Websites automatisch über eine sichere Verbindung bedient werden, muss nur eine Zeile in der Caddy-Datei geändert werden.

Caddy kümmert sich darum, die sichere HTTPS-Verbindung für alle konfigurierten Serverblöcke zu aktivieren und die erforderlichen Zertifikate automatisch zu erhalten, vorausgesetzt, einige Anforderungen werden von der Konfiguration der Serverblöcke erfüllt.

Damit TLS funktioniert, müssen die folgenden Anforderungen erfüllt sein:

  • Caddy muss in der Lage sein, sich für HTTPS an Port + 443 + zu binden, und derselbe Port muss über das Internet zugänglich sein.

  • Das Protokoll darf nicht auf HTTP gesetzt sein, der Port darf nicht auf "+ 80 " gesetzt sein und TLS darf nicht explizit deaktiviert oder mit anderen Einstellungen überschrieben werden (z. B. mit der Direktive " tls +" im Serverblock).

  • Der Hostname muss ein gültiger Domainname sein. Es darf nicht leer oder auf "+ localhost +" oder eine IP-Adresse gesetzt sein. Dies ist erforderlich, da Let’s Encrypt nur Zertifikate für gültige Domainnamen ausstellen kann.

  • Caddy muss die E-Mail-Adresse kennen, die für die Schlüsselwiederherstellung mit Let’s Encrypt verwendet werden kann.

Wenn Sie diesem Lernprogramm gefolgt sind, ist die erste Voraussetzung bereits erfüllt. Die aktuelle Serverblockadresse ist jedoch einfach als "+: // +" konfiguriert und definiert ein einfaches HTTP-Schema ohne Verschlüsselung sowie ohne Domänennamen. Wir haben Caddy auch keine E-Mail-Adresse zur Verfügung gestellt, die Let’s Encrypt benötigt, um ein Zertifikat anzufordern. Wenn die Adresse in der Konfiguration nicht angegeben ist, fragt Caddy beim Start danach. Da Caddy jedoch als Systemdienst installiert ist, kann es beim Start keine Fragen stellen und wird daher überhaupt nicht ordnungsgemäß gestartet.

Um dies zu beheben, öffnen Sie das Caddyfile zum erneuten Bearbeiten.

sudo vi /etc/caddy/Caddyfile

Ersetzen Sie zunächst die Adressdefinition von "+ http: // " durch Ihre Domain. Dadurch wird die durch HTTP erzwungene unsichere Verbindung entfernt und ein Domänenname für das TLS-Zertifikat bereitgestellt. Zweitens geben Sie Caddy eine E-Mail-Adresse mit der Direktive " tls +" im Serverblock.

Das geänderte "+ Caddyfile +" sollte wie folgt aussehen, wobei Ihre Domain und E-Mail-Adresse ersetzt werden:

/ etc / caddy / Caddyfile

{
   root /var/www
   gzip

}

Speichern Sie die Datei und beenden Sie den Editor. Starten Sie Caddy neu, um die Änderungen zu übernehmen.

sudo systemctl restart caddy

Rufen Sie nun mit Ihrem Browser "+ https: // +" auf, um zu überprüfen, ob die Änderungen korrekt angewendet wurden. Wenn ja, sollten Sie noch einmal die Seite * Hello World! * Sehen. Dieses Mal können Sie überprüfen, ob die Website mit HTTPS bereitgestellt wird, indem Sie die URL überprüfen oder in der URL-Leiste nach einem Schlosssymbol suchen.

Fazit

Sie haben Caddy nun so konfiguriert, dass Ihre Website über eine sichere TLS-Verbindung ordnungsgemäß bereitgestellt wird. Es ruft automatisch Zertifikate von Let’s Encrypt ab und erneuert sie, versorgt Ihre Site über eine sichere Verbindung mit dem neueren HTTP / 2-Protokoll und reduziert die Ladezeit durch die Verwendung der gzip-Komprimierung.

Dies ist ein einfaches Beispiel für den Einstieg in Caddy. Weitere Informationen zu den einzigartigen Funktionen und Konfigurationsanweisungen von Caddy für das Caddyfile finden Sie in der offiziellen Caddy-Dokumentation unter https://caddyserver.com/docs.