So hosten Sie eine Website mit Caddy unter Ubuntu 16.04

Eine frühere Version dieses Tutorials wurde von Mateusz Papiernik geschrieben .

Der Autor hat die Wikimedia Foundation ausgewählt, um eine Spende in Höhe von 200 USD als Teil der Write for DOnations zu erhalten. Programm.

Einführung

Caddy ist ein Webserver, der auf Einfachheit und Sicherheit ausgelegt ist und eine Reihe von Funktionen bietet, die zum Hosten von Websites hilfreich sind. Beispielsweise kann es 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 schnell zu einer Grundvoraussetzung für jede Website, die in der Produktion ausgeführt wird. Ohne dieses System warnen Chrome und Firefox, dass Ihre Website "nicht sicher" ist, wenn Benutzer versuchen, sich anzumelden Information.

Bisher wurde für die Installation von Caddy empfohlen, vorgefertigte Binärdateien von der Caddy-Projektwebsite herunterzuladen. Aufgrund der jüngsten Änderungen an der Funktionsweise der Caddy-Lizenzierung ist es Ihnen jedoch nicht mehr gestattet, diese vorgefertigten Binärdateien für kommerzielle Zwecke zu verwenden, es sei denn, Sie zahlen eine Lizenzgebühr, selbst wenn Sie Caddy nur unternehmensintern verwenden. Glücklicherweise ist der Caddy-Quellcode immer noch vollständig Open Source und Sie können Caddy selbst erstellen, um Lizenzprobleme zu vermeiden.

In diesem Tutorial erstellen Sie Caddy aus dem Quellcode und hosten damit eine mit HTTPS gesicherte Website. Anschließend konfigurieren Sie Caddy mit einem "+ Caddyfile +", installieren Caddy-Plugins und erfahren, wie Sie Ihre Installation aktualisieren, wenn eine neue Version veröffentlicht wird.

Voraussetzungen

Bevor Sie mit diesem Handbuch beginnen, benötigen Sie Folgendes:

  • Ein Ubuntu 16.04-Server, der gemäß unserer Initial Server Setup guide konfiguriert wurde. Sie sollten in der Lage sein, über SSH eine Verbindung zum Server herzustellen, sich als Nicht-Root-Benutzer mit Sudo-Berechtigungen anzumelden und eine funktionierende Firewall mit UFW einzurichten.

  • Ein Domainname, der für die Verwendung der DNS-Verwaltung von DigitalOcean eingerichtet wurde. Sie können einen Domain-Namen von jedem Domain-Registrar kaufen und unserem Leitfaden unter Pointing folgen eine Domain für DigitalOcean Nameserver, um Ihren DNS über DigitalOcean zu verwalten.

  • Ein "A" -Eintrag, der von Ihrer Domain auf Ihren Server verweist, und optional ein "AAAA" -Eintrag, wenn Sie IPv6 aktivieren möchten. In unserem Leitfaden unter Einrichten eines Hostnamens mit DigitalOcean wird die Vorgehensweise erläutert mach das.

  • Die auf Ihrem Server installierte Toolchain Go language. Folgen Sie unserer Anleitung unter How to Install Go 1.6, um Go einzurichten. Sie sollten auch wissen, wie Sie Go-Code kompilieren und wie das Befehlszeilen-Tool + go + funktioniert. Folgen Sie unserem Leitfaden unter Building Go Executables, um mehr darüber zu erfahren .

Schritt 1 - Caddy bauen

In diesem Schritt rufen Sie den Quellcode von Caddy ab und stellen sicher, dass Sie ihn kompilieren können. Caddy ist in Go geschrieben. Rufen Sie daher mit dem Befehlszeilentool + go get den Caddy-Quellcode von GitHub ab und speichern Sie ihn unter` + $ GOPATH / src / github.com / mholt / caddy`:

go get github.com/mholt/caddy/caddy

+ go get + benutzt Git um den Code von GitHub zu klonen. Git ist ein Versionskontrollsystem, das heißt, es zeichnet den Status eines Projekts auf, während Sie Änderungen vornehmen, und ermöglicht Ihnen, zu jedem vorherigen Status im Projektverlauf zurückzukehren. Standardmäßig lädt der Befehl + go get + die neueste Version des Quellcodes herunter. Es ist jedoch empfehlenswert, die neueste stabile Version von Caddy zu verwenden und nicht die neueste Version des Repositorys, die sich wahrscheinlich in der Mitte zwischen diesen befindet Veröffentlichungen. Unveröffentlichte Versionen können Fehler oder teilweise implementierte, fehlerhafte Funktionen aufweisen. Bei der neuesten stabilen Version ist es hingegen wahrscheinlicher, dass sie korrekt kompiliert und ausgeführt wird.

Um alle vorherigen Versionen anzuzeigen, navigieren Sie zunächst zu dem Verzeichnis, in dem Sie die Caddy-Quelle gespeichert haben:

cd $GOPATH/src/github.com/mholt/caddy

Zeigen Sie als Nächstes alle vorherigen Versionen von Caddy mit dem Befehl + git tag + an:

git tag

Es wird eine Ausgabe ähnlich der folgenden angezeigt:

Outputv0.10.0
v0.10.1
v0.10.10
v0.10.11
v0.10.12
v0.10.2
v0.10.3
v0.10.4
v0.10.5
. . .

Jedes Mal, wenn eine stabile Version von Caddy veröffentlicht wird, werden die Autoren dies in Git durch Hinzufügen eines Tags kennzeichnen. Mit Git können Sie den Code auf den Stand zum Zeitpunkt der letzten stabilen Veröffentlichung zurücksetzen. Finden Sie die höchste Versionsnummer in der Ausgabe. Zum Zeitpunkt des Schreibens ist dies "+ v0.10.12 +".

