GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So installieren und konfigurieren Sie den Caddy-Webserver mit PHP und MariaDB unter Ubuntu 20.04

Caddy Web Server ist ein moderner Open-Source-Webserver, der in der GO-Sprache geschrieben ist. Es hat keine Abhängigkeiten und läuft von einer statischen Binärdatei ab und generiert und erneuert SSL-Zertifikate automatisch. Er kann als statischer Dateiserver, skalierbarer Reverse-Proxy oder leistungsstarker dynamischer Server arbeiten und kann über Plugins erweitert werden. Es enthält auch Unterstützung für HTTP/2- und experimentelle HTTP/3-Protokolle.

In diesem Tutorial installieren und konfigurieren Sie Caddy so, dass es zusammen mit PHP und MariaDB auf einem Ubuntu 20.04-basierten Server läuft.

Voraussetzungen

  • Ein Ubuntu 20.04-Server mit einem Nicht-Root-Konto mit sudo-Berechtigungen.
  • Ein vollständig registrierter Domänenname, der auf die IP-Adresse Ihres Servers verweist.

Schritt 1 - Firewall konfigurieren

Wenn Sie UFW (unkomplizierte Firewall) verwenden, müssen Sie sie so konfigurieren, dass der Zugriff auf HTTP- und HTTPS-Ports zugelassen wird, damit der Server funktioniert.

Überprüfen Sie den Status der Firewall.

$ sudo ufw status

Sie sollten etwa Folgendes sehen.

Status: active

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

HTTP- und HTTPS-Ports zulassen.

$ sudo ufw allow http
$ sudo ufw allow https

Überprüfen Sie den Status zur Bestätigung erneut.

$ sudo ufw status
Status: active

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

Schritt 2 – Caddy installieren

Es gibt mehrere Möglichkeiten, Caddy zu installieren, darunter eine Docker-Installation, die Verwendung offizieller Repositories oder das Erstellen aus der Quelle. Die Methode zum Erstellen aus der Quelle ist nützlich, wenn Sie Funktionen wünschen, die nur über ein Modul/Plug-in eines Drittanbieters hinzugefügt werden können.

Für die Zwecke dieses Tutorials bleiben wir bei der Verwendung des offiziellen Caddy-Repositorys für Ubuntu/Debian-basierte Systeme.

Repository zur Liste hinzufügen.

$ echo "deb [trusted=yes] https://apt.fury.io/caddy/ /" | sudo tee -a /etc/apt/sources.list.d/caddy-fury.list
$ sudo apt update

Dadurch wird eine Caddy-Repository-Datei in /etc/apt/sources.list.d erstellt Verzeichnis mit dem Speicherort des Caddy-Repositorys.

Caddy installieren.

$ sudo apt install caddy

Dadurch wird der Caddy-Webserver automatisch installiert und ausgeführt. Öffnen Sie http:// in Ihrem Browser und Sie sollten von der folgenden Seite begrüßt werden.

Schritt 3 - PHP installieren

Installieren Sie das PHP-Repository von Ondrej.

$ 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) (built: May 14 2020 10:03:35) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies

Schritt 4 – MariaDB installieren

MariaDB ist ein Drop-in-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 sich auf der Repository-Seite von MariaDB für einen anderen Mirror entscheiden, der sich näher am Standort Ihres Servers befindet.

$ 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 f
ocal 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, for debian-linux-gnu (x86_64) using readline 5.2

Aktivieren Sie den MariaDB-Dienst.

$ sudo systemctl enable mariadb

Schritt 5 – MariaDB konfigurieren

Führen Sie den folgenden Befehl aus, um eine Standardkonfiguration durchzuführen, z. B. das Vergeben eines Root-Passworts, das Entfernen anonymer Benutzer, das Unterbinden der Root-Anmeldung 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 unix_socket verwenden möchten Plugin. Der unix_socket Plugin können Sie sich mit Ihren Linux-Benutzerdaten bei MariaDB anmelden. Es gilt als sicherer, obwohl Sie einen herkömmlichen Benutzernamen/ein herkömmliches Passwort benötigen, um Apps von Drittanbietern wie phpMyAdmin zu verwenden. Wir bleiben bei der Verwendung von unix_socket Plugin für dieses Tutorial. Sie können phpMyAdmin weiterhin über jeden Benutzer verwenden, den Sie für Ihre Datenbanken erstellen.

