Configuration d'un serveur Web Caddy
Caddy est un petit serveur web et reverse proxy HTTP/HTTPS écrit en Go, avec une configuration simpliste et une automatisation de la certification HTTPS. Cet outil s'intègre parfaitement dans les architectures à base de conteneurs.
Installation de Caddy
Debian / Ubuntu
Installer tout d'abord les paquets requis pour l'installation :
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
Ajouter la clé du dépôt de Caddy :
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.155B6D79CA56EA34.key' | sudo apt-key add -
Ajouter le dépôt de Caddy à la liste :
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/config.deb.txt?distro=debian&version=any-version' | sudo tee -a /etc/apt/sources.list.d/caddy-stable.list
Mettre à jour la liste des paquets et installer Caddy :
sudo apt update sudo apt install caddy
RHEL / CentOS / Fedora
Commencer par installer le plugin COPR de YUM :
yum install yum-plugin-copr
Ajouter le dépôt de Caddy via COPR :
yum copr enable @caddy/caddy
Et installer Caddy :
yum install caddy
Docker
Commande pour récupérer l'image Docker officielle de Caddy :
docker pull caddy
Configuration de Caddy comme serveur web
Caddy se configure via un fichier spécifique nommé Caddyfile. /etc/caddy/Caddyfile est le Caddyfile par défaut. Il est possible de choisir d'utiliser un autre Caddyfile lors du démarrage du serveur, grâce à un argument facultatif, voir Démarrage & Arrêt de Caddy).
On commence par indiquer l'adresse IP ou le nom de domaine du site, ainsi que le port TCP sur lequel écoutera Caddy. Puis on lui donne l'instruction d'agir comme serveur web avec la directive file_server :
192.168.1.29:80 file_server
Par défaut le répertoire racine des sites web utilisé par Caddy est /usr/share/caddy. Pour le modifier, il faut ajouter la directive suivante :
root * /web/
Dans l'exemple ci-dessus, on a choisi d'utiliser /web/ comme répertoire racine du site. Ce répertoire doit être accessible en lecture pour tous le monde.
Si l'on souhaite que le site ne soit accessible qu'en local, à des fins de développement par exemple, le nom de domaine du site doit être localhost.
Lorsque plusieurs sites doivent cohabiter sur le même serveur, on utilise les accolades (
{ & }) à la suite de la déclaration du nom de domaine/adresse IP afin de dissocier les différentes configurations.
Activer PHP
Le défaut majeur de Caddy est qu'il n'intègre pas PHP nativement. Pour profiter de PHP, il faut donc le paramétrer soi-même.
Installer d'abord les paquets php-cli et php-fpm :
apt-get install php-fpm php-cli
Ou encore :
yum install php-fpm php-cli
Ensuite, démarrer manuellement le processus PHP-FPM en faisant :
/etc/init.d/php7.3-fpm start
Pour information : En créeant un service dédié à PHP-FPM, il sera possible de le lancer automatiquement au démarrage de la machine.
Enfin, ajouter au Caddyfile cette ligne (qui est à adapter en fonction de la version de PHP) :
php_fastcgi unix//run/php/php7.3-fpm.sock
Activer HTTPS
Le protocole HTTPS permet de chiffrer les requêtes entre le serveur web et le navigateur web. Il requiert l'utilisation de certificats SSL afin de garantir la confidentialité et l'intégrité des données échangées. Caddy est capable de gérer cela de façon complètement autonome.
Activer HTTPS automatiquement pour un site public
Un des avantages de Caddy est qu'il permet d'automatiser la génération et l'installation de certificats SSL pour le web. Pour cela, il faut impérativement que les sites concernés soient accessibles sur les ports 80 et 443 ET que le nom de domaine utilisé redirige bien vers le serveur web. La configuration est aisée, puisqu'il ne suffit que d'une ligne supplémentaire dans le Caddyfile :
tls admin@monnomdedomaine.fr
Cette instruction permet simplement de renseigner une adresse mail de contact (obligatoire pour la création du certificat SSL).
Au premier lancement du serveur web, et s'il n'y a pas d'erreur dans la configuration, Caddy va alors récupérer un certificat auprès d'une autorité de certification gratuite (Let's Encrypt ou ZeroSSL) et l'installer sur le serveur. Le(s) site(s) est/sont désormais accessible(s) en HTTPS !
Dans le cas où l'on souhaiterais installer soi-même un certificat SSL existant, se référer à la partie Activer HTTPS manuellement un peu plus bas.
Activer HTTPS automatiquement pour un site local
L'activation d'HTTPS se fait automatiquement pour les sites locaux, sauf sur les sites sur le port 80. Un certificat auto-signé est généré par Caddy.
Activer HTTPS manuellement
Dans le cas où l'on souhaiterais installer un certificat manuellement, ajouter cette ligne :
tls /etc/ssl/certs/cloudfare/cert.pem /etc/ssl/certs/cloudflare/key.pem
Après tls, le premier fichier à indiquer est le certificat, et le second la clé privée associée.
Démarrage & Arrêt de Caddy
Une fois la configuration faîte, lancer le serveur comme ceci :
caddy start
Attention : Si le processus Caddy est déja lancé, il refusera de se “relancer”. Il faudra donc le redémarrer manuellement ou avec la commande dédiée.
Pour redémarrer le serveur en lui indiquant le fichier de configuration à charger :
caddy reload
Pour arrêter le serveur :
caddy stop
Pour démarrer/relancer Caddy en spécifiant un Caddyfile particulier :
--config /etc/caddy/Caddyfile
Enfin, pour créer une image Docker avec Caddy, il est nécessaire d'utiliser la commande suivante dans le dockerfile afin de lancer Caddy au premier plan :
caddy run --config /etc/caddy/Caddyfile
Bien évidemment le chemin vers la configuration de Caddy peut varier.
Exemples de configuration
Caddyfile d'un serveur web disponible sur le réseau local avec PHP et HTTPS :
192.168.1.65:80 root * /web/ file_server php_fastcgi unix//run/php/php7.3-fpm.sock
Dépannage
Vérifier la syntaxe d'un Caddyfile :
caddy validate --config /etc/caddy/Caddyfile