Da Sie die Quelle später ändern werden, um einige Plugins zu installieren, erstellen Sie eine neue Branche, um Ihre Änderungen zu speichern. In Git sind Verzweigungen eine Möglichkeit, gleichzeitig an verschiedenen Codeversionen zu arbeiten. Mit ihnen können Sie zwischen einer Version des Codes mit Ihren persönlichen Änderungen und der „offiziellen“ Version des Codes wechseln. Um einen neuen Zweig zu erstellen, verwenden Sie den Befehl + git checkout +, der den Zweig wechselt. Die Option "+ -b +" weist Git an, einen neuen Zweig mit dem Namen "" ab Version "" zu erstellen. Ersetzen Sie "" durch einen beliebigen Namen für den Zweig und "" durch die neueste stabile Version, die Sie zuvor identifiziert haben:

git checkout -b "" ""

Dadurch wird Ihre Version des Caddy-Quellcodes auf die letzte stabile Version zurückgesetzt, und Sie befinden sich in einem neuen Zweig, in dem Sie Ihre Änderungen am Code speichern können. Wenn Sie Caddy in Zukunft aktualisieren, führen Sie die Änderungen in diesem neuen Zweig zusammen.

Jetzt können Sie Caddy mit dem Tool "+ go install" erstellen, um den Quellcode in eine Binärdatei zu kompilieren. Während die Befehlssyntax so aussieht, als würde sie Caddy von einer Website (github.com) installieren, bezieht sich dies tatsächlich auf den lokalen Pfad auf dem Server, auf dem wir gerade mit dem Git-Repository gearbeitet haben (`+ $ GOPATH / src / github) .com / mholt / caddy + `):

go install github.com/mholt/caddy/caddy

Führen Sie nach dem Kompilieren des Quellcodes den Befehl + caddy + aus, um den Server zu starten. Beachten Sie, dass Ihr Go-Pfad auf "+ $ GOPATH / bin +" gesetzt sein sollte, damit dies korrekt funktioniert, wie in den Voraussetzungen beschrieben:

caddy

Dieser Befehl erzeugt die folgende Ausgabe:

OutputActivating privacy features... done.
http://:2015
WARNING: File descriptor limit 1024 is too low for production servers. At least 8192 is recommended. Fix with "ulimit -n 8192".

Die Warnung kann vorerst ignoriert werden, da wir sie beheben, wenn wir die verschiedenen Konfigurationsdateien einrichten, die für Caddy erforderlich sind. Drücken Sie "+ STRG + C +", um diesen Befehl zu beenden.

Um zu demonstrieren, dass Caddy aus Ihrer Quelle erstellt wird, fügen Sie dem Caddy-Quellcode eine Zeile hinzu, um Text zu drucken, wenn Caddy ausgeführt wird. Verwenden Sie "+ nano " oder Ihren bevorzugten Editor, um " $ GOPATH / src / github.com / mholt / caddy / caddy / caddymain / run.go +" zu öffnen:

nano $GOPATH/src/github.com/mholt/caddy/caddy/caddymain/run.go

Diese Datei verarbeitet alle Optionen, die an den Caddy-Befehl übergeben wurden, und ist eine der ersten Aktionen, die beim Ausführen von Caddy ausgeführt werden.

Suchen Sie die Funktion + Run () + und fügen Sie den hervorgehobenen Text als erste Zeile in die geschweiften Klammern ein. Dies druckt den Text "Hallo von Caddy!" Aus, bevor der Server ausgeführt wird:

$ GOPATH / src / github.com / mholt / caddy / caddy / caddymain / run.go

. . .
// Run is Caddy's main() function.
func Run() {


       flag.Parse()

       caddy.AppName = appName
       . . .
}

Drücken Sie + STRG + X +, + Y + und dann + ENTER +, um die Datei zu speichern und zu schließen. Wenn Sie die Befehle + go install + und + caddy + erneut ausführen, wird oben in der Ausgabe die Meldung angezeigt, die Sie der Funktion + Run () + hinzugefügt haben:

go install github.com/mholt/caddy/caddy
caddy
Output
Activating privacy features... done.
http://:2015
WARNING: File descriptor limit 1024 is too low for production servers. At least 8192 is recommended. Fix with "ulimit -n 8192".

Damit haben Sie Caddy erfolgreich aus dem Quellcode erstellt. Sie können die hinzugefügte Zeile aus "+ $ GOPATH / src / github.com / mholt / caddy / caddy / caddymain / run.go +" entfernen. In diesem Fall müssen Sie den Code jedoch neu kompilieren. Im nächsten Schritt installieren Sie Caddy als Dienst, sodass es beim Start automatisch gestartet wird, und passen dann die Einstellungen für Eigentümer und Berechtigungen an, um die Sicherheit des Servers zu gewährleisten.

Schritt 2 - Caddy installieren

Nachdem Sie sich vergewissert haben, dass Sie Caddy erstellen können, können Sie configure a systemd service, damit Caddy beim Systemstart automatisch gestartet werden kann. Systemd ist eine umfassende Lösung für die Verwaltung von Prozessen unter Linux. Caddy wird mit einer "+ caddy.service" -Datei geliefert, mit der Systeme den Caddy-Service verwalten können. In dieser Servicedatei werden einige Annahmen über die Umgebung getroffen, in der Caddy ausgeführt wird. Es gibt also einige Dinge, die Sie wahrscheinlich vor der Installation ändern möchten.

Kopieren Sie zunächst die Caddy-Binärdatei nach + / usr / local / bin +, dem Standardverzeichnis für Binärdateien, die nicht vom Ubuntu-Paketmanager verwaltet werden und für den Systembetrieb nicht von entscheidender Bedeutung sind:

sudo cp $GOPATH/bin/caddy /usr/local/bin/

Ändern Sie als Nächstes den Besitz der Caddy-Binärdatei auf den Benutzer * root *. Beachten Sie, dass * root * zwar Caddy besitzt, Sie Caddy jedoch nicht mit dem * root * -Konto ausführen sollten, da dies ein schwerwiegendes Sicherheitsproblem darstellen kann, wenn eine Sicherheitsanfälligkeit in Caddy vorliegt. Wenn Sie jedoch * root * besitzen, kann die Binärdatei von anderen Konten nicht mit den von uns festgelegten Berechtigungen geändert werden. Dies ist wünschenswert, da ein anderer Prozess mit niedrigeren Berechtigungen als Caddy nicht in der Lage ist, Caddy zu ändern, um mehr Kontrolle über das System zu erlangen:

