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 le Caddyfile. Ce fichier est par défaut stocké dans /etc/caddy/. Il est possible d'utiliser un autre fichier, mais pour que les commandes start et reload le prennent en compte, il faudra utiliser l'argument –config pour indiquer le chemin vers ce fichier.
Serveur web local (sans HTTPS)
localhost #localhost permet de restreindre l'accès au site en local uniquement root * /web/ #indique le répertoire du site web. Ici /web/. (par défaut ''/usr/share/caddy''. L'astérisque est à mettre devant le chemin du répertoire) file_server #spécifie le mode serveur web
Derrière
localhost, on peut renseigner le port que l'on souhaite utiliser si besoin, par exemple :8080 pour le port 8080. Par défaut c'est le 80.
⇒ Pour démarrer Caddy, allez à la section Démarrage & Arrêt de Caddy
Serveur web local (avec HTTPS)
https://localhost { #localhost permet de restreindre l'accès au site en local uniquement
root * /web/ #indique le répertoire du site web. Ici /web/. (par défaut ''/usr/share/caddy''. L'astérisque est à mettre devant le chemin du répertoire)
file_server #spécifie le mode serveur web
tls self_signed #permet de générer un certificat HTTPS auto-signé (utilisable seulement en local)
}
Serveur web en réseau (avec et sans HTTPS)
Un Caddyfile peut contenir plusieurs sites à la manière des hôtes virtuels d'apache. Pour cela, il faudra utiliser des accolades ({ et }) à la suite de la déclaration du nom de domaine/adresse IP afin de délimiter la configuration des différents sites.
De plus, il permet d'activer le protocole HTTPS gratuitement sans avoir à installer manuellement de certificat (voir la remarque plus bas).
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
Dans le cas où l'on souhaiterais installer un certificat manuellement, ajouter cette ligne en l'adaptant :
tls /etc/ssl/certs/cloudfare/cert.pem /etc/ssl/certs/cloudflare/key.pem
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:
Configurer PHP avec Caddy
PHP n'étant pas intégré de base, il faut donc le paramétrer à part.
Installer en premier 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
Démarrage & Arrêt de Caddy
Une fois la configuration faîte, lancer le serveur comme ceci :
caddy start
Ou bien avec :
systemctl caddy start
Attention : le service est automatiquement lancé à l'installation, une erreur peut donc se produire s'il est déja lancé, on ne peut donc que l'arrêter ou le relancer.
Pour redémarrer le serveur en lui indiquant le fichier de configuration à charger :
caddy reload --config /etc/caddy/Caddyfile
Pour arrêter le serveur :
caddy stop
Ou bien :
systemctl stop caddy
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