Serveur web : installation et configuration de Caddy sur Debian 12
Sommaire
I. Présentation
Comment déployer le serveur web Caddy sur une machine Linux ? Ce tutoriel répond à cette question, car nous allons installer et configurer Caddy sur Debian 12 ! Nous verrons quelques options de configuration, ainsi que l'ajout de PHP-FPM, pour vous permettre de faire vos premiers pas avec Caddy.
Qu'est-ce que Caddy Web Server ?
Écrit en Go, Caddy est un serveur web open source créé par ZeroSSL. Il représente une alternative aux autres serveurs Web, notamment Apache2 et Nginx que vous connaissez probablement. Vous pouvez utiliser ce lien pour accéder au site officiel.
Voici quelques caractéristiques clés pour décrire Caddy :
- Caddy prend en charge le HTTPS automatique, c'est-à-dire qu'il va obtenir un certificat TLS automatiquement pour votre site Web. Ce certificat TLS valide est obtenu auprès de Let's Encrypt et sera renouvelé automatiquement. Possibilité d'avoir du HTTPS sur localhost également, grâce à une autorité de certification locale. C'est un gros point positif pour ce serveur Web.
- Son fichier de configuration Caddyfile peut-être rédigé en mode déclaratif ou au format JSON. ll y a ce que Caddy appelle des "Config Adapter" permettant la prise en charge de différents formats : une configuration rédigée au format Nginx sera interprétée par Caddy.
- Son API native sert à gérer la configuration du serveur web.
- Caddy est rapide à installer et à configurer pour publier un simple site web.
- Caddy peut gérer plusieurs sites web, avec un système de "virtual hosts" par nom de domaine et port.
- Caddy peut jouer le rôle de reverse proxy.
Si vous souhaitez également vous intéresser à d'autres serveurs, voici nos tutoriels :
- Installer un serveur Web Apache2 sur Linux
- Installer un serveur Web Nginx sur Linux
- Installer un serveur Web IIS sur Windows Server
II. Installer Caddy sur Debian
Nous allons commencer par installer Caddy sur notre machine Debian. La configuration réseau de celle-ci a été préparée en amont.
Commençons par installer des paquets nécessaires à la suite des opérations, notamment pour ajouter le dépôt sur lequel se situe le paquet d'installation de Caddy.
sudo apt update
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
Puis, ajoutons le dépôt en question après avoir récupéré sa clé GPG :
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
Nous n'avons plus qu'à mettre à jour le cache des paquets et à installer le paquet "caddy" en lui-même.
sudo apt update
sudo apt install caddy
Ces étapes sont celles présentées dans la documentation officielle. Vous pouvez vous référer à cette page pour obtenir les instructions pour d'autres distributions.
Systemctl peut gérer le service Caddy et nous allons pouvoir activer son démarrage automatique.
sudo systemctl enable caddy
sudo systemctl start caddy
Dès à présent, nous devons pouvoir accéder à la page par défaut de Caddy. Suite à l'installation, il est actif sur le port 80 en HTTP.
http://<adresse IP du serveur>
http://<Nom de domaine>
Voici la page obtenue :
Pour connaître la version de Caddy, voici la commande à exécuter :
caddy version
v2.7.6 h1:w0NymbG2m9PcvKWsrXO6EEkY9Ru4FJK8uQbYcev1p3A=
Remarque : il y a un jeu de commandes complet associé à la commande "caddy" en elle-même.
L'installation étant terminée, nous allons aborder la configuration de Caddy dans la suite de l'article.
III. Créer sa première configuration Caddy
Comment configurer un premier site web sur Caddy ? Bonne question. Ici, notre objectif sera de configurer le serveur web pour héberger le site "webcad.it-connect.tech" : un enregistrement DNS public a été créé au préalable, ce qui va permettre à Caddy d'obtenir un certificat TLS pour ce site.
A. Configurer le Caddyfile
En mode texte, la configuration de Caddy passe par l'édition du fichier "/etc/caddy/Caddyfile". Dans ce fichier, un ou plusieurs sites web peuvent être déclarés et configurés.
sudo nano /etc/caddy/Caddyfile
Voici le contenu par défaut de ce fichier. Nous retrouvons bien l'instruction ":80" indiquant que Caddy écoute sur le port 80 par défaut, sur son adresse IP et pour tous les noms de domaine éventuel.
Avant de vous présenter la configuration à définir, quelques explications s'imposent :
- La directive "root" sert à indiquer la racine du site web, c'est-à-dire le chemin vers le répertoire qui contient les fichiers du site web.
- La directive "file_server" sert à activer la distribution des fichiers statiques (fichiers HTML, par exemple) pour ce site web.
- La directive "encode" sert à activer la compression pour délivrer les fichiers statiques, en activant Zstandard et Gzip (l'ordre est important pour prioriser un algorithme de compression).
Ce qui donne :
webcad.it-connect.tech {
# Racine du site web
root * /var/www/webcad
# Activer la compression Zstandard et Gzip
encode zstd gzip
# Activer la distribution de fichiers statiques
file_server
}
Enregistrez le fichier.
Avant de redémarrer Caddy, créez le dossier du site web et attribuez l'utilisateur "caddy" comme propriétaire :
mkdir -p /var/www/webcad
chown caddy:caddy /var/www/webcad
Puis, créez une page web à la racine du site. Pour ma part, j'ai créé le fichier "/var/www/webcad/index.html" avec le contenu suivant :
<html>
<head>
</head>
<body>
<h1>Caddy - IT-Connect</h1>
</body>
</html>
Redémarrez Caddy :
sudo systemctl restart caddy
Sachez que nous pouvons demander à Caddy de vérifier le fichier de configuration avant de redémarrer le service. Ici, comme nous utilisons le fichier "Caddyfile", nous allons utiliser l'Adapter du même. Ce qui donne la commande suivante :
caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile
Désormais, testons ! Le site Web est accessible en HTTPS ! Le certificat TLS est valide, et pourtant, je n'ai pas fait la moindre manipulation ! Caddy a géré seul la partie certificat et il prend en charge aussi la redirection HTTP vers HTTPS.
Dans la suite de cet article, nous allons découvrir des directives supplémentaires et peauffiner notre configuration. En complément, voici le lien vers la documentation officielle :
B. Configurer le logs de Caddy
Comme pour tout système, la journalisation des accès et des erreurs est importante. C'est pourquoi nous allons configurer notre serveur Caddy pour qu'il journalise les actions associées au site "webcad.it-connect.tech". Ceci passe par l'utilisation de la directive "log" qui elle-même accepte différentes options.
Voici le code à ajouter (sous la partie "# Logging") :
webcad.it-connect.tech {
# Racine du site web
root * /var/www/webcad
# Activer la distribution de fichiers statiques
file_server
# Activer la compression Zstandard et Gzip
encode zstd gzip
# Logging
log {
output file /var/log/caddy/access.log {
roll_size 1gb
roll_keep 5
roll_keep_for 720h
}
}
}
Pour que vous puissiez mieux comprendre ces lignes, voici quelques explications :
- Le fichier de log utilisé par Caddy sera "/var/log/caddy/access.log". Caddy gère un seul fichier de log pour les accès et les erreurs, contrairement à Apache2 où nous avons l'habitude d'avoir "access.log" et "error.log".
- roll_size : taille d'un fichier de log avant de créer un nouveau fichier (sans supprimer l'ancien le plus récent - dépend de la suite de la configuration).
- roll_keep : nombre de fichiers de logs à conserver sur le serveur.
- roll_keep_for : durée de conservation des fichiers de logs (en heures).
Il est à noter que par défaut, les logs sont au format JSON. Ceci n'est pas habituel, mais rend les logs facilement "parsables".
C. Ajouter PHP-FPM à Caddy
Lors de la mise en place d'un serveur web, il est très fréquent d'ajouter un moteur PHP. Caddy prend en charge PHP, et nous allons pouvoir installer PHP-FPM comme nous l'avions fait avec Apache2 (Tutoriel : Apache2 et PHP-FPM).
Nous devons installer le paquet PHP-FPM, dans la version de notre choixi. Ici, pour PHP 8.2.
sudo apt-get install php8.2-fpm
Puis, nous devons éditer le fichier "Caddyfile" pour que Caddy s'appuie sur PHP-FPM pour exécuter les scripts PHP. Voici la ligne à ajouter :
webcad.it-connect.tech {
# Racine du site web
root * /var/www/webcad
# Activer la distribution de fichiers statiques
file_server
# Activer la compression Zstandard et Gzip
encode zstd gzip
# Utiliser PHP-FPM
php_fastcgi unix//run/php/php-fpm.sock
# Logging
log {
output file /var/log/caddy/access.log {
roll_size 1gb
roll_keep 5
roll_keep_for 720h
}
}
}
Enregistrez le fichier et redémarrez Caddy. Pour vérifier la configuration, nous pouvons créer la page PHP de notre choix. Par exemple, nous pouvons - temporairement - créer une page "/var/www/webcad/caddyphp.php" pour afficher les informations sur la configuration de PHP active sur notre serveur.
<?php
phpinfo();
?>
Puis, nous pouvons accéder à cette page :
PHP est bien intégré à Caddy sinon la page ne s'afficherait pas correctement. Il ne reste plus qu'à personnaliser la configuration et à installer les modules PHP nécessaires en fonction du projet que vous cherchez à déployer.
Remarque : Caddy est le serveur Web utilisé par FrankenPHP, une implémentation du PHP.
D. Activer l'Explorateur de fichiers de Caddy
Pour finir, nous allons aborder une fonctionnalité de Caddy plutôt original : l'explorateur de fichiers intégré. En effet, il s'agit d'un explorateur de fichiers moderne bien loin de ce qui est proposé par Apache2.
Pour l'activer, la directive "file_server" doit être configurée en mode "browse" dans le fichier Caddyfile. Nous devons aussi ajouter la directive "hide" pour masquer certains fichiers : il ne faudrait pas que l'explorateur de fichiers permettent de lire le contenu éventuel d'un fichier PHP !
# Enable the static file server.
file_server browse {
hide *.php
}
Une fois que c'est fait, il suffit de redémarrer Caddy et d'accéder à notre serveur Web. Dans le cas présent, j'ai déposé des fichiers textes et une image dans le répertoire "/docs/" du site web. Voici ce que ça donne :
Nous pouvons prévisualiser les images (de quoi créer facilement une galerie) et le fait de cliquer sur un fichier texte l'ouvre dans un nouvel onglet. Une fonctionnalité à utiliser avec parcimonie et à bien configurer, car elle peut exposer des données sensibles (un fichier de configuration, par exemple).
IV. Conclusion
Ce tutoriel d'introduction à Caddy touche à sa fin ! Nous avons vu comment effectuer l'installation de ce serveur web sur Debian 12, puis nous avons mis en place notre première configuration. La gestion automatique du HTTPS est un gros plus pour Caddy, ce qui évite de gérer Let's Encrypt soi-même que ce soit avec ACME ou Certbot.
Habitué à configurer Apache2 depuis de nombreuses années, et de temps à autre Nginx et IIS, j'avoue que j'étais un peu perdu au moment de faire mes premiers pas avec Caddy. Comme pour tout service, il faut du temps pour comprendre son fonctionnement : la documentation est une aide précieuse. La communauté ne semble pas encore très importante, contrairement à Apache2 ou Nginx où l'on trouve de nombreux articles, posts sur les forums, etc... Ceci devrait s'améliorer avec le temps : Caddy est un projet mature et très intéressant qui mérite qu'on s'intéresse à lui.
N'hésitez pas à commenter cet article pour poser vos questions et partager votre avis sur Caddy.