Découverte de Caddy - un serveur web simple et rapide

Nous avons tous utilisé Apache et NGNIX pour héberger un site web et ils sont très bien, mais pour être honnête, je ne me suis jamais vraiment senti à l’aise avec leur configuration. Et c’est ce qui m’a amené à Caddy. Découvrons ce que Caddya à offrir.
Caddy
Caddy est un serveur web unique (du moins je le pense) avec un jeu de fonctionnalités modernes. Vous pouvez l’utiliser comme reverse proxy et load balancer. héberger vos applications PHP avec lui.. Et j’ai presque oublié l’une des meilleures fonctionnalités ; le HTTPS automatique, avec des certificats utilisant des fournisseurs comme Lets Encrypt et ZeroSSL.
Cool, non ?

Installation
Caddy est disponible sous la forme d’un simple exécutable, d’une image docker ou, comme d’habitude, via un gestionnaire de paquets. Aujourd’hui, nous utiliserons Debian. Mais si vous utilisez un autre système d’exploitation, leur documentation devrait vous couvrir.
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Une fois installé, le service s’exécutera automatiquement et servira la page de bienvenue par défaut sur le port 80. Caddy peut ensuite être configuré en utilisant le fichier Caddyfile
dans /etc/caddy
Configuration
Comme dit plus haut, caddy peut être configuré en utilisant le fichier Caddyfile
écrit en JSON dans /etc/caddy
. Dans ce fichier, nous lui donnons des directives pour qu’il soit soit un reverse proxy, un serveur web, un front php, etc. Caddy peut aussi être configuré en utilisant son API REST si c’est quelque chose qui vous intéresse.
Reverse Proxy
Disons que vous avez une application qui fonctionne sur le port 9999 et que vous voulez faire un reverse proxy vers 443 (HTTPS). Le fichier de configuration ressemblerait à ceci :
demo.app.com {
reverse_proxy 127.0.0.1:9999
encode gzip
}
Pour que Caddy recharge le Caddyfile
, il suffit de lancer un systemctl reload caddy
, Caddy rechargera alors le fichier de configuration, demandera un certificat pour demo.app.com
et servira votre application sur HTTPS1.
Fichiers statiques
Ok un reverse proxy c’est bien mais mon site web (celui-ci) est statique et généré par Hugo, comment pourrions-nous le servir en utilisant caddy ? Encore une fois, 4 lignes de configuration suffisent.
demo.website.com {
# où sont stockés nos fichiers statiques
root * /var/www/demo.droapp.com/public
file_server
}
Un rapide systemctl reload caddy
plus tard et Caddy sert vos fichiers statiques sur HTTPS1 à demo.website.com
.
PHP-fpm
Vous utilisez habituellement Nginx comme façade/front pour PHP-fpm, mais Caddy peut aussi le faire. Et encore une fois avec un simple fichier de configuration.
demo.website.com {
# où sont stockés nos fichiers
root * /var/www/demo.website.com
# on indique à caddy où trouver le socket php-fpm
php_fastcgi /run/php/php8.2-fpm.sock
file_server
encode gzip
}
Encore un rapide systemctl reload caddy
et nous sommes maintenant en face d’une application php sur HTTPS1.
Bonus
Docker & Docker Compose
Caddy est aussi souvent exécuté avec Docker Compose et est toujours aussi simple. Voici un simple docker-compose.yml
et nous pouvons utiliser n’importe quel exemple de Caddyfile
ci-dessus.
version: "3.7"
services:
caddy:
image: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- $PWD/Caddyfile:/etc/caddy/Caddyfile
- $PWD/caddy_data:/data
- $PWD/caddy_config:/config
- $PWD/site:/srv # Si nous voulons servir des fichiers statiques dans $PWD/site
Sur ce, je pense avoir couvert les bases de l’utilisation de Caddy. L’utilisez-vous ? Dites-moi comment et ce que vous en pensez.

Feature Photo originale de Valery Sysoev sur Unsplash.
Caddy ne réussira à demander un certificat que si les ports 80 et 443 sont ouverts sur votre serveur. Vous pouvez également désactiver la demande de certificat si vous n’en avez pas besoin. D’autres options comme le HTTPS local peuvent également être utilisées. ↩︎ ↩︎ ↩︎