Durch Drücken der Eingabetaste wird die Standardoption ausgewählt (in diesem Fall die großgeschriebene Option Y).

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables..
 ... Success!

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] [ANSWER n]
... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] [PRESS ENTER]
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] [PRESS ENTER]
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] [PRESS ENTER]
 \- Dropping test database...
 ... Success!
 \- Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] [PRESS ENTER]
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

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 mit Ihrer Wahl. Ersetzen Sie password mit einem starken Passwort.

CREATE DATABASE testdb;
CREATE USER 'user' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON testdb.* TO 'user';

Beenden Sie die MySQL-Shell.

exit

Schritt 6 – Caddy konfigurieren

Caddy kann auf verschiedene Arten konfiguriert werden – API-Aufrufe, JSON-Datei oder eine Caddy-Datei. Caddyfile ist der einfachste Weg, Caddy zu konfigurieren, den wir in unserem Tutorial verwenden werden.

Bevor wir Caddy konfigurieren, sollten wir das Stammverzeichnis für unsere Site erstellen.

$ sudo mkdir -p /var/www/example.com/html

-p flag erstellt auch alle fehlenden übergeordneten Verzeichnisse.

Außerdem müssen wir ein Verzeichnis zum Speichern der Protokolldateien für Caddy erstellen.

$ sudo mkdir /var/log/caddy

Der Caddy-Server erstellt bei der Installation einen Benutzer caddy die ihre Aufgaben für sie erledigt. Wir müssen dem Protokollverzeichnis Berechtigungen erteilen, damit Caddy darauf zugreifen und darin schreiben kann.

$ sudo chown -R caddy:caddy /var/log/caddy

Während der Installation hat Caddy eine standardmäßige Caddy-Datei unter /etc/caddy/Caddyfile generiert . Öffnen.

$ sudo nano /etc/caddy/Caddyfile

Es sollte etwa wie folgt aussehen.

# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace the line below with your
# domain name.
:80

# Set this path to your site's directory.
root * /usr/share/caddy

# Enable the static file server.
file_server

# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080

# Or serve a PHP site through php-fpm:
# php_fastcgi localhost:9000

# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile

:80 weist Caddy an, alles über Portnummer 80 bereitzustellen. root legt den Pfad für das Home-Verzeichnis Ihrer Site fest. file_server ermöglicht Caddy, als statischer Dateiserver zu laufen.

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] {
    	protocols tls1.2 tls1.3    	
    }
}

Lassen Sie uns alle Abschnitte des Caddyfiles unten durchgehen.

  • Der erste Block in jeder Caddy-Datei 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 Caddydatei immer direkt mit dem Site-Block starten.
  • Der nächste Block ist der Site-Block. Wenn Sie nur eine Site auf Ihrem Server haben, müssen Sie Ihre Konfiguration nicht in einen Block einschließen, aber wenn Sie mehrere Sites hosten, sollten Sie die Konfiguration jeder Site in einem eigenen Block hosten. Eine Seitensperre wird durch geschweifte Klammern gekennzeichnet. Jeder Seitenblock beginnt mit dem Hostnamen der Seite.
  • log aktiviert und konfiguriert die Protokollierung von HTTP-Anforderungen. Ohne das log Anweisung, Caddy protokolliert nichts. output konfiguriert, wohin die Protokolldatei geschrieben werden soll. format beschreibt, wie die Protokolle codiert oder formatiert werden. Die console formatiert den Protokolleintrag für die menschliche Lesbarkeit.
  • encode Direktive aktiviert hier die Gzip- und Zstandard-Komprimierung für die Site.
  • php_fastcgi leitet Anfragen an einen PHP FastCGI-Server wie php-fpm weiter . Hier hören wir Anfragen über einen Unix-Socket.
  • tls block konfiguriert Einstellungen in Bezug auf SSL-Zertifikate und Sicherheit. Hier haben wir die Unterstützung für die Protokolle TLSv1.2 und TLSv1.3 aktiviert. Caddy unterstützt standardmäßig TLS v1.2. Caddy generiert auch automatisch SSL-Zertifikate für alle Sites. 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, z. B. http://example.com. In solchen Fällen generiert Caddy kein SSL-Zertifikat.

Bisher haben wir die absoluten Grundlagen zum Schreiben eines Caddyfiles behandelt, was Ihnen den Einstieg erleichtern soll. Sie können mehr darüber in der offiziellen Dokumentation lesen.

Schritt 7 - PHP konfigurieren