sudo chown root:root /usr/local/bin/caddy

Setzen Sie als nächstes die Dateiberechtigungen der Binärdatei auf "+ 755 +" - dies gibt * root * vollständige Lese- / Schreib- / Ausführungsberechtigungen für die Datei, während andere Benutzer sie nur lesen und ausführen können:

sudo chmod 755 /usr/local/bin/caddy

Da der Caddy-Prozess nicht als * root * ausgeführt wird, verhindert Linux, dass er an die Ports +: 80 + oder +: 443 + (die Standardports für HTTP bzw. HTTPS) gebunden wird, da dies a ist privilegierte Operationen. Um im Web angezeigt zu werden, muss Caddy an einen dieser Ports gebunden sein. Andernfalls müssen Benutzer der Server-URL in ihrem Browser eine bestimmte Portnummer hinzufügen, um den Inhalt anzuzeigen, den der Server liefern soll.

Mit dem Befehl + setcap + kann der Caddy-Prozess an niedrige Ports gebunden werden, ohne dass er als * root * ausgeführt wird. + setcap + ist nützlich, um einem Prozess das Ausführen einer bestimmten privilegierten Operation zu ermöglichen, ohne ihm die vollständigen Superuser-Berechtigungen zu erteilen. "+ cap_net_bind_service = + ep " gibt an, dass Sie dem Prozess die Berechtigungen " CAP_NET_BIND_SERVICE +" erteilen möchten, die das Binden an privilegierte Ports ermöglichen:

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

Erstellen Sie nach dem Festlegen der Berechtigungen für die Caddy-Binärdatei ein Verzeichnis, in dem Sie die Konfigurationsdateien von Caddy speichern. Diese sollten sich in einem Unterverzeichnis von "+ / etc / +" befinden, dem vom Dateisystem-Hierarchie-Standard empfohlenen Speicherort für Konfigurationsdateien:

sudo mkdir /etc/caddy

Setzen Sie den Eigentümer dieses Verzeichnisses auf * root * und seine Gruppe auf * www-data *. * www-data * ist ein Standardbenutzerkonto zum Ausführen von Webservern und das Konto, mit dem Caddy ausgeführt wird. Wenn Sie den Besitz auf diese Weise festlegen, haben Sie Lese- und Schreibzugriff auf die Binärdatei (über das * root * -Konto), und der Caddy-Prozess kann auch darauf lesen und schreiben (da er als * www-Daten * ausgeführt wird). Andere Benutzer haben jedoch keinen Zugriff darauf. Bei Verwendung mit "+ chown " ändert das Flag " -R " den Besitz aller Unterverzeichnisse und Dateien im Verzeichnis " / etc / caddy +" und nicht nur des Verzeichnisses selbst:

sudo chown -R root:www-data /etc/caddy

In einem späteren Schritt wird in diesem Lernprogramm erläutert, wie Sie automatisches TLS mit Let’s Encrypt aktivieren. Als Vorbereitung erstellen Sie ein Verzeichnis zum Speichern aller TLS-Zertifikate, die Caddy abrufen wird, und geben Sie ihm die gleichen Besitzregeln wie im Verzeichnis "+ / etc / caddy +":

sudo mkdir /etc/ssl/caddy
sudo chown -R root:www-data /etc/ssl/caddy

Caddy muss in der Lage sein, Zertifikate in dieses Verzeichnis zu schreiben und daraus zu lesen, um Anforderungen zu verschlüsseln. Ändern Sie aus diesem Grund die Berechtigungen für das Verzeichnis "+ / etc / ssl / caddy +" so, dass nur * root * und * www-data * darauf zugreifen können:

sudo chmod 0770 /etc/ssl/caddy

Erstellen Sie als Nächstes ein Verzeichnis, in dem die Dateien gespeichert werden, die Caddy hosten wird. + / var / www / + ist de facto der Standardspeicherort für Dateien, die über HTTP bereitgestellt werden:

sudo mkdir /var/www

Setzen Sie dann den Eigentümer und die Gruppe des Verzeichnisses auf * www-data *, den Standardbenutzer für Webservervorgänge unter Ubuntu:

sudo chown www-data:www-data /var/www

Caddy wird über eine Datei mit dem Namen "+ Caddyfile " konfiguriert. Es kann hilfreich sein, dies als ähnlich wie " httpd.conf " in Apache oder dem " sites-available " - Konfigurationsverzeichnis von Nginx zu betrachten. Der systemd-Dienst für Caddy erwartet, dass diese Datei in " / etc / caddy " gespeichert wird. Erstellen Sie dort " Caddyfile " mit " touch +":

sudo touch /etc/caddy/Caddyfile

Um den Caddy-Dienst zu installieren, kopieren Sie die systemd-Unit-Datei aus dem Caddy-Quellcode in "+ / etc / systemd / system +", den Speicherort für systemd-Dienste. Auf diese Weise kann systemd den Caddy-Service ermitteln und steuern:

sudo cp $GOPATH/src/github.com/mholt/caddy/dist/init/linux-systemd/caddy.service /etc/systemd/system/

Ändern Sie die Berechtigungen der Servicedatei so, dass sie nur vom Eigentümer * root * geändert werden kann:

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

Verwenden Sie als Nächstes das Befehlszeilentool + systemctl +, um systemd neu zu laden. Dies führt dazu, dass systemd den Caddy-Dienst erkennt, obwohl wir ihn noch nicht ausführen:

sudo systemctl daemon-reload

Überprüfen Sie, ob das System den Caddy-Dienst erkannt hat, indem Sie "+ systemctl status" ausführen:

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

Wenn Sie die gleiche Ausgabe sehen, wurde Caddy von systemd korrekt erkannt.

