Webserver · 11 min read · Nov 28, 2025
So installieren und konfigurieren Sie den Caddy-Webserver mit PHP und MariaDB auf Ubuntu 20.04

Caddy Webserver ist ein moderner Open-Source-Webserver, der in der Programmiersprache GO geschrieben ist. Er hat keine Abhängigkeiten und läuft von einer statischen Binärdatei und generiert und erneuert SSL-Zertifikate automatisch. Er kann als statischer Dateiserver, skalierbarer Reverse-Proxy oder leistungsstarker dynamischer Server fungieren und kann über Plugins erweitert werden. Er unterstützt auch die Protokolle HTTP/2 und experimentelles HTTP/3.
In diesem Tutorial installieren und konfigurieren Sie Caddy, um zusammen mit PHP und MariaDB auf einem Ubuntu 20.04-basierten Server zu laufen.
Voraussetzungen
- Ein Ubuntu 20.04-Server mit einem Nicht-Root-Konto, das über sudo-Rechte verfügt.
- Ein vollständig registrierter Domainname, der auf die IP-Adresse Ihres Servers verweist.
Schritt 1 - Firewall konfigurieren
Wenn Sie UFW (Uncomplicated Firewall) verwenden, müssen Sie es so konfigurieren, dass der Zugriff auf die HTTP- und HTTPS-Ports für den Server erlaubt ist.
Überprüfen Sie den Status der Firewall.
$ sudo ufw status
Sie sollten etwas Ähnliches wie Folgendes sehen.
Status: aktiv
Zu Aktion Von
-- ------ ----
OpenSSH ERLAUBEN Überall
OpenSSH (v6) ERLAUBEN Überall (v6)
Erlauben Sie HTTP- und HTTPS-Ports.
$ sudo ufw allow http
$ sudo ufw allow https
Überprüfen Sie den Status erneut, um zu bestätigen.
$ sudo ufw status
Status: aktiv
Zu Aktion Von
-- ------ ----
OpenSSH ERLAUBEN Überall
80/tcp ERLAUBEN Überall
443/tcp ERLAUBEN Überall
OpenSSH (v6) ERLAUBEN Überall (v6)
80/tcp (v6) ERLAUBEN Überall (v6)
443/tcp (v6) ERLAUBEN Überall (v6)
Schritt 2 - Caddy installieren
Es gibt mehrere Möglichkeiten, Caddy zu installieren, einschließlich einer Docker-Installation, der Verwendung offizieller Repositories oder dem Erstellen aus dem Quellcode. Die Methode, aus dem Quellcode zu erstellen, ist nützlich, wenn Sie Funktionen benötigen, die nur über ein Drittanbieter-Modul/Plugin hinzugefügt werden können.
Für die Zwecke dieses Tutorials werden wir uns an die Verwendung des offiziellen Caddy-Repositories für Ubuntu/Debian-basierte Systeme halten.
Fügen Sie das Repository zur Liste hinzu.
$ echo "deb [trusted=yes] https://apt.fury.io/caddy/ /" | sudo tee -a /etc/apt/sources.list.d/caddy-fury.list
$ sudo apt update
Dies erstellt eine Caddy-Repository-Datei im Verzeichnis /etc/apt/sources.list.d mit dem Standort des Caddy-Repositories.
Installieren Sie Caddy.
$ sudo apt install caddy
Dies installiert und startet automatisch den Caddy-Webserver. Öffnen Sie http:// in Ihrem Browser und Sie sollten von der folgenden Seite begrüßt werden.

