• Home  / 
  • Docker
  •  /  Déployer Rancher UI en HTTPS avec Docker

Déployer Rancher UI en HTTPS avec Docker

By KrustyHack / last year
rancher logo

Ay à toutes et à tous !

Ca fait quelque temps que j’ai sorti aucun article alors je me rattrape avec un pseudo tuto sur comment déployer Rancher UI en HTTPS (Let’s Encrypt) avec Docker et docker-compose.

Rancher, qu’est-ce que c’est ?

Pour simplifier le bordel, Rancher est un projet open-source qui permet de gérer et d’orchestrer des containers Docker. Le projet propose Rancher OS, qui est une distrib’ Linux minimaliste qui fait tourner l’OS entier comme containers Docker. Et il y a Rancher UI, une interface self-hosted qui permet de gérer graphiquement toute notre infrastructure Docker sur nos serveurs.

Les deux projets sont indépendants dans le sens où vous pouvez utiliser Rancher OS sans utiliser Rancher UI et vice versa.

Aujourd’hui on va s’intéresser au déploiement de l’interface Rancher UI afin de gérer notre parc de serveurs. Nous allons utiliser Docker et docker-compose pour mettre en place tout ça. Je pars donc du principe que vous connaissez un minimum Docker/docker-compose et que vous l’avez installé sur votre serveur.

Préparation de notre réseau Rancher

Pour ce test, je vais utiliser un serveur maître et un serveur esclave. Le serveur maître aura la charge d’héberger l’interface UI et le serveur esclave sera là où on va déployer nos containers (WordPress pour le tuto) pour nos tests. Je pars donc sur du cloud OVH avec 2 serveurs de type VPS SSD 10 Go, 1vCPU et 2 Go de RAM sous Ubuntu 14.04:

ovh cloud rancher ui

Utilisation d’OVH Cloud pour notre réseau Rancher

Bien évidemment selon votre utilisation, le nombre de CPU/la quantité de RAM peuvent-être différent. Là pour le test on va juste déployer un serveur Rancher avec un slave sur lequel on va placer un WordPress. Donc cela suffira amplement.

Installer Docker/docker-compose

Maintenant que nos serveurs sont up, on installe Docker et docker-compose (docker-compose uniquement sur rancher-server vu que le slave n’en a pas besoin).

Installation de Docker (à faire sur les 2 serveurs):

root@rancher-server:~# curl -L https://get.docker.io |sh
root@rancher-slave:~# curl -L https://get.docker.io |sh

 Installation de docker-compose (à faire uniquement sur le rancher-server):

root@rancher-server:~# curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
root@rancher-server:~# chmod +x /usr/local/bin/docker-compose

Voilà, on est prêts à déployer notre interface Rancher !

Déployer Rancher UI avec docker-compose

Alors je ne vais pas vous expliquer toutes les instructions du fichier docker-compose.yml mais voici la version finale que j’utilise, avec en prime un proxy Nginx et un docker Let’s Encrypt pour du HTTPS gratos ! Pour ce tuto, j’ai créé une entrée DNS test.nicolashug.com afin de faire comme en situation réelle. N’oubliez donc pas de remplacer les valeurs du type nicolashug.com ou test.nicolashug.com par les vôtres dans le docker-compose.yml.

nginx-proxy:
  image: jwilder/nginx-proxy:latest
  ports:
   - "80:80"
   - "443:443"
  volumes:
    - '/home/docker/nginx-proxy/ssl:/etc/nginx/certs:ro'
    - '/etc/nginx/vhost.d'
    - '/usr/share/nginx/html'
    - '/var/run/docker.sock:/tmp/docker.sock:ro'
letsencrypt-nginx-proxy-companion:
  image: jrcs/letsencrypt-nginx-proxy-companion:latest
  volumes_from:
    - nginx-proxy
  volumes:
    - '/home/docker/nginx-proxy/ssl:/etc/nginx/certs:rw'
    - '/var/run/docker.sock:/var/run/docker.sock:ro'
rancher-server:
  image: rancher/server:latest
  environment:
    VIRTUAL_PORT: 8080
    VIRTUAL_HOST: test.nicolashug.com
    LETSENCRYPT_HOST: test.nicolashug.com
    LETSENCRYPT_EMAIL: webmaster@nicolashug.com
  volumes:
    - '/home/docker/rancher-server/mysql:/var/lib/mysql:rw'

On peut donc voir que je déclare un container Nginx pour le front, un container Let’s Encrypt qui va me générer un certificat HTTPS gratuit pour mon domaine et le container rancher-server.

