GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment installer et configurer Caddy Web Server avec PHP et MariaDB sur Ubuntu 20.04

Caddy Web Server est un serveur Web open source moderne écrit en langage GO. Il n'a aucune dépendance et fonctionne à partir d'un fichier binaire statique et génère et renouvelle automatiquement les certificats SSL. Il peut fonctionner comme un serveur de fichiers statique, un proxy inverse évolutif ou un puissant serveur dynamique et peut être étendu via des plugins. Il inclut également la prise en charge des protocoles HTTP/2 et HTTP/3 expérimental.

Dans ce didacticiel, vous allez installer et configurer Caddy pour qu'il s'exécute avec PHP et MariaDB sur un serveur basé sur Ubuntu 20.04.

Prérequis

  • Un serveur Ubuntu 20.04 avec un compte non root ayant des privilèges sudo.
  • Un nom de domaine entièrement enregistré pointant vers l'adresse IP de votre serveur.

Étape 1 - Configurer le pare-feu

Si vous utilisez UFW (pare-feu non compliqué), vous devez le configurer pour autoriser l'accès aux ports HTTP et HTTPS pour que le serveur fonctionne.

Vérifiez l'état du pare-feu.

$ sudo ufw status

Vous devriez voir quelque chose comme ce qui suit.

Status: active

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

Autoriser les ports HTTP et HTTPs.

$ sudo ufw allow http
$ sudo ufw allow https

Vérifiez à nouveau l'état pour confirmer.

$ 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)

Étape 2 - Installer le chariot

Il existe plusieurs façons d'installer Caddy, notamment une installation Docker, en utilisant des référentiels officiels ou en construisant à partir de la source. La méthode de génération à partir de la source est utile si vous souhaitez des fonctionnalités qui ne peuvent être ajoutées que via un module/plugin tiers.

Pour les besoins de ce didacticiel, nous nous en tiendrons à l'utilisation du référentiel officiel Caddy pour les systèmes basés sur Ubuntu/Debian.

Ajoutez le référentiel à la liste.

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

Cela créera un fichier de référentiel caddy dans le /etc/apt/sources.list.d répertoire avec l'emplacement du référentiel du Caddy.

Installez Caddie.

$ sudo apt install caddy

Cela installera et exécutera automatiquement le serveur Web Caddy. Ouvrez http:// dans votre navigateur et vous devriez être accueilli par la page suivante.

Étape 3 - Installer PHP

Installez le dépôt PHP d'Ondrej.

$ sudo add-apt-repository ppa:ondrej/php

Installez PHP 7.4 avec quelques packages supplémentaires.

$ sudo apt install php-cli php-fpm php-mysql

Vérifiez si PHP fonctionne correctement.

$ php --version

Vous devriez voir une sortie similaire.

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

Étape 4 - Installer MariaDB

MariaDB remplace MySQL, ce qui signifie que les commandes pour exécuter et faire fonctionner MariaDB sont les mêmes que celles de MySQL.

Ajoutez le référentiel officiel de Mariadb. Vous pouvez opter pour un autre miroir plus proche de l'emplacement de votre serveur à partir de la page de référentiel de 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 f
ocal main'

Pour installer MariaDB, exécutez la commande suivante.

$ sudo apt install mariadb-server

Vérifiez si MariaDB est installé correctement.

$ mysql --version

Vous devriez voir la sortie suivante.

mysql  Ver 15.1 Distrib 10.4.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Activez le service MariaDB.

$ sudo systemctl enable mariadb

Étape 5 - Configurer MariaDB

Exécutez la commande suivante pour effectuer la configuration par défaut, par exemple en donnant un mot de passe root, en supprimant les utilisateurs anonymes, en interdisant la connexion root à distance et en supprimant les tables de test.

$ sudo mysql_secure_installation

