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.
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 échanges entre le serveur web et le navigateur web. Il requiert l'utilisation de certificats SSL afin de certifier la propriété du site. Ce certificat peut être géré manuellement, ou bien automatiquement par Caddy.
Activer HTTPS automatiquement pour un site public
Caddy permet d'automatiser la configuration du protocole HTTPS sans avoir à demander un certificat ni à l'installer. Pour cela, il faut impérativement que les sites concernés soient accessibles sur les ports 80 et 443. 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 générer tout seul un certificat auprès d'une autorité de certification gratuite (Let's Encrypt ou ZeroSSL) et l'installer tout seul. Le site est désormais accessible en HTTPS !
Activer HTTPS automatiquement pour un site local
Afin d'activer HTTPS sur un site local, Caddy peut générer aussi des certificats SSL auto-signés.
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 est le certificat, et le second la clé privée.
https://monnomdedomaine.fr:443 #https + nom de domaine ou adresse IP + port 443 pour le site en HTTPS
root * /web/ { #indique le répertoire du site web. Ici /web/. file_server #spécifie le mode serveur web tls admin@monnomdedomaine.fr #adresse mail de l'admin, utile pour la certification HTTPS</code> }
http://monnomdedomaine.fr:80 { #http + nom de domaine ou adresse IP + port 80 pour le site en HTTP
root * /web/ #indique le répertoire du site web. Ici /web/.
file_server #spécifie le mode serveur web
}
Le premier chemin est celui du certificat, et le second celui de la clé.
Remarque importante
: Pour que la création et l'installation automatique du certificat HTTPS fonctionne, le site doit être accessible depuis le port 443 (avec
https: devant le NDD), si le site tourne sur d'autres ports, la certification HTTPS ne fonctionnera pas (ou alors il faudra installer le certificat manuellement). De plus, il faut que le serveur ait accès à Internet bien sûr.
devant le nom de domaine) et être aussi accessible depuis le port 80 (avec http:
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.
Configuration de Caddy comme Reverse Proxy web
à venir
Dépannage
Vérifier la syntaxe d'un Caddyfile :
caddy validate --config /etc/caddy/Caddyfile