Copiez/collez ce fichier à l’endroit où vous voulez en le nommant docker-compose.yml sur votre serveur puis faites un docker-compose pull afin de ramener les images nécessaires aux containers:

root@rancher-server:/home/docker# docker-compose pull
Pulling nginx-proxy (jwilder/nginx-proxy:latest)...
latest: Pulling from jwilder/nginx-proxy
fdd5d7827f33: Pull complete
a3ed95caeb02: Pull complete
716f7a5f3082: Pull complete
7b10f03a0309: Pull complete
1334013e6da8: Pull complete
91c84ac15d9d: Pull complete
0b1e494fcb7e: Pull complete
b91a4c5443c6: Pull complete
7d67595b0990: Pull complete
Digest: sha256:eda167892b66d55f0aef0a25edfaf876acacca69af3ab8c03e7fb64c0beafac2
Status: Downloaded newer image for jwilder/nginx-proxy:latest
Pulling letsencrypt-nginx-proxy-companion (jrcs/letsencrypt-nginx-proxy-companion:latest)...
latest: Pulling from jrcs/letsencrypt-nginx-proxy-companion
4d06f2521e4f: Pull complete
6d9e37597e57: Pull complete
912186a78e35: Pull complete
bec6f8d6de61: Pull complete
ce674877b1ab: Pull complete
14bca6935f02: Pull complete
Digest: sha256:213b1917c3464514ae0d39fd3d0ca1f3a39c3fcd23e89910b81d15a55c967b8a
Status: Downloaded newer image for jrcs/letsencrypt-nginx-proxy-companion:latest
Pulling rancher-server (rancher/server:latest)...
latest: Pulling from rancher/server
8387d9ff0016: Pull complete
3b52deaaf0ed: Pull complete
4bd501fad6de: Pull complete
a3ed95caeb02: Pull complete
1dd2ffa08394: Pull complete
6574a9c2d75b: Pull complete
fedb745f2358: Pull complete
951a2617430a: Pull complete
04f380ccb3c6: Pull complete
6367f33eed6c: Pull complete
Digest: sha256:1dbc1e3496d7e2b287d5d08ab7560e117f32555c0cb7b41a41163f8dff8372d7
Status: Downloaded newer image for rancher/server:latest
root@rancher-server:/home/docker#

Parfait. On lance le bordel maintenant avec docker-compose up -d:

root@rancher-server:/home/docker# docker-compose up -d
Creating docker_nginx-proxy_1
Creating docker_letsencrypt-nginx-proxy-companion_1
Creating docker_rancher-server_1
root@rancher-server:/home/docker# docker ps
CONTAINER ID        IMAGE                                           COMMAND                  CREATED             STATUS              PORTS                                      NAMES
a15874ac15c3        rancher/server:latest                           "/usr/bin/s6-svscan /"   8 seconds ago       Up 6 seconds        3306/tcp, 8080/tcp                         docker_rancher-server_1
72331ec1f447        jrcs/letsencrypt-nginx-proxy-companion:latest   "/bin/bash /app/entry"   9 seconds ago       Up 8 seconds                                                   docker_letsencrypt-nginx-proxy-companion_1
bbda6d0809cb        jwilder/nginx-proxy:latest                      "/app/docker-entrypoi"   9 seconds ago       Up 8 seconds        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   docker_nginx-proxy_1

Super ! Nos 3 containers semblent tourner correctement. On patiente un peu histoire de laisser le temps à Rancher de s’initialiser et à Let’s Encrypt de générer notre certificat SSL. Comptez quelques minutes (selon la puissance de votre serveur), ça devrait suffire. Une fois le tout terminé, on accède à notre interface Rancher (https://test.nicolashug.com dans mon cas):

rancher ui installation

L’UI est prête après notre installation

C’est pas magnifique ? On a rien eu à faire à part installer Docker and Co et écrire un fichier YAML. Et si vous avez tout bien fait, votre interface devrait être en HTTPS !

Et maintenant ?

Maintenant que l’on a un serveur Rancher prêt à être utiliser, il va falloir le configurer et y ajouter un slave (rancher-slave dans mon exemple). Je vous donne donc rendez-vous au prochain article pour la suite de ce tuto où je vous expliquerais comment configurer votre UI et comment ajouter un slave pour y déployer des containers.

En attendant, faites un peu le tour de l’interface graphique, elle est facile à prendre en main, et allez zieuter les docs officielles Rancher pour vous faire la main.

A plus !

 

23 comments

Leave a comment: