Ceci est une ancienne révision du document !


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

Sources