Avec MariaDB 10.4, il vous sera désormais demandé d'utiliser le mot de passe root ou unix_socket brancher. Le unix_socket Le plugin vous permet de vous connecter à MariaDB avec vos informations d'identification d'utilisateur Linux. Il est considéré comme plus sûr, bien que vous ayez besoin d'un nom d'utilisateur/mot de passe traditionnel pour utiliser des applications tierces telles que phpMyAdmin. Nous nous en tiendrons à l'utilisation de unix_socket plugin pour ce tutoriel. Vous pouvez toujours utiliser phpMyAdmin via n'importe quel utilisateur spécifique que vous créez pour vos bases de données.

Appuyer sur Entrée choisit l'option par défaut (celle qui est en majuscule, Y dans ce cas).

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!

Connectez-vous au SQL Shell de MariaDB.

$ sudo mysql

Entrez votre mot de passe root lorsque vous y êtes invité.

Créez une base de données de test et un utilisateur avec une autorisation d'accès. Remplacer database et user avec votre choix. Remplacer password avec un mot de passe fort.

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

Quittez le shell MySQL.

exit

Étape 6 - Configurer le chariot

Caddy peut être configuré de plusieurs manières - appels API, fichier JSON ou un Caddyfile. Caddyfile est le moyen le plus simple de configurer Caddy que nous utiliserons dans notre tutoriel.

Avant de configurer Caddy, nous devons créer le répertoire racine de notre site.

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

-p flag crée également tous les répertoires parents manquants.

Nous devons également créer un répertoire pour stocker les fichiers journaux de Caddy.

$ sudo mkdir /var/log/caddy

Le serveur Caddy lors de l'installation crée un utilisateur caddy qui gère ses tâches à sa place. Nous devons accorder des autorisations au répertoire des journaux afin que Caddy puisse y accéder et y écrire.

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

Lors de l'installation, Caddy a généré un Caddyfile par défaut dans /etc/caddy/Caddyfile . Ouvrez-le.

$ sudo nano /etc/caddy/Caddyfile

Cela devrait ressembler à ce qui suit.

# 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 dit à Caddy de tout servir sur le port numéro 80. root définit le chemin du répertoire personnel de votre site. file_server permet à Caddy de fonctionner comme un serveur de fichiers statique.

Remplacez le code ci-dessus par le code suivant.

{
	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    	
    }
}

Passons en revue toutes les sections du Caddyfile ci-dessous.

  • Le premier bloc de n'importe quel Caddyfile est un bloc global à moins que vous ne spécifiiez un nom d'hôte qui devient alors un bloc de site. Un bloc global contient des directives qui s'appliquent à tous les sites que vous hébergez sous le serveur. Dans notre exemple, nous avons activé la prise en charge du protocole expérimental HTTP/3. Le bloc global est complètement facultatif et vous pouvez toujours démarrer votre Caddyfile directement avec le bloc site.
  • Le bloc suivant est le bloc du site. Si vous n'avez qu'un seul site sur votre serveur, vous n'avez pas besoin d'enfermer votre configuration dans un bloc, mais si vous comptez héberger plusieurs sites, vous devez héberger la configuration de chaque site dans son propre bloc. Un bloc de site est marqué par des accolades. Chaque bloc de site commence par le nom d'hôte du site.
  • log active et configure la journalisation des requêtes HTTP. Sans le log directive, Caddy n'enregistrera rien. output configure où écrire le fichier journal. format décrit comment encoder ou formater les journaux. La console formate l'entrée de journal pour une lisibilité humaine.
  • encode La directive active ici la compression Gzip et Zstandard pour le site.
  • php_fastcgi requêtes proxy vers un serveur PHP FastCGI tel que php-fpm . Ici, nous écoutons les requêtes sur un socket Unix.
  • tls block configure les paramètres liés aux certificats SSL et à la sécurité. Ici, nous avons activé la prise en charge des protocoles TLSv1.2 et TLSv1.3. Par défaut, Caddy prend en charge TLS v1.2 prêt à l'emploi. Caddy génère également des certificats SSL automatiquement pour tous les sites. Si vous ne voulez pas que Caddy génère SSL pour vous, vous pouvez le faire en utilisant l'adresse IP au lieu du nom d'hôte ou en spécifiant l'URL complète, c'est-à-dire http://example.com. Dans de tels cas, Caddy ne générera pas le certificat SSL.