Der letzte Schritt in diesem Installationsprozess, bevor Sie die Konfiguration für Caddy schreiben, besteht darin, Ihre Firewall anzupassen. Sie sollten bereits eine Firewall mit UFW ausführen, wie im Handbuch zur Erstinstallation des Servers beschrieben. Eine Firewall ist ein wichtiges Tool zum Schutz der Sicherheit Ihres Servers, da Sie konfigurieren können, welche Ports für eine externe Partei öffentlich verfügbar sind und mit welchen Ports der Zugriff verhindert wird. Wenn es andere Prozesse gibt, die einen Port auf Ihrem Server verfügbar machen, verhindert die Firewall, dass auf diese zugegriffen werden kann, und verringert die Wahrscheinlichkeit, dass ein Angreifer gefährdete Software kompromittiert.

Verwenden Sie das Befehlszeilentool "+ ufw ", um die Firewall für die Ports ": 80 " und ": 443 +" zu deaktivieren, damit Caddy über HTTP bzw. HTTPS kommunizieren kann:

sudo ufw allow 80
sudo ufw allow 443

Verwenden Sie "+ ufw status +", um zu überprüfen, ob Ihre Änderungen erfolgreich waren:

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Ihre Installation von Caddy ist abgeschlossen, aber zu diesem Zeitpunkt sind noch keine Einstellungen vorgenommen worden. Als Nächstes sehen wir uns an, wie Sie diese Neuinstallation von Caddy für die Bereitstellung einer Website konfigurieren.

Schritt 3 - Caddy konfigurieren

Damit Ihre Caddy-Installation als funktionsfähiger Webserver verwendet werden kann, müssen einige Einstellungen geändert werden. Während wir diese Änderungen vornehmen, werden wir die Syntax der Caddyfile-Konfiguration berücksichtigen, einige Konfigurationsszenarien untersuchen und eine Platzhalterseite über HTTP bereitstellen.

Um mit der Konfiguration von Caddy zu beginnen, erstellen Sie eine HTML-Basisdatei, die bereitgestellt werden soll. HTML ist die Sprache, die den Inhalt von Webseiten beschreibt. Diese Datei fungiert als Platzhalter, um das Hosten einer Website mit Caddy zu demonstrieren. Wenn Sie Caddy zum Hosten Ihrer eigenen Website verwenden möchten, ersetzen Sie diese Datei durch den Inhalt, den Sie hosten möchten. Platzieren Sie diese Datei in dem Verzeichnis + / var / www / +, das Sie zuvor eingerichtet haben. Der Name "+ index.html +" ist von Bedeutung, da dies auf die "Standard" -Seite für die meisten Webserver verweist. Benutzern, die zu Ihrer Domain navigieren, wird diese Datei zuerst bereitgestellt:

sudo touch /var/www/index.html

Öffnen Sie die neue Datei mit Ihrem bevorzugten Editor:

sudo nano /var/www/index.html

Fügen Sie der Datei den folgenden Inhalt hinzu:

/var/www/index.html

<!DOCTYPE html>
<html>
 <head>
   <title>Hello from Caddy!</title>
 </head>
 <body>
   <h1 style="font-family: sans-serif">This page is being served via Caddy</h1>
 </body>
</html>

Daraufhin wird eine Überschrift mit dem Text "* Diese Seite wird über Caddy * bedient" angezeigt.

Speichern und schließen Sie die Datei und öffnen Sie die zuvor erstellte Caddyfile-Konfigurationsdatei:

sudo nano /etc/caddy/Caddyfile

Bearbeiten Sie die Datei so, dass sie den folgenden Inhalt enthält:

/ etc / caddy / Caddyfile

:80 {
   root /var/www
}

In der ersten Zeile wird mit ": 80 +" der Hostname des Servers festgelegt. In Caddy wird dies als "_label_" bezeichnet. Der Hostname ist der Domainname, unter dem Caddy auf Anfragen reagiert. In diesem Fall setzen Sie es auf ": 80 ", was ": 80 +" des Servers bedeutet. Dies verhindert vorerst, dass der Server über HTTPS läuft, da Caddy versucht, dies automatisch zu aktivieren, wir dies jedoch über ein Plugin tun möchten.

Standardmäßig versucht Caddy, ein SSL-Zertifikat von Let’s Encrypt abzurufen, indem eine Ressource über HTTP verfügbar gemacht wird, z. B. das Hosten einer Datei. Wenn Sie jedoch einen internen Dienst mit Caddy ausführen möchten, möchten Sie den Server möglicherweise nicht dem öffentlichen Internet aussetzen. Wenn Sie ein Plugin verwenden, können Sie die Let’s Encrypt DNS-Abfrage verwenden. Dies beinhaltet, dass Caddy einen DNS-TXT-Eintrag erstellt, um die Kontrolle über den Server zu beweisen und das Abrufen von Zertifikaten zu ermöglichen, ohne dass externe HTTP-Anforderungen akzeptiert werden müssen. So haben Sie in Zukunft mehr Möglichkeiten, wie Sie Caddy ausführen können.

Nach ": 80 +" befindet sich ein Konfigurationsblock in geschweiften Klammern, in dem die Konfigurationen für die Site angegeben werden. In der nächsten Zeile sehen wir die ` root ` _directive_. Direktiven sind die eigentlichen Konfigurationsoptionen für Caddy. Wenn Sie Direktiven hinzufügen, ändert sich das Verhalten von Caddy beim Bereitstellen der Website. Direktiven können _arguments_ haben. Dies sind Optionen, wie die Direktive wirksam werden soll. In diesem Fall hat die Direktive ` root ` ein Argument: ` / var / www `. Diese Anweisung legt das Verzeichnis fest, in dem sich die Dateien befinden, die Caddy bereitstellen soll. Für Richtlinien sind jedoch keine Argumente erforderlich. Sie können beispielsweise die Direktive " gzip +" ohne Argumente hinzufügen, um Webseiten zu komprimieren, bevor sie an den Client gesendet werden. Dadurch werden sie schneller geladen.

/ etc / caddy / Caddyfile

:80 {
   root /var/www

}

Anweisungen können mit Unterverzeichnissen konfiguriert werden, die zusätzliche Funktionen bereitstellen. Diese werden in ihren eigenen Konfigurationsblöcken platziert, wobei wiederum geschweifte Klammern verwendet werden. Obwohl die Direktive "+ gzip " für sich alleine arbeitet, können wir die Subdirektive " ext " verwenden, um nur bestimmte Dateitypen zu komprimieren, oder die Subdirektive " level +", um zu steuern, welche Komprimierungsstufe auftreten wird (1 ist die am niedrigsten und 9 am höchsten).

/ etc / caddy / Caddyfile

:80 {
   root /var/www
   gzip



}

Caddy bietet für viele Anwendungsfälle eine Vielzahl unterschiedlicher Richtlinien. Beispielsweise kann die Anweisung https://caddyserver.com/docs/fastcgi [+ fastcgi +] hilfreich sein, um PHP zu aktivieren. Mit der Anweisung https://caddyserver.com/docs/markdown [+ markdown +] können Markdown-Dateien automatisch in HTML konvertiert werden, bevor sie bereitgestellt werden. Dies kann zum Erstellen eines einfachen Blogs hilfreich sein.

Speichern und schließen Sie das + Caddyfile + und testen Sie, ob alles korrekt funktioniert. Verwenden Sie "+ systemctl +", um den Caddy-Service zu starten:

sudo systemctl start caddy

Führen Sie anschließend "+ systemctl status +" aus, um Informationen zum Status des Caddy-Service zu erhalten:

sudo systemctl status caddy

Folgendes wird angezeigt:

Output● caddy.service - Caddy HTTP/2 web server
  Loaded: loaded (/etc/systemd/system/caddy.service; disabled; vendor preset: enabled)
  Active:  (running) since Sat 2018-01-27 11:37:06 UTC; 7min ago
    Docs: https://caddyserver.com/docs
Main PID: 2973 (caddy)
   Tasks: 6
  Memory: 3.2M
     CPU: 24ms
  CGroup: /system.slice/caddy.service
          └─2973 /usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp

Jan 27 11:37:06 caddy-tutorial-testing-0 systemd[1]: Started Caddy HTTP/2 web server.
Jan 27 11:37:06 caddy-tutorial-testing-0 caddy[2973]: Activating privacy features... done.
Jan 27 11:37:06 caddy-tutorial-testing-0 caddy[2973]: http://
Jan 27 11:37:06 caddy-tutorial-testing-0 caddy[2973]: 2018/01/27 11:37:06 http://

Wenn Sie zu Ihrer Domain navigieren, sollten Sie jetzt sehen, dass Caddy ausgeführt wird, und Ihre Beispielwebseite sollte angezeigt werden. Nachdem Sie dies bestätigt haben, beenden Sie den Caddy-Dienst mit + systemctl +, da noch einige Änderungen vorgenommen werden müssen:

sudo systemctl stop caddy

Obwohl Caddy standardmäßig viele Direktiven enthält, kann es nicht jeden möglichen Anwendungsfall abdecken, und Sie möchten dem Server möglicherweise weitere Funktionen hinzufügen. Nachdem wir nun wissen, dass Caddy Inhalte wie erwartet bereitstellt, werden wir uns mit der Erweiterung der Funktionalität von Caddy durch die Verwendung von Plugins befassen.

Schritt 4 - Plugins verwenden

Plugins sind eine Möglichkeit, das Verhalten von Caddy zu ändern. Es handelt sich im Allgemeinen um kleine Codeausschnitte, die wir in Caddy einfügen können, um weitere Anweisungen für bestimmte Anwendungsfälle hinzuzufügen. Der einfachste Weg, Plugins zu verstehen, besteht darin, ein Plugin direkt zu installieren und auszuprobieren. Dieses Plugin entfernt überschüssigen Whitespace und redundanten Code aus einigen Dateien, reduziert die Größe der einzelnen Dateien und beschleunigt die Ladezeiten.

Kehren Sie zunächst zu dem von Go gespeicherten Caddy-Quellcode zurück, da Sie diesen ändern müssen, um das Plugin zu installieren:

cd $GOPATH/src/github.com/mholt/caddy

Öffnen Sie Caddys + run.go + Datei erneut. Wie bereits erwähnt, ist dies einer der ersten auszuführenden Teile von Caddy und der Ort, an dem Plugins installiert werden.

nano caddy/caddymain/run.go

In dieser Datei sehen Sie eine "+ import" -Deklaration, die so aussieht:

$ GOPATH / src / github.com / mholt / caddy / caddy / caddymain / run.go

. . .
import (
   "errors"
   "flag"
   "fmt"
   "io/ioutil"
   "log"
   "os"
   "runtime"
   "strconv"
   "strings"

   "gopkg.in/natefinch/lumberjack.v2"

   "github.com/xenolf/lego/acmev2"

   "github.com/mholt/caddy"
   // plug in the HTTP server type
   _ "github.com/mholt/caddy/caddyhttp"

   "github.com/mholt/caddy/caddytls"
   // This is where other plugins get plugged in (imported)
)
. . .

Um ein Plugin zu installieren, fügen Sie "+ _" github.com/path/to/plugin "" zu dieser " import +" - Direktive hinzu. Einige Plugins erfordern möglicherweise geringfügige Konfigurationsänderungen. Lesen Sie daher unbedingt die Dokumentation der von Ihnen installierten Plugins. Eine Liste der gängigen Plugins finden Sie im linken Bereich der Caddy-Dokumentation unter * Plugins *.

Das GitHub-Repository des Minify-Plugins lautet hacdias/caddy-minify. Fügen Sie daher am Ende der Importdeklaration Folgendes hinzu:

$ GOPATH / github.com / mholt / caddy / caddy / caddymain / run.go

. . .
import (
   . . .
   "github.com/mholt/caddy/caddytls"
   // This is where other plugins get plugged in (imported)


)

