Nous allons reprendre la base de l'article précédent, la seule différence réside dans les commandes évidemment. Objectif de cet article ; prouver que l'on peut faire aussi bien voir mieux avec Caddy plutôt que Let's Encrypt via Docker, encore et toujours. En effet grâce à Caddy, votre blog sera désormais hors de tout danger d'expiration de certificat SSL puisque Caddy renouvelle automatiquement celui-ci à la date anniversaire sans que vous n'ayez à vous en occuper, et tout cela grâce à un simple fichier sur le serveur : le Caddyfile.

Le serveur

Une simple base Ubuntu nous suffit, j'ai donc utilisé un VPS Linux chez OVH à 2,99 €/mois pour cette démo.

Il nous faut Docker d'installé sur le serveur ainsi qu'un DNS pour héberger le site de démo.

Docker

Petit rappel d'installation sur Ubuntu :

$ sudo apt-get -y install apt-transport-https ca-certificates curl
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"
$ sudo apt-get update
$ sudo apt-get -y install docker-ce

Caddy

On enchaîne avec Caddy (le DNS a préalablement été renseigné via l'IP publique de votre serveur Linux hébergeant le test) :

$ sudo docker run -d --name caddy \
    -p 80:2015 \
    abiosoft/caddy

Et on obtient alors :

sur :

C’est ok, mais l’utilisation de la configuration par défaut n’est pas très utile. Mettez ce qui suit dans un fichier appelé Caddyfile. Encore une fois, remplacez exemple.votredomaine.com par le nom d’hôte réel qui pointe vers votre serveur.

On commence par créer le fichier à la racine du serveur :

touch Caddyfile

& 

nano Caddyfile

Et on le complète comme indiqué :

blog-demo.yourdomain.com

Une fois fait, il ne nous reste plus qu'à tuer le service Caddy avec Docker et à relancer celui-ci :

$ sudo docker rm -f caddy
$ sudo docker run -d --name caddy \
    -p 80:80 \
    -v $(pwd)/Caddyfile:/etc/Caddyfile \
    abiosoft/caddy

Ensuite on recommence la même opération, mais cette fois sans oublier le port 443 :

$ sudo docker rm -f caddy
$ sudo docker run -d --name caddy \
    -p 80:80 \
    -p 443:443 \
    -v $(pwd)/Caddyfile:/etc/Caddyfile \
    abiosoft/caddy

Désormais vous pouvez recharger votre page dans votre navigateur :

Ghost

Attaquons désormais le service que nous souhaitons afficher en back-end de notre page web, Caddy fait le job en mode reverse-proxy, maintenant Docker va faire le reste pour notre blog. Ghost tourne sur le port 2368 par défaut, on le sait, mais nous allons voir que cela ne va pas gêner le moins du monde Caddy.

Pour commencer on refait le ménage :

sudo docker rm -f caddy

Puis on lance Ghost via Docker run :

docker run -d --name ghost \
 -p 127.0.0.1:2368:2368 \
 --restart=always \
  -d ghost:1.21.1-alpine

On constate par rapport au précédent article et l'exemple de service qui avait été pris que nous avons épuré la commande, en effet il manque notamment les lignes concernant la base de données que je n'ai pas ajoutée ici. Notons qu'à l'inverse de Sal ici pas besoin d'utiliser une base de données, Ghost intègre automatiquement SQLite sans paramétrage de votre part.

Une fois ceci fait, nous allons reprendre notre fichier Caddyfile et le compléter avec le fameux port par défaut sur lequel répond l'application afin de la router au niveau du reverse-proxy :

blog-demo.yourdomain.com {
    proxy / http://ghost:2368
}

Et enfin, nous pouvons démarrer notre conteneur proxy:

sudo docker run -d --name caddy \
-p 80:80 \
-p 443:443 \
--link ghost \
-v $(pwd)/Caddyfile:/etc/Caddyfile \
abiosoft/caddy

Ce qui aboutit au bout de quelques secondes à :

et surtout :

Faire cela demandera de nouveaux certificats à LetsEncrypt chaque fois que le conteneur est supprimé et recréé. Si vous faites cela assez souvent, vous atteindrez la limite, alors assurons-nous de conserver les certificats en liant le bon répertoire de notre conteneur à la machine hôte :

$ sudo docker run -d --name caddy \
    -p 80:80 \
    -p 443:443 \
    --link ghost \
    -v $(pwd)/Caddyfile:/etc/Caddyfile \
    -v $(pwd)/caddy:/root/.caddy \
    abiosoft/caddy

Conclusion

Et voilà pour aujourd'hui, vous constaterez la simplicité de la démarche et surtout l'efficacité de Caddy par rapport aux multiples bricolages entrepris pour aboutir au même résultat via Docker.

Post-scriptum : monitoring

Je me suis permis de vous rajouter quelques lignes sur le monitoring, pour changer un petit peu j'ai choisi d'utiliser Glances.

Pour le lancer :

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host --network host -it docker.io/nicolargo/glances

Résultat en console :