Présentation
Caddy Server est un serveur web HTTP/2 dont la configuration est simpliste. Il est facile Ă mettre en place. Il est lĂ©ger et multiplateforme du fait qu’il est Ă©crit en Go.
Il contient de nombreux modules qui ajoutent des fonctions utiles comme :
- rĂ©cupĂ©ration d’un dĂ©pĂ´t Git public Ă intervalles rĂ©guliers
- utilisation d’Hugo, le moteur de blog statique, pour compiler un dossier contenant un site web fait avec Hugo
- gĂ©nère Ă la volĂ©e des pages HTML d’un dossier contenant des fichiers Markdown
- interface web pour gérer ses fichiers dans un dossier
- télécharger de fichiers depuis le navigateur vers le serveur
- etc.
Les possibilités sont donc nombreuses !
Installation
Soit vous utilisez votre gestionnaire de paquet (sous GNU/Linux) préféré, soit en téléchargeant le binaire sur le site officiel .
Si, comme moi, vous avez une architecture qui ne figure pas dans la liste (un RPi ARMv6), vous pouvez utiliser un script fourni sur getcaddy.com de la manière suivante :
curl https://getcaddy.com | bash -s personal
Et si vous voulez des plugins avec, par exemple le plugin Git et Hugo :
curl https://getcaddy.com | bash -s personal git,hugo
Pour les DIVA du Web :
curl https://getcaddy.com | bash -s personal http.expires,http.filemanager,http.git,http.hugo,http.ipfilter,http.realip,http.search,http.upload
Sous Raspbian - supervisor (facile)
Ayant testĂ© l’outil sur Raspbian, voici comment j’ai procĂ©dĂ© :
- téléchargement du binaire sur le site officiel
- placement du binaire caddy dans /usr/local/bin/
- installation de supervisor :
sudo apt install supervisor
- configuration de supervisor
- lancement de supervisor Ă l’aide de systemctl
Voici ma configuration de supervisor dans le fichier /etc/supervisor/conf.d/caddy.conf :
[program:caddy]
directory=/srv/mon/dossier/html
command=/usr/local/bin/caddy -conf="/etc/caddy/CaddyFile" -email="moi@domaine.tld"
user=www-data
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/caddy_stdout.log
stderr_logfile=/var/log/supervisor/caddy_stderr.log
Ce qui me permet de lancer Caddy ainsi :
sudo systemctl start supervisor
Sous Raspbian - systemd
- utiliser -catimeout=30s en paramètre de Caddy pour laisser au serveur le temps de chercher les certificats
- pour que systemd fonctionne, utiliser :
sudo setcap cap_net_bind_service=+ep /usr/local/bin/caddy
Configuration
La documentation de Caddy Server est très bien faite et permet de rassembler en un seul point les possibilitĂ©s de l’outil.
Je vais cependant donner un exemple de configuration avec des fichiers Markdown pour que vous compreniez que ça reste facile.
J’ai un dossier /srv/mon/dossier/html dans lequel j’ai un dossier blog, qui contient des fichiers markdown (le premier se nomme index.md). Un fichier index.html se trouve Ă la racine de /srv/mon/dossier/html.
Et voici comment j’ai configurĂ© mon fichier /etc/caddy/CaddyFile :
https:*domaine.tld, http://domaine.tld/ {
root /srv/mon/dossier/html/
tls moi@domaine.tld
log caddy.mondomaine.access.log
markdown /blog {
ext .md
sitegen
}
}
Exemples de configurations
DĂ©livrer des pages simples en Markdown
C’est la directive markdown qu’il faut utiliser.
Pour un exemple concret, considérons le dossier /srv/http/accueil/ comme contenant un fichier index.md (fichier Markdown normal), voici comment nous configurerions Caddy, et plus particulièrement le fichier CaddyFile :
domaine.tld:80 {
root /srv/http/accueil
markdown
}
Aussi simple que ça ! Ă€ chaque fois que quelqu’un appelera le site, il traduira le fichier index.md en fichier index.html.
Il est possible d’ajouter des templates, mais je vous renvoie Ă la documentation de la directive markdown .
Chaîne de publication avec Git et Hugo
L’idĂ©e est de permettre la rĂ©daction de son site Hugo, qu’on enregistre sous notre dĂ©pĂ´t Git. Puis Caddy Server s’occupera de rĂ©cupĂ©rer le dĂ©pĂ´t, le compiler, puis le mettre Ă disposition.
On part du principe que :
- vous avez installé hugo sur la machine où se trouve Caddy Server
- votre dépôt est public, par exemple sur github.com/user/project
- le dossier /srv/http/monsite a été crée
La configuration ressemblerait Ă :
domaine.tld:80 {
root /srv/http/monsite/public
git {
repo git@github.com:user/project
branch master
path /srv/http/monsite/
clone_args --depth=1
then mkdir -p public
then git submodule update --init --recursive
then hugo --destination=public
}
Quelques explications :
- en thĂ©orie nous n’aurions pas besoin d’autant, mais ça c’est la thĂ©orie… Quand on passe Ă la pratique, on se rend compte qu’il manque Ă©normĂ©ment de choses
- ainsi, pour Ă©viter de charger l’ensemble du dĂ©pĂ´t, la première fois, clone_args –depth=1 s’occupe de prendre le dĂ©pĂ´t en sa dernière version seulement
- git submodule update –init –recursive permet de penser Ă rĂ©cupĂ©rer les sous-module dans le dĂ©pĂ´t. Dans un projet Hugo, concrètement c’est souvent le dossier des thèmes qui est ainsi.
- hugo –destination=public s’occupe de compiler le site et le dĂ©poser dans le bon dossier. Ce mĂŞme dossier que nous avons crĂ©e prĂ©cĂ©demment (si inexistant)
Infos supplémentaires :
- si le dĂ©pĂ´t est privĂ©, il faut une clĂ© d’accès, pour cela on utilise le mot clĂ© key :
git {
repo git@github.com:user/project
branch master
key /srv/http/.ssh/id_ed25519
path /srv/http/monsite/
[...] # mettez ici la suite des instructions présentées précédemments
}
- pour améliorer le processus de récupération et le choix de la clé, je vous propose de remplir le fichier /srv/http/.ssh/config tel que :
Host github.com
IdentityFile /srv/http/.ssh/id_ed25519
User git
Liens utiles
- Site officiel de caddy
- Documentation de Caddy
- getcaddy.com , script pour compiler Caddy avec différents plugins
- DĂ©pĂ´t Git de getcaddy.com