Sie müssen Ihren Code festschreiben, wenn Sie Änderungen daran vornehmen, damit beim Zusammenführen neuer Updates diese Änderungen nicht verloren gehen. Wenn Sie auf diesem Server noch keinen Code festgeschrieben haben, müssen Sie einen Namen und eine E-Mail-Adresse festlegen, damit Git Sie in den Protokollen identifizieren kann. Mit dem Befehl "+ git config" können Sie diese Optionen festlegen, und das Flag "+ - global" wendet sie auf alle Repositorys an, an denen Sie möglicherweise in Zukunft arbeiten. Sofern Sie den Code nicht in ein öffentliches Repository wie GitHub übertragen, werden diese Details nicht veröffentlicht.

git config --global user.email ""
git config --global user.name ""

Nachdem Sie Ihren Benutzernamen und Ihre E-Mail-Adresse festgelegt haben, fügen Sie alle Dateien, die Sie geändert haben, zu Gits stage hinzu (einem Cache, in dem der Status des Codes vor dem Festschreiben gespeichert wird), indem Sie Folgendes ausführen:

git add -A .

Führen Sie nun "+ git commit " aus, um Ihre Änderungen im aktuellen Zweig zu speichern. Mit der Option " -m +" können Sie eine Festschreibungsnachricht festlegen, damit Sie notieren können, was Sie geändert haben. Diese Nachricht finden Sie in den Protokollen von Git:

git commit -m "Added minify plugin"

Sie haben jetzt den Pfad zum Plugin in Ihrem Code, müssen das Plugin jedoch noch lokal herunterladen, damit Go tatsächlich darauf zugreifen kann. Dieser Befehl ruft automatisch alle Abhängigkeiten von Caddy ab, wenn er aus dem Verzeichnis + $ GOPATH / src / github.com / mholt / caddy + ausgeführt wird:

go get ./...

Jedes Mal, wenn Sie ein neues Plugin hinzufügen, müssen Sie Caddy neu erstellen. Dies liegt daran, dass Go eine kompilierte Programmiersprache ist, dh der Quellcode wird vor der Ausführung in Maschinencode umgewandelt. Ihre Änderung an der Importdeklaration hat den Quellcode geändert, wirkt sich jedoch erst auf die Binärdatei aus, wenn sie kompiliert wurde.

Verwenden Sie den Befehl + go install, um Caddy zu kompilieren:

go install github.com/mholt/caddy/caddy

Wenn Caddy erfolgreich erstellt wurde, wird dieser Befehl ohne Ausgabe beendet. Kopieren Sie die generierte Binärdatei nach "+ / usr / local / bin +" und richten Sie die Berechtigungen für die Binärdatei wie zuvor ein. Sie müssen diese Schritte jedes Mal ausführen, wenn Sie Caddy neu erstellen, um dessen Funktionalität und Sicherheit zu gewährleisten.

sudo cp $GOPATH/bin/caddy /usr/local/bin/
sudo chown root:root /usr/local/bin/caddy
sudo chmod 755 /usr/local/bin/caddy
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

Um zu demonstrieren, dass das Plugin erfolgreich installiert wurde, öffnen Sie Ihr + Caddyfile +.

sudo nano /etc/caddy/Caddyfile

Aktivieren Sie das Plugin, indem Sie die folgende Zeile zum Konfigurationsblock hinzufügen:

/ etc / caddy / Caddyfile

:80 {
   root /var/www
   gzip

}

Starten Sie nun Ihren Server mit + systemctl +:

sudo systemctl start caddy

Caddy wird jetzt ausgeführt und minimiert alle von ihm bereitgestellten Dateien, einschließlich der zuvor erstellten Datei "+ index.html ". Mithilfe von cURL, einem Befehlszeilentool zum Erstellen von Webanforderungen, können Sie die Minifizierung bei der Arbeit beobachten. Wenn Sie " curl " ohne Optionen oder Flags ausführen, wird der Inhalt einer Webseite abgerufen und im Terminal angezeigt. Führen Sie den folgenden Befehl aus, um die Datei " index.html " von Caddy anzufordern und "+" durch Ihre Domain zu ersetzen.

curl http://

Sie sehen die folgende Ausgabe. Beachten Sie, dass nicht mehr benötigter Speicherplatz entfernt wurde. Dies zeigt, dass das Plugin + minify + funktioniert hat.

Output<!doctype html><title>Hello from Caddy!</title><h1 style=font-family:sans-serif>This page is being served via Caddy</h1>

Dieselbe Installationsmethode funktioniert auch für andere Caddy-Plugins. Wenn Sie das Plugin "+ tls.dns.digitalocean +" installieren, um den gesicherten HTTPS-Verkehr automatisch zu aktivieren, werden Sie etwas mehr Erfahrung mit dem Hinzufügen von Plugins haben.

Schritt 5 - Aktivieren von automatischem TLS mit Let’s Encrypt

Caddy aktiviert HTTPS standardmäßig mit Let’s Encrypt. Dies ist nützlich, da es einfach ist, die Details von HTTPS falsch zu machen. Caddys Ansatz für HTTPS ist sicher und zwingt Sie nicht dazu, sich eingehend mit der Konfiguration zu befassen, um Ihren Datenverkehr zu verschlüsseln. Caddy verwendet jedoch standardmäßig die Methode "+ HTTP-01 +", um mit Let’s Encrypt zu überprüfen, ob Sie tatsächlich Eigentümer Ihrer Domain sind. Bei dieser Methode wird eine spezielle Datei (die eine Antwort auf eine von Let’s Encrypt gesendete Aufforderung enthält) an einen bestimmten Speicherort auf der Website gesendet. Während diese Methode funktioniert, muss Ihre Website öffentlich zugänglich sein. Dies kann ein Problem bei bestimmten Firewall-Konfigurationen sein oder wenn Sie Caddy als internen Dienst für Ihr Unternehmen ausführen.

Alternativ können Sie das Caddy-Plugin "+ tls.dns.digitalocean " installieren, das stattdessen die Überprüfungsmethode " DNS-01 +" verwendet. Dieses Plugin authentifiziert sich bei Let’s Encrypt, indem es einen neuen "TXT" -DNS-Eintrag für Ihre Domain hinzufügt, der sich nicht auf die Funktionsweise Ihrer Website auswirkt. Es verwendet die API von DigitalOcean zur Steuerung von DNS, wodurch Sie die Flexibilität haben, ein Zertifikat abzurufen, selbst wenn Ihr Server nicht öffentlich zugänglich ist. Weitere Informationen zu den verschiedenen Arten von DNS-Einträgen finden Sie unter Introduction zu DigitalOcean DNS.