Nun, da unser Caddyfile fertig 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 user=www-data und group=www-data Zeilen in der Datei und ändern Sie sie in caddy .

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = caddy
; RPM: Keep a group allowed to write in log dir.
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 geben Sie Y ein wenn Sie dazu aufgefordert werden.

Starten Sie den PHP-fpm-Prozess neu.

$ sudo systemctl restart php7.4-fpm

Schritt 8 – Demo-Site starten

Nachdem wir nun eine Caddy-Datei erstellt und PHP für die Ausführung mit dem Server konfiguriert haben, 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 Caddy-Datei zu übernehmen.

$ 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
     Loaded: loaded (/lib/systemd/system/caddy.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-05-20 07:09:25 UTC; 2s ago
       Docs: https://caddyserver.com/docs/
   Main PID: 25410 (caddy)
      Tasks: 7 (limit: 1074)
     Memory: 17.8M
     CGroup: /system.slice/caddy.service
             ??25410 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO][example.com] Obtain: Lock acquired; proceeding...
May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO][cache:0xc0006f8cd0] Started certificate maintenance routine
May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO] acme: Registering account for [email protected]
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO][example.com] Waiting on rate limiter...
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO][example.com] Done waiting
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO] [example.com] acme: Obtaining bundled SAN certificate given a CSR
May 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
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] acme: use tls-alpn-01 solver
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] acme: Trying to solve TLS-ALPN-01
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 http: TLS handshake error from 127.0.0.1:39466: EOF

Sie können von oben sehen, dass Caddy das Zertifikat automatisch generiert hat, als wir den Server nach dem Erstellen der Caddy-Datei zum ersten Mal 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 "user" und "password" Felder mit den MariaDB-Anmeldeinformationen, die Sie zuvor erstellt haben.

<html>
<head>
    <title>Caddy Demo Site</title>
    <style type="text/css">
        #wrap {
            width: 900px;
            margin: 0 auto;
        }
    </style>
</head>
<body id="wrap">
    <h2>Caddy Demo Site</h2>
    <?php echo '<p>Hello,</p>';

    // Define PHP variables for the MySQL connection.
    $servername = "localhost";
    $username = "user";
    $password = "password";

    // Create a MySQL connection.
    $conn = mysqli_connect($servername, $username, $password);

    // Report if the connection fails or is successful.
    if (!$conn) {
        exit('<p>Your connection has failed.<p>' .  mysqli_connect_error());
    }
    echo '<p>You have connected successfully.</p>';
    ?>
</body>
</html>

Speichern Sie die Datei, indem Sie Strg+X drücken und geben Sie Y ein wenn Sie dazu aufgefordert werden.

Besuchen Sie https://example.com/test.php in einem Webbrowser. Sie sollten die folgende Seite erhalten.

Wenn Sie eine Fehlermeldung sehen oder die Seite überhaupt nicht geladen wird, überprüfen Sie Ihre Konfiguration erneut

Entfernen Sie die Testdatei, sobald Sie zufrieden sind.

$ sudo rm /var/www/example.com/html/test.php

Schlussfolgerung

Damit ist unser Tutorial abgeschlossen, in dem wir den Caddy-Webserver zusammen mit PHP und MariaDB SQL installiert haben. Wenn Sie Fragen haben, stellen Sie sie in den Kommentaren unten.


Ubuntu
  1. So installieren und konfigurieren Sie den DHCP-Server unter Ubuntu 20.04

  2. So installieren Sie den Cherokee-Webserver mit PHP5 und MySQL unter Ubuntu 11.04

  3. So installieren und konfigurieren Sie Mariadb 10 in Ubuntu 20.04

  4. So installieren Sie den OpenLiteSpeed-Webserver PHP und MariaDB unter Ubuntu 20.10

  5. So installieren und konfigurieren Sie den Apache-Webserver unter Ubuntu 13.10

So installieren und konfigurieren Sie DHCP unter Ubuntu 18.04

So installieren und konfigurieren Sie den Apache-Webserver unter Ubuntu

So installieren Sie Lighttpd mit PHP und MariaDB unter Ubuntu 15.04

So installieren Sie Lighttpd mit PHP und MariaDB unter Ubuntu 16.04 LTS

So installieren Sie den OpenLiteSpeed-Webserver mit MariaDB und PHP

So installieren und konfigurieren Sie den Caddy Web Server mit PHP unter Rocky Linux 8