Jusqu'à présent, nous avons couvert les bases absolues de l'écriture d'un Caddyfile qui devrait vous aider à démarrer. Vous pouvez en savoir plus à ce sujet dans la documentation officielle.

Étape 7 - Configurer PHP

Maintenant que notre Caddyfile est prêt, il est temps de configurer PHP.

Tout d'abord, nous devons changer le nom d'utilisateur pour le processus PHP. Ouvrez le fichier /etc/php-fpm.d/www.conf .

$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf

Trouvez le user=www-data et group=www-data lignes dans le fichier et changez-les en 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
...

Recherchez également les lignes listen.owner=www-data et listen.group=www-data dans le fichier et changez-les en caddy .

listen.owner = caddy
listen.group = caddy

Enregistrez le fichier en appuyant sur Ctrl+X et en saisissant Y lorsque vous y êtes invité.

Redémarrez le processus PHP-fpm.

$ sudo systemctl restart php7.4-fpm

Étape 8 - Lancer le site de démonstration

Maintenant que nous avons créé un Caddyfile et configuré PHP pour fonctionner avec le serveur, il est temps de créer et de lancer un site Web de démonstration.

Assurez-vous que votre nom de domaine pointe vers l'adresse IP du serveur.

Redémarrez le serveur Caddy pour appliquer les modifications dans le Caddyfile que nous avons créé ci-dessus.

$ sudo systemctl restart caddy

Vérifiez l'état du serveur Caddy pour vous assurer qu'il fonctionne correctement.

$ 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

Vous pouvez voir ci-dessus que Caddy a généré le certificat automatiquement lorsque nous avons redémarré le serveur pour la première fois après avoir créé le Caddyfile.

Créons une page de test pour vérifier que Caddy peut rendre PHP et se connecter à la base de données MariaDB.

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

Collez le code suivant dans l'éditeur. Remplacez "user" et "password" champs avec les informations d'identification MariaDB que vous avez créées auparavant.

<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>

Enregistrez le fichier en appuyant sur Ctrl+X et en saisissant Y lorsque vous y êtes invité.

Visitez https://example.com/test.php dans un navigateur Web. Vous devriez obtenir la page suivante.

Si vous voyez un message d'erreur ou si la page ne se charge pas du tout, revérifiez votre configuration

Supprimez le fichier de test une fois que vous êtes satisfait.

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

Conclusion

Ceci conclut notre tutoriel où nous avons installé le serveur Web Caddy avec PHP et MariaDB SQL. Si vous avez des questions, posez-les dans les commentaires ci-dessous.


Ubuntu
  1. Comment installer et configurer le serveur DHCP sur Ubuntu 20.04

  2. Comment installer Cherokee Web Server avec PHP5 et MySQL sur Ubuntu 11.04

  3. Comment installer et configurer Mariadb 10 dans Ubuntu 20.04

  4. Comment installer le serveur Web OpenLiteSpeed ​​PHP et MariaDB sur Ubuntu 20.10

  5. Comment installer et configurer le serveur Web Apache sur Ubuntu 13.10

Comment installer et configurer DHCP sur Ubuntu 18.04

Comment installer et configurer le serveur Web Apache sur Ubuntu

Comment installer Lighttpd avec PHP et MariaDB sur Ubuntu 15.04

Comment installer Lighttpd avec PHP et MariaDB sur Ubuntu 16.04 LTS

Comment installer OpenLiteSpeed ​​Web Server avec MariaDB et PHP

Comment installer et configurer Caddy Web Server avec PHP sur Rocky Linux 8