• Home  / 
  • Docker
  •  /  Docker proxy, Nginx + Let’s Encrypt + WordPress + Rancher = WIN !

Docker proxy, Nginx + Let’s Encrypt + WordPress + Rancher = WIN !

By KrustyHack / last year
docker nginx ssl rancher

Ay,

Qui n’a jamais rêvé d’avoir un Docker proxy Nginx qui s’auto-configure avec du SSL à chaque nouveau site ? Grâce à Docker, mettez en place 2 containers auto-gérés qui vont se reparamétrer automagiquement à chaque nouveau container qui a besoin d’un vhost et de SSL.

Pour l’exemple, je vais utiliser 3 images : Nginx, Let’s Encrypt et WordPress/Mysql. 3 images que je vais déployer via Rancher.

Docker Proxy Nginx et Let’s Encrypt

Pour le service Nginx et Let’s Encrypt, crééz une stack Rancher avec ce contenu :

letsencrypt:
  labels:
    io.rancher.scheduler.global: 'true'
    io.rancher.container.pull_image: always
  image: thomastweets/docker-letsencrypt-nginx-proxy-companion:latest
  volumes:
  - /home/docker/nginx-proxy/ssl:/etc/nginx/certs:rw
  - /var/run/docker.sock:/var/run/docker.sock:ro
  volumes_from:
  - nginx-proxy
nginx-proxy:
  ports:
  - 443:443/tcp
  - 80:80/tcp
  labels:
    io.rancher.scheduler.global: 'true'
    io.rancher.sidekicks: letsencrypt
    io.rancher.container.pull_image: always
  image: jwilder/nginx-proxy:latest
  volumes:
  - /etc/nginx/vhost.d
  - /usr/share/nginx/html
  - /home/docker/nginx-proxy/ssl:/etc/nginx/certs:ro
  - /var/run/docker.sock:/tmp/docker.sock:ro

Validez la stack et laissez-là se déployer sur vos agents Rancher. Une fois le bordel déployé sur toutes vos instances, passez à l’étape suivante.

Docker WordPress/Mysql

Pour notre exemple on va créer une petite stack WordPress toute bête sous Rancher :

db:
  image: mysql:5.7
  labels:
    io.rancher.container.pull_image: always
    io.rancher.scheduler.affinity:host_label_soft: io.blackcreeper.com.server=mysql
  volumes:
    - "/home/docker/mysql:/var/lib/mysql"
  restart: always
  environment:
    MYSQL_ROOT_PASSWORD: wordpress
    MYSQL_DATABASE: wordpress
    MYSQL_USER: wordpress
    MYSQL_PASSWORD: wordpress
wordpress:
  labels:
    io.rancher.container.pull_image: always
    io.rancher.scheduler.affinity:host_label_soft: io.blackcreeper.com.server=wordpress
  image: wordpress:latest
  links:
    - 'db:'
  restart: always
  environment:
    WORDPRESS_DB_HOST: db:3306
    WORDPRESS_DB_PASSWORD: wordpress
    LETSENCRYPT_EMAIL: webmaster@monsite.com
    LETSENCRYPT_HOST: www.monsite.com
    VIRTUAL_HOST: www.monsite.com
    VIRTUAL_PORT: '80'
[alert-warning]Le domaine www.monsite.com doit pointer sur le serveur qui hébergera le WordPress afin que le container Let’s Encrypt puisse générer le certificat[/alert-warning]

Là aussi laissez le bousin se déployer. Grâce à notre stack Nginx/Let’s Encrypt et nos variables d’environnement du WordPress (LETSENCRYPT_EMAIL, LETSENCRYPT_HOST, VIRTUAL_HOST, VIRTUAL_PORT) nos containers du proxy vont :

  • Générer un certificat Let’s Encrypt automatiquement
  • Créer un vhost pour notre WordPress et y paramétrer le certificat

Et voilà, en quelques minutes vous avez 2 stacks Rancher :

  • Un Nginx et Let’s Encrypt automatiques
  • Un WordPress et Mysql derrière votre proxy et avec SSL sur le endpoint du WordPress

A vous de jouer maintenant !

2 comments

Leave a comment: