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

Infos supplémentaires :

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
}
Host github.com
IdentityFile /srv/http/.ssh/id_ed25519
User git

Liens utiles