La simplicité est une vertu. Pour servir des pages web, cette simplicité est souvent synonyme de performances et de sécurité. Un serveur web simple, ça ne veut pas forcément dire qu'il est simpliste, dépourvu de fonctionnalités dans l'ère du temps. Caddy est un serveur web open source avec des arguments à faire valoir.
Serveur HTTP
Caddy s'insère tranquillement dans l'écosystème déjà bien vivant des serveurs HTTP, enfin, bien vivant, RIP lighttpd . Si le gros du marché demeure trusté par Apache (41 % du marché) et Nginx (23 % du marché), nous conservons un œil attentif sur les nouveautés, particulièrement quand ces dernières répondent à nos attentes.
Caddy propose à la fois l'état de l'art au niveau des fonctionnalités que l'on peut attendre d'un serveur web (et même un peu au-delà), et une syntaxe déclarative très pure. De la simplicité, une implémentation par défaut de LetsEncrypt pour le HTTPS et des performances encourageantes, voici les principaux arguments pour lesquels vous devriez essayer Caddy.
Caddy
Avec Caddy, on ne va pas assembler des bouts de code volés sur StackOverflow, mais tout simplement déclarer son intention.
Comme on est moderne et poli, on respecte les recommandations respectables de Debian.
La configuration est dans /etc/caddy/Caddyfile
:
import /etc/caddy.d/*
Oui, les faux vieux nomment leurs fichiers de configuration en [A-Z]\w+file
en hommage au vénérable Makefile
. Enfin bon, c'est moins pire que le port de la moustache avant 35 ans.
Là, on ne fait rien, on se contente de préciser que les configurations seront rangées dans un dossier, pour plus d'intimité.
La conf du site est /etc/caddy.d/mon.super.site
mon.super.site { gzip root /home/monsupersite/www log /var/log/caddy/mon.super.site.log header / { # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months) Strict-Transport-Security max-age=15768000 # Prevent IE and Chrome from incorrectly detecting non-scripts as scripts X-Content-Type-Options nosniff # Block site from being framed X-Frame-Options DENY # Block pages from loading when they detect reflected XSS attacks X-XSS-Protection "1; mode=block" } proxy /mon-super-service http://localhost:1234 { header_upstream X-Script-Name /isso transparent } }
On reconnait un vhost façon Apache, qui sera compressé, avec un dossier racine, un fichier de log, des en-têtes en plus, et un service dynamique qui tourne à côté, parce que les sites statiques, ça ne fait pas tout.
Niveau lisibilité, on est au top, et la plupart des paramètres sont tacites, comme l'utilisation d'HTTP/2 ou des certificats Letsencrypt.
L'installation est triviale, c'est un simple binaire (merci Golang), qui tournera avec un utilisateur non privilégié (merci CAP_NET_BIND_SERVICE
), et la configuration systemd est fournie, par ce que le reboot, c'est bien.
Là, l'exemple est minimaliste, mais il est possible de faire de belles choses, comme brancher un php-fpm
(c'est Caddy qui maintient la plus belle bibliothèque fastcgi de tout golang) ou parser du Markdown.
Pour les vrais ambitieux, il faut taper dans les plugins tiers et recompiler sa propre version (merci Golang).
Caddy a une configuration à la lisibilité incomparable, il gère Letsencrypt de base (pas comme Apache/Nginx/HAproxy) et sert des fichiers (pas comme HAProxy/Træfik). Pour l'instant, le projet n'a aucune velléité hégémonique (ce qui est reposant), il ne sera pas le roi du Cloud, mais il fait le job™ .
Le drame et sa résolution
Grand classique du logiciel libre, ce projet a été initié par une personne, sur un coin de table, puis a rapidement eu une communauté, et des gens qui se sont dits qu'il y avait des sous à se faire. Des gens, pas le dev principal. Du coup, il a été vexé de se faire enfler comme ça. Même si c'est classique, ça vexe. La licence a été un peu secouée. Puis finalement, rapprochement d'une boite, Ardan Labs , avec le dev, et paf, ça bosse dur sur une V2, bien opensource.
Le futur
La v2 monte d'un cran le niveau d'ambition, en implémentant HTTP/3, pour ceux qui ont une connexion Internet asthmatique, brotli , pour les amateurs de pâtisserie suisse, et de la conf bricolable en REST. De la configuration dynamique, ça veut dire commencer à empiéter vers Træfik , produit de qualité, mais qui attrape le même problème par l'autre bout.
Au pays de Caddy
Que vous soyez un survivaliste minimaliste, ou un administrateur de nuage, allez essayer Caddy, c'est très rafraîchissant.