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 :

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)

Désormais le dossier téléchargé de Caddy contient un fichier pour systemd qui permet de le lancer correctement.

Ayant testé l’outil sur Raspbian, voici comment j’ai procédé :

sudo apt install supervisor

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

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

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 :

Liens utiles