Schritt 3 - PHP installieren
Installieren Sie Ondrejs PHP-Repository.
$ sudo add-apt-repository ppa:ondrej/php
Installieren Sie PHP 7.4 zusammen mit einigen zusätzlichen Paketen.
$ sudo apt install php-cli php-fpm php-mysql
Überprüfen Sie, ob PHP korrekt funktioniert.
$ php --version
Sie sollten eine ähnliche Ausgabe sehen.
PHP 7.4.6 (cli) (gebaut: 14. Mai 2020 10:03:35) (NTS)
Copyright (c) Die PHP-Gruppe
Zend Engine v3.4.0, Copyright (c) Zend Technologies
mit Zend OPcache v7.4.6, Copyright (c), von Zend Technologies
Schritt 4 - MariaDB installieren
MariaDB ist ein Ersatz für MySQL, was bedeutet, dass die Befehle zum Ausführen und Betreiben von MariaDB die gleichen sind wie die für MySQL.
Fügen Sie das offizielle Repository von MariaDB hinzu. Sie können einen anderen Mirror wählen, der näher an Ihrem Serverstandort liegt, von der Repository-Seite von MariaDB.
$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64] http://mirror.lstn.net/mariadb/repo/10.4/ubuntu focal main'
Um MariaDB zu installieren, geben Sie den folgenden Befehl ein.
$ sudo apt install mariadb-server
Überprüfen Sie, ob MariaDB korrekt installiert wurde.
$ mysql --version
Sie sollten die folgende Ausgabe sehen.
mysql Ver 15.1 Distrib 10.4.13-MariaDB, für debian-linux-gnu (x86_64) unter Verwendung von readline 5.2
Aktivieren Sie den MariaDB-Dienst.
$ sudo systemctl enable mariadb
Schritt 5 - MariaDB konfigurieren
Führen Sie den folgenden Befehl aus, um die Standardkonfiguration durchzuführen, z. B. das Festlegen eines Root-Passworts, das Entfernen anonymer Benutzer, das Verhindern des Root-Logins aus der Ferne und das Löschen von Testtabellen.
$ sudo mysql_secure_installation
Mit MariaDB 10.4 werden Sie nun gefragt, ob Sie das Root-Passwort oder das unix_socket-Plugin verwenden möchten. Das unix_socket-Plugin ermöglicht es Ihnen, sich mit Ihren Linux-Benutzerdaten bei MariaDB anzumelden. Es gilt als sicherer, obwohl Sie einen traditionellen Benutzernamen/Passwort benötigen, um Drittanbieter-Apps wie phpMyAdmin zu verwenden. Wir werden in diesem Tutorial das unix_socket-Plugin verwenden. Sie können phpMyAdmin jedoch weiterhin über jeden Benutzer verwenden, den Sie für Ihre Datenbanken erstellen.
Durch Drücken der Eingabetaste wählen Sie die Standardoption (die, die großgeschrieben ist, Y in diesem Fall).
HINWEIS: DAS AUSFÜHREN ALLER TEILE DIESER SKRIPTE WIRD FÜR ALLE MariaDB
SERVER IM PRODUKTIVE EINSATZ EMPFOHLEN! BITTE JEDEN SCHRITT SORGFÄLTIG LESEN!
Um sich bei MariaDB anzumelden, um es zu sichern, benötigen wir das aktuelle
Passwort für den Root-Benutzer. Wenn Sie MariaDB gerade installiert haben und
noch kein Root-Passwort festgelegt haben, sollten Sie hier einfach die Eingabetaste drücken.
Geben Sie das aktuelle Passwort für root ein (drücken Sie die Eingabetaste für keines): [EINGABETASTE DRÜCKEN]
OK, Passwort erfolgreich verwendet, weiter geht's...
Das Festlegen des Root-Passworts oder die Verwendung des unix_socket stellt sicher, dass niemand
sich ohne die richtige Autorisierung beim MariaDB-Root-Benutzer anmelden kann.
Ihr Root-Konto ist bereits geschützt, daher können Sie sicher 'n' antworten.
Wechseln Sie zur unix_socket-Authentifizierung [Y/n] [EINGABETASTE DRÜCKEN]
Erfolgreich aktiviert!
Aktualisieren der Berechtigungstabellen..
... Erfolg!
Ihr Root-Konto ist bereits geschützt, daher können Sie sicher 'n' antworten.
Das Root-Passwort ändern? [Y/n] [ANTWORT n]
... überspringen.
Standardmäßig hat eine MariaDB-Installation einen anonymen Benutzer, der es jedem ermöglicht,
sich bei MariaDB anzumelden, ohne dass ein Benutzerkonto für sie erstellt werden muss. Dies ist nur für Tests gedacht und soll die Installation etwas reibungsloser gestalten. Sie sollten sie entfernen, bevor Sie in eine Produktionsumgebung wechseln.
Anonyme Benutzer entfernen? [Y/n] [EINGABETASTE DRÜCKEN]
... Erfolg!
Normalerweise sollte root nur von 'localhost' aus verbunden werden dürfen. Dies
stellt sicher, dass jemand das Root-Passwort nicht aus dem Netzwerk erraten kann.
Verhindern Sie das Root-Login aus der Ferne? [Y/n] [EINGABETASTE DRÜCKEN]
... Erfolg!
Standardmäßig kommt MariaDB mit einer Datenbank namens 'test', auf die jeder zugreifen kann. Dies ist ebenfalls nur für Tests gedacht und sollte entfernt werden, bevor Sie in eine Produktionsumgebung wechseln.
Testdatenbank und Zugriff darauf entfernen? [Y/n] [EINGABETASTE DRÜCKEN]
\- Löschen der Testdatenbank...
... Erfolg!
\- Entfernen von Berechtigungen für die Testdatenbank...
... Erfolg!
Das Aktualisieren der Berechtigungstabellen stellt sicher, dass alle bisher vorgenommenen Änderungen sofort wirksam werden.
Berechtigungstabellen jetzt aktualisieren? [Y/n] [EINGABETASTE DRÜCKEN]
... Erfolg!
Aufräumen...
Alles erledigt! Wenn Sie alle oben genannten Schritte abgeschlossen haben, sollte Ihre MariaDB-Installation jetzt sicher sein.
Danke, dass Sie MariaDB verwenden!
Melden Sie sich bei der SQL-Shell von MariaDB an.
$ sudo mysql
Geben Sie Ihr Root-Passwort ein, wenn Sie dazu aufgefordert werden.
Erstellen Sie eine Testdatenbank und einen Benutzer mit Zugriffsberechtigung. Ersetzen Sie database und user durch Ihre Wahl. Ersetzen Sie password durch ein sicheres Passwort.
CREATE DATABASE testdb;
CREATE USER 'user' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON testdb.* TO 'user';
Verlassen Sie die MySQL-Shell.
exit
Schritt 6 - Caddy konfigurieren
Caddy kann auf verschiedene Arten konfiguriert werden - API-Aufrufe, JSON-Datei oder eine Caddyfile. Die Caddyfile ist die einfachste Möglichkeit, Caddy zu konfigurieren, die wir in unserem Tutorial verwenden werden.
Bevor wir Caddy konfigurieren, sollten wir das Stammverzeichnis für unsere Website erstellen.
$ sudo mkdir -p /var/www/example.com/html
Die -p-Option erstellt auch alle fehlenden übergeordneten Verzeichnisse.
Wir müssen auch ein Verzeichnis erstellen, um die Protokolldateien für Caddy zu speichern.
$ sudo mkdir /var/log/caddy
Der Caddy-Server erstellt bei der Installation einen Benutzer caddy, der seine Aufgaben übernimmt. Wir müssen die Berechtigungen für das Protokollverzeichnis so festlegen, dass Caddy darauf zugreifen und darin schreiben kann.
$ sudo chown -R caddy:caddy /var/log/caddy
Während der Installation hat Caddy eine Standard-Caddyfile unter /etc/caddy/Caddyfile erstellt. Öffnen Sie sie.
$ sudo nano /etc/caddy/Caddyfile
Sie sollte ungefähr so aussehen:
# Die Caddyfile ist eine einfache Möglichkeit, Ihren Caddy-Webserver zu konfigurieren.
#
# Es sei denn, die Datei beginnt mit einem globalen Optionsblock, ist die erste
# nicht auskommentierte Zeile immer die Adresse Ihrer Website.
#
# Um Ihren eigenen Domainnamen (mit automatischem HTTPS) zu verwenden, stellen Sie zuerst sicher,
# dass die A/AAAA-DNS-Einträge Ihrer Domain korrekt auf die öffentliche IP dieses
# Rechners zeigen, und ersetzen Sie dann die folgende Zeile durch Ihren
# Domainnamen.
:80
# Setzen Sie diesen Pfad auf das Verzeichnis Ihrer Website.
root * /usr/share/caddy
# Aktivieren Sie den statischen Dateiserver.
file_server
# Eine weitere häufige Aufgabe ist das Einrichten eines Reverse-Proxys:
# reverse_proxy localhost:8080
# Oder bedienen Sie eine PHP-Website über php-fpm:
# php_fastcgi localhost:9000
# Weitere Informationen finden Sie in den Caddy-Dokumenten:
# https://caddyserver.com/docs/caddyfile
:80 sagt Caddy, dass alles über die Portnummer 80 bereitgestellt werden soll. root legt den Pfad für das Stammverzeichnis Ihrer Website fest. file_server ermöglicht es Caddy, als statischer Dateiserver zu fungieren.
Ersetzen Sie den obigen Code durch den folgenden Code.
{
experimental_http3
}
example.com {
root * /var/www/example.com/html
log {
output file /var/log/caddy/example.com.access.log {
roll_size 3MiB
roll_keep 5
roll_keep_for 48h
}
format console
}
encode gzip zstd
php_fastcgi unix//run/php/php7.4-fpm.sock
tls [email protected] {
protokolle tls1.2 tls1.3
}
}
Lassen Sie uns die einzelnen Abschnitte der Caddyfile unten durchgehen.
- Der erste Block in jeder Caddyfile ist ein globaler Block, es sei denn, Sie geben einen Hostnamen an, der dann zu einem Site-Block wird. Ein globaler Block enthält Anweisungen, die auf alle Websites angewendet werden, die Sie unter dem Server hosten. In unserem Beispiel haben wir die Unterstützung für das experimentelle HTTP/3-Protokoll aktiviert. Der globale Block ist völlig optional und Sie können Ihre Caddyfile immer direkt mit dem Site-Block beginnen.
- Der nächste Block ist der Site-Block. Wenn Sie nur 1 Website auf Ihrem Server haben, müssen Sie Ihre Konfiguration nicht in einem Block einschließen, aber wenn Sie mehrere Websites hosten möchten, sollten Sie die Konfiguration jeder Website in ihrem eigenen Block unterbringen. Ein Site-Block wird durch geschweifte Klammern gekennzeichnet. Jeder Site-Block beginnt mit dem Hostnamen der Website.
logaktiviert und konfiguriert das Protokollieren von HTTP-Anfragen. Ohne dielog-Anweisung protokolliert Caddy nichts.outputkonfiguriert, wo die Protokolldatei geschrieben werden soll.formatbeschreibt, wie die Protokolle kodiert oder formatiert werden. Dasconsole-Format macht den Protokolleintrag für Menschen lesbar.- Die
encode-Anweisung hier aktiviert Gzip- und Zstandard-Kompression für die Website. php_fastcgileitet Anfragen an einen PHP-FastCGI-Server wiephp-fpmweiter. Hier hören wir auf Anfragen über einen Unix-Socket.- Der
tls-Block konfiguriert Einstellungen, die mit SSL-Zertifikaten und Sicherheit zu tun haben. Hier haben wir die Unterstützung für die Protokolle TLSv1.2 und TLSv1.3 aktiviert. Standardmäßig unterstützt Caddy TLS v1.2 sofort. Caddy generiert auch automatisch SSL-Zertifikate für alle Websites. Wenn Sie nicht möchten, dass Caddy SSL für Sie generiert, können Sie dies tun, indem Sie entweder die IP-Adresse anstelle des Hostnamens verwenden oder die vollständige URL angeben, d. h. http://example.com. In solchen Fällen wird Caddy das SSL-Zertifikat nicht generieren.
Bisher haben wir die absoluten Grundlagen des Schreibens einer Caddyfile behandelt, die Ihnen helfen sollten, loszulegen. Sie können mehr darüber in der offiziellen Dokumentation lesen.
Schritt 7 - PHP konfigurieren
Jetzt, da unsere Caddyfile bereit ist, ist es an der Zeit, PHP zu konfigurieren.
Zuerst müssen wir den Benutzernamen für den PHP-Prozess ändern. Öffnen Sie die Datei /etc/php-fpm.d/www.conf.
$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf
Suchen Sie die Zeilen user=www-data und group=www-data in der Datei und ändern Sie sie in caddy.
...
; Unix-Benutzer/-Gruppe der Prozesse
; Hinweis: Der Benutzer ist obligatorisch. Wenn die Gruppe nicht festgelegt ist, wird die Gruppe des Standardbenutzers
; verwendet.
; RPM: apache-Benutzer, der gewählt wurde, um Zugriff auf dieselben Verzeichnisse wie httpd zu gewähren
user = caddy
; RPM: Halten Sie eine Gruppe, die im Protokollverzeichnis schreiben darf.
group = caddy
...
Suchen Sie auch die Zeilen listen.owner=www-data und listen.group=www-data in der Datei und ändern Sie sie in caddy.
listen.owner = caddy
listen.group = caddy
Speichern Sie die Datei, indem Sie Strg+X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.
Starten Sie den PHP-fpm-Prozess neu.
$ sudo systemctl restart php7.4-fpm
Schritt 8 - Demo-Website starten
Jetzt, da wir eine Caddyfile erstellt und PHP konfiguriert haben, um mit dem Server zu laufen, ist es an der Zeit, eine Demo-Website zu erstellen und zu starten.
Stellen Sie sicher, dass Ihr Domainname auf die IP-Adresse des Servers verweist.
Starten Sie den Caddy-Server neu, um die Änderungen in der oben erstellten Caddyfile anzuwenden.
$ sudo systemctl restart caddy
Überprüfen Sie den Status des Caddy-Servers, um sicherzustellen, dass er ordnungsgemäß funktioniert.
$ sudo systemctl status caddy
? caddy.service - Caddy
Geladen: geladen (/lib/systemd/system/caddy.service; aktiviert; Hersteller-Voreinstellung: aktiviert)
Aktiv: aktiv (laufend) seit Mi 2020-05-20 07:09:25 UTC; vor 2s
Docs: https://caddyserver.com/docs/
Haupt-PID: 25410 (caddy)
Aufgaben: 7 (Limit: 1074)
Speicher: 17.8M
CGroup: /system.slice/caddy.service
??25410 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
Mai 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO][example.com] Erhalten: Sperre erworben; fortfahren...
Mai 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO][cache:0xc0006f8cd0] Zertifikatspflege-Routine gestartet
Mai 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO] acme: Registrierung des Kontos für [email protected]
Mai 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO][example.com] Warten auf Ratenbegrenzer...
Mai 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO][example.com] Fertig mit Warten
Mai 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO] [example.com] acme: Erhalten des gebündelten SAN-Zertifikats anhand eines CSR
Mai 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/4696123289
Mai 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] acme: Verwenden des tls-alpn-01-Lösers
Mai 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] acme: Versuch, TLS-ALPN-01 zu lösen
Mai 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 http: TLS-Handshake-Fehler von 127.0.0.1:39466: EOF
Sie können oben sehen, dass Caddy das Zertifikat automatisch generiert hat, als wir den Server zum ersten Mal nach dem Erstellen der Caddyfile neu gestartet haben.
Lassen Sie uns eine Testseite erstellen, um zu überprüfen, ob Caddy PHP rendern und eine Verbindung zur MariaDB-Datenbank herstellen kann.
$ sudo nano /var/www/example.com/html/test.php
Fügen Sie den folgenden Code in den Editor ein. Ersetzen Sie die Felder `
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.