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
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