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 nom de domaine) et être aussi accessible depuis le port 80 (avec http: 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.

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

Sources