Dans ce post je vais vous montrer comment installer un proxy nginx avec la création automatique d'un certificat SSL. La configuration du proxy et du certificats se feront lors de la création/suppression d'un container.

Pré-requis:

  • Un serveur avec Docker
  • Un utilisateur du groupe Docker (ici ncity)

Nginx-Proxy:

On lance le container:
docker run -d -p 80:80 -p 443:443 \
--name nginx-proxy \
--restart always \
-e DEFAULT_HOST=ncity.fr \
-v /home/ncity/nginx-proxy/certs:/etc/nginx/certs:ro \
-v /home/ncity/nginx-proxy/dhparam:/etc/nginx/dhparam \
-v /etc/nginx/vhost.d \
-v /usr/share/nginx/html \
-v /var/run/docker.sock:/tmp/docker.sock:ro \
--label com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy \
jwilder/nginx-proxy

Let's Encrypt:

On lance le container. Il créera automatiquement les certificats ssl:
docker run -d \
--name=letsencrypt-nginx-proxy-companion \
--restart always \
-v /home/ncityeu/nginx-proxy/certs:/etc/nginx/certs:rw \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--volumes-from nginx-proxy \
jrcs/letsencrypt-nginx-proxy-companion

Fonctionnement:
Lors de la création d'un container, pour créer automatiquement le vhost et son certificat il suffit d'ajouter ces paramètres:
-e "VIRTUAL_PORT=0000" > Le port vers lequel le proxy doit rediriger.
-e "VIRTUAL_HOST=www.ncity.fr" > Le nom de domaine.
-e "LETSENCRYPT_HOST=www.ncity.fr" Le nom de domaine pour le certificat.
-e "LETSENCRYPT_EMAIL=votreemail@ncity.fr" L'adresse email pour la création du certificat.

Exemple:
Je lance un container wordpress:
docker run -d
--name ghost \
-e "VIRTUAL_PORT=2368" \
-e "VIRTUAL_HOST=ncity.fr" \
-e "LETSENCRYPT_HOST=ncity.fr" \
-e "LETSENCRYPT_EMAIL=ncity@ncity.fr" \
ghost

Bonus: modifier la taille maximale des fichiers lors d'un upload
On crée le fichier /client_max_body_size.conf en y ajoutant:
client_max_body_size 100m; (Augmente la taille maximale à 100mo).

On stop puis supprime le proxy:
docker stop nginx-proxy && docker rm nginx-proxy

On crée à nouveau le proxy:

docker run -d -p 80:80 -p 443:443 \
--name nginx-proxy \
--restart always \
-e DEFAULT_HOST=ncity.fr \
-v /home/ncity/nginx-proxy/certs:/etc/nginx/certs:ro \
-v /home/ncity/nginx-proxy/dhparam:/etc/nginx/dhparam \
-v /etc/nginx/vhost.d \
-v /usr/share/nginx/html \
-v /var/run/docker.sock:/tmp/docker.sock:ro \
-v/path/client_max_body_size.conf:/etc/nginx/conf.d/client_max_body_size.conf:ro \
--label com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy \
jwilder/nginx-proxy