Die Methode zur Installation des Caddy-Plugins "+ tls.dns.digitalocean " ist fast identisch mit der Installation des Plugins " minify ". Öffnen Sie zunächst ` $ GOPATH / src / github.com / mholt / caddy / caddy / caddymain / run.go +`:

nano $GOPATH/src/github.com/mholt/caddy/caddy/caddymain/run.go

Fügen Sie den Speicherort des Plugins hinzu:

$ GOPATH / github.com / mholt / caddy / caddy / caddymain / run.go

. . .
import (
   . . .
   "github.com/mholt/caddy/caddytls"
   // This is where other plugins get plugged in (imported)

   _ "github.com/hacdias/caddy-minify"

)

Navigieren Sie zum Aktualisieren von Caddy in das Quellrepository von Caddy und übernehmen Sie die Änderungen in Git:

cd $GOPATH/src/github.com/mholt/caddy
git add -A .
git commit -m "Add DigitalOcean DNS provider"

Installieren Sie als Nächstes alle Abhängigkeiten und erstellen Sie Caddy wie zuvor:

go get ./...
go install github.com/mholt/caddy/caddy

Vergewissern Sie sich, dass Caddy über "+ systemctl +" angehalten wurde, und beenden Sie die Installation des Plugins, indem Sie die neu erstellte Caddy-Binärdatei kopieren und ihre Eigentumsrechte und Berechtigungen erneut festlegen:

sudo systemctl stop caddy
sudo cp $GOPATH/bin/caddy /usr/local/bin/
sudo chown root:root /usr/local/bin/caddy
sudo chmod 755 /usr/local/bin/caddy
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

Konfigurieren Sie anschließend Caddy so, dass es mit der DigitalOcean-API zusammenarbeitet, um DNS-Einträge festzulegen. Navigieren Sie zu der Registerkarte API in Ihrem DigitalOcean-Konto und wählen Sie * Neues Token generieren *:

image: https: //assets.digitalocean.com/articles/securely_deploy_caddy_ubuntu_16_04/caddy_spaces_api.png [Die DigitalOcean Applications & API-Seite]

Geben Sie Ihrem Token einen aussagekräftigen Namen (z. B. "++") und stellen Sie sicher, dass "Schreiben (optional)" ausgewählt ist. Drücken Sie dann * Token generieren *:

image: https: //assets.digitalocean.com/articles/securely_deploy_caddy_ubuntu_16_04/caddy_personal_token.png [Erstellen eines persönlichen Zugriffstokens]

Klicken Sie auf das generierte Token, um es zu kopieren, und zeichnen Sie es an einer Stelle auf, an der Sie es nicht verlieren. Caddy muss auf dieses Token als Umgebungsvariable zugreifen, um das DNS von DigitalOcean konfigurieren zu können. Mit den Servicedateien von systemd können Sie Umgebungsvariablen definieren, die in die Prozessumgebung aufgenommen werden sollen. Bearbeiten Sie die Caddy-Servicedatei im Verzeichnis "+ / etc / systemd / system / +" und nicht in der Version im Caddy Git-Repository. Fügen Sie Ihren API-Schlüssel der Version der Datei außerhalb des Git-Repository hinzu, um zu vermeiden, dass das private Token versehentlich in das öffentliche Caddy-Repository übertragen wird:

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

Suchen Sie die mit + Environment = + beginnende Zeile im Abschnitt + [Service] +. Diese Zeile definiert die Umgebungsvariablen, die an den Caddy-Prozess übergeben werden sollen. Fügen Sie am Ende dieser Zeile ein Leerzeichen und anschließend eine Variable + DO_AUTH_TOKEN + gefolgt von dem soeben generierten Token hinzu:

/etc/systemd/system/caddy.service

[Service]
Restart=on-abnormal

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

; Letsencrypt-issued certificates will be written to this directory.
Environment=CADDYPATH=/etc/ssl/caddy

Speichern und schließen Sie diese Datei, und laden Sie dann den systemd-Daemon wie zuvor neu, um sicherzustellen, dass die Konfiguration aktualisiert wird:

sudo systemctl daemon-reload

Führen Sie "+ systemctl status +" aus, um zu überprüfen, ob Ihre Konfigurationsänderungen in Ordnung waren:

sudo systemctl status caddy

Dies erzeugt eine Ausgabe ähnlich der folgenden. Achten Sie genau auf den Zeilenanfang "+ Loaded: ". Der Status " geladen " zeigt an, dass Ihre Änderungen an der Dienstkonfiguration erfolgreich waren. Wenn beim Konfigurieren eines systemd-Dienstes ein Fehler auftritt, wird in dieser Zeile stattdessen der Status " error " angezeigt, zusammen mit einer Erklärung, warum systemd die Dienstdatei nicht interpretieren konnte. In der nächsten Zeile, die mit " Aktiv: " beginnt, wird angegeben, ob der Dienst ausgeführt wird oder nicht. Da Sie Caddy zuvor in diesem Schritt gestoppt haben, wird " inaktiv " angezeigt. Wenn Daddy läuft, wird " enabled" oder "+ running" angezeigt.

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

Sie müssen ein paar geringfügige Änderungen an Ihrem Caddyfile vornehmen. Öffnen Sie es zum Bearbeiten:

sudo nano /etc/caddy/Caddyfile

Fügen Sie die hervorgehobenen Zeilen zum Caddyfile hinzu und stellen Sie sicher, dass Sie "+" durch Ihre Domain ersetzen. Die Verwendung einer Domain anstelle eines Ports für den Hostnamen führt dazu, dass Caddy Anfragen über HTTPS bearbeitet. Die Direktive " tls " konfiguriert das Verhalten von Caddy bei Verwendung von " TLS ", und die Subdirektive " dns " gibt an, dass Caddy das " DNS-01 " -System anstelle von " HTTP-01 +" verwenden soll:

