Caddy est un serveur Web léger qui, parmi ses fonctionnalités, intègre l'intégration à LetsEncrypt pour demander automatiquement des certificats. Cela signifie que vous n'avez désormais plus aucune excuse pour exécuter vos applications sur un vieux HTTP ordinaire. Laissez-moi être plus clair. Le protocole HTTP est mort et enterré, c'est le vieux web et il faut se mettre en conformité au plus vite si vous n'y êtes pas...

La mise en place

  • J'ai configuré une instance OVH VPS Ubuntu 16.04 avec Docker pour l'exécuter. Vous pouvez utiliser un autre fournisseur si vous le souhaitez,
  • Assigné une IP Elastic à l'instance (donc elle a une IP externe)
  • Création d'un enregistrement A dans le DNS qui pointe sur l'IP élastique (nécessaire pour LetsEncrypt)
  • Autorisé SSH, HTTP et HTTPS dans l'instance via le groupe de sécurité La configuration de ce qui précède dépasse le cadre de cet article, mais elle devrait être facilement compatible avec Google.

Docker

Nous allons gérer tout cela dans des conteneurs Docker. Connectez-vous au serveyr via SSH et:

$ 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

Mettons Caddy en marche. Il existe déjà une image  qui facilite la création d’un serveur Web. Tout d’abord, nous allons simplement extraire l’image et servir le site par défaut via HTTP.

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

Et si vous tapez le nom d’hôte de votre serveur (par exemple, exemple.votredomaine.com), vous verrez maintenant la page par défaut de votre serveur Caddy :

C’est très bien, 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.

exemple.yourdomain.com

Et détruisons notre ancien conteneur et démarrons en un nouveau:

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

Et puis rechargez votre page dans votre navigateur.

et voilà de l'HTTPS sans effort :)

Test

Faisons donc quelque chose d’utile. Nous allons utiliser la capacité de Caddy à être un reverse proxy afin qu’il puisse servir notre web-app en front et fournir un protocole HTTPS aisé. Tout d’abord, nous allons effectuer une installation normale de notre app.

$ sudo docker rm -f caddy
$ sudo docker run -d --name db \
    -v /home/ubuntu/db:/var/lib/postgresql/data \
    --restart always \
    -e DB_NAME=sal \
    -e DB_USER=admin \
    -e DB_PASS=password \
    grahamgilbert/postgres:9.6.2

Maintenant que votre base de données a démarré (vous pouvez vous en assurer avec sudo docker logs db ), il est temps de placer notre conteneur Sal.

$ sudo docker run -d --name sal \
    --restart always \
    -e DB_NAME=sal \
    -e DB_USER=admin \
    -e DB_PASS=password \
    -e ADMIN_PASS=password \
    --link db:db \
    macadmins/sal

Dès que sudo docker logs sal vous annonce que le gunicorn est en marche, nous sommes prêts à l’exposer à Internet. Nous allons utiliser une fonctionnalité de Docker dans laquelle nous avons automatiquement accès aux autres conteneurs auxquels elle est liée (dans ce cas, nous allons cliquer sur http://sal:8000). Ouvrez votre fichier Caddyfile et donnez-lui l’apparence suivante:

exemple.yourdomain.com {
    proxy / http://sal:8000
}

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

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

Et ô bonheur :

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

On supprime caddy :

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

Conclusion

Vous pouvez donc exécuter gratuitement n'importe quelle application avec de l'HTTPS grâce à Caddy, plus d'excuses.