/ etc / caddy / Caddyfile

{
   root /var/www
   gzip
   minify



}

Ihre Website kann jetzt bereitgestellt werden. Starten Sie zuerst den Server mit + systemctl + und aktivieren Sie ihn dann mit + enable +. Dies konfiguriert Caddy so, dass es beim Booten startet:

sudo systemctl start caddy
sudo systemctl enable caddy

Wenn Sie zu Ihrer Domain navigieren, sollten Sie automatisch zu HTTPS umgeleitet werden.

Ihre Installation von Caddy ist abgeschlossen und gesichert. Als Nächstes schauen wir uns an, wie Sie Caddy aktualisieren, wenn eine neue Version veröffentlicht wird. Wenn Sie Software mit einem Paketmanager installieren, ist die Aktualisierung im Allgemeinen so einfach wie die Ausführung eines einzelnen Befehls. Oftmals kann das Betriebssystem Sicherheitsupdates automatisch installieren. Da Sie Caddy jedoch aus dem Quellcode erstellt haben, ist der Prozess etwas komplizierter. Sie müssen Caddy aus einer aktualisierten Version des Quellcodes neu erstellen und dann neu einrichten.

Schritt 6 - Aktualisieren Ihrer Caddy-Installation

Das Aktualisieren von Software ist eine wichtige Sicherheitsmaßnahme, da veraltete Software häufig Sicherheitslücken aufweist. Das Ausführen der neuesten Version von Caddy schützt Sie davor, die Sicherheit Ihres Servers durch Sicherheitslücken zu gefährden, die in einer älteren Version vorhanden sein könnten. In diesem Schritt erfahren Sie, wie Sie Ihre Caddy-Installation aktualisieren, wenn eine neue Version herauskommt. Dieser Schritt sollte nur ausgeführt werden, wenn eine neue Version von Caddy in das Caddy GitHub-Repository verschoben wird.

Wir werden Git verwenden, um den Status unseres Quellcodes zu aktualisieren. Wechseln Sie zunächst in das Quellverzeichnis von + caddy +:

cd $GOPATH/src/github.com/mholt/caddy

Stellen Sie sicher, dass Sie sich in dem Zweig befinden, den Sie in Schritt 1 erstellt haben, indem Sie "+ git checkout +" verwenden:

git checkout

Verwenden Sie anschließend "+ git fetch ", um die Änderungen aus dem Remote-Repository abzurufen. Wenn Git das Caddy-Repository klont, wird eine Verknüpfung zum _upstream-Repository_ beibehalten - dem zentralen Speicherort, an dem Änderungen vorgenommen werden. Git bezieht sich auf das Upstream-Repository mit dem Namen " origin +", Sie müssen also vom Ursprung holen:

git fetch origin

Die Änderungen am Repository sind jetzt auf Ihrem System vorhanden und werden in einem anderen Zweig gespeichert. Verwenden Sie + git tag +, um die neueste Version anzuzeigen, da Sie weiterhin freigegebene Versionen von Caddy verwenden sollten, anstatt Code zwischen den Versionen:

git tag

Durchsuchen Sie nach wie vor die Liste, bis Sie die neueste Version gefunden haben. Git enthält ein Tool zum Zusammenführen von zwei verschiedenen Code-Zweigen - + git merge. Geben Sie Folgendes ein, um die Änderungen aus der neuesten Version in Ihrem Arbeitszweig zusammenzuführen. Ersetzen Sie "++" durch den Namen Ihrer Filiale und die Versionsnummer durch die neueste, die Sie gerade identifiziert haben:

git merge

Ein Editor wird angezeigt, den Sie speichern und schließen können, um die Zusammenführung abzuschließen. Es besteht jedoch die Möglichkeit, dass Zusammenführungskonflikte auftreten, wenn Git nicht herausfinden kann, wie die beiden verschiedenen Versionen des Codes zusammenpassen sollen. Git benachrichtigt Sie in diesem Fall, und Sie müssen die in Konflikt stehenden Dateien manuell bearbeiten und anschließend festschreiben, um den Konflikt zu lösen.

Vorausgesetzt, es gibt keine Zusammenführungskonflikte, installieren Sie Caddy mithilfe des gleichen Vorgangs neu, den Sie in diesem Lernprogramm befolgt haben. Verwenden Sie zuerst "+ go install", um die Binärdatei neu zu erstellen:

go install github.com/mholt/caddy/caddy

Stoppen Sie als Nächstes den Caddy-Dienst und kopieren Sie die neue Binärdatei:

sudo systemctl stop caddy
sudo cp $GOPATH/bin/caddy /usr/local/bin/

Legen Sie die Berechtigungen der Binärdatei fest:

sudo chown root:root /usr/local/bin/caddy
sudo chmod 755 /usr/local/bin/caddy
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

Verwenden Sie abschließend "+ systemctl +", um den Caddy-Dienst erneut zu starten:

sudo systemctl start caddy

Caddy wird auch in Zukunft beim Booten gestartet, da es nicht deaktiviert wurde. Damit wurde Caddy erfolgreich auf die neueste Version aktualisiert und sollte zumindest bis zum nächsten Release ohne Unterbrechung weiterarbeiten.

Fazit

Durch Befolgen dieses Lernprogramms haben Sie eine Website mit Caddy erfolgreich bereitgestellt. Ein guter nächster Schritt wäre, eine Möglichkeit zu finden, benachrichtigt zu werden, wenn neue Versionen von Caddy veröffentlicht werden. Sie können beispielsweise den Feed Atom für Caddy-Versionen oder einen dedizierten Dienst wie Sibbell verwenden. Das Erstellen eines Skripts zur Automatisierung des Aktualisierungsprozesses des Servers ist ebenfalls eine gute Idee. Sie können sogar beide kombinieren und ein Build-Tool erstellen, das Caddy automatisch neu erstellt, wenn es eine neue Version gibt. Andernfalls können Sie die Dokumentation zu Caddy lesen und herausfinden, wie Sie sie am besten an Ihre Bedürfnisse anpassen können.