Bonjour à tous, j’ai eu du mal à choisir le sujet mon premier article, mais finalement ma décision c’est porté sur : comment j’ai mis en ligne ce blog en 10 minutes ? Cet article va parler de Docker, Traefik et WordPress(et oui, ce blog est sous WordPress). Alors comment j’ai fait ? Commençons par un petit tour d’horizon : mon blog est hébergé sur un serveur qui tourne sous Debian 9 sur lequel est uniquement installé Docker. Il y a quelque temps de cela, j’ai mis en place un serveur Gitlab, pour pouvoir héberger mes différents projets. Pour l’installation, plusieurs choix se présentaient à moi : l’omnibus (le plus simple), from source (le plus complexe), sous Docker (le plus flexible). Dans tous les cas, je souhaitais quelque chose qui n’impactait pas le reste de l’hôte. Mon choix aurait pu se porter vers n’importe quelle solution, les Machines Virtuelles sont bien pratiques dans ce genre de situation, mais j’ai finalement décidé de choisir Docker pour 3 raisons :

  • La souplesse qu’offre Docker vis-à-vis du déploiement applicatif
  • La possibilité d’expérimenter de nouvelles choses, et donc d’apprendre et d’acquérir des compétences
  • L’image Docker de Gitlab est basée sur le package omnibus, que j’avais déjà utilisé pour un ancien projet.

Vous allez me demander quel est le rapport avec ce blog, et vous avez raison : lors de cette installation, j’ai pris la décision de mettre en place un reverse-proxy nommé Traefik, qui lui aussi tourne sous Docker… La particularité de Traefik est qu’il se configure en fonction de labels que l’on attache aux containers.

Maintenant, que vous avez ces informations, je vais pouvoir vous expliquer qu’elle a été ma procédure pour l’installation. Je me suis d’abord rendu sur la page Docker Hub de WordPress, en lisant la doc, on se rend compte qu’il y a besoin d’une base donnée MySQL, j’ai donc ajouté à ma configuration un container MySQL(avec cette doc). Voici mon docker-compose.yml à ce moment-là :

version: "3"
services:
  web:
    image: 'wordpress:latest'
    deploy:
      restart_policy:
        condition: on-failure 
  bdd:
    image: mysql:5.7
    deploy:
      restart_policy:
        condition: on-failure

On rajoute les variables d’environnement pour configurer les containers, le réseau pour qu’ils puissent interagir et les volumes pour la sauvegarde des données :

version: "3"
services:
  web:
    image: 'wordpress:latest'
    deploy:
      restart_policy:
        condition: on-failure
    environment:
      WORDPRESS_DB_HOST: bdd 
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: ************* 
      WORDPRESS_DB_NAME: wordpress 
    volumes:
      - './content:/var/www/html/wp-content/' 
    networks:
      - blog // Liaison avec le réseau "blog"
  bdd:
    image: mysql:5.7
    deploy:
      restart_policy:
        condition: on-failure
    environment:
      MYSQL_ROOT_PASSWORD: *************
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: *************
    volumes:
      - "./bdd:/var/lib/mysql"
    networks:
      - blog
networks:
  blog:

Enfin, pour configurer Traefik et ainsi rendre le site accessible, j’ajoute le réseau de Traefik ainsi que les différents labels :

version: "3"
services:
  web:
    image: 'wordpress:latest'
    deploy:
      restart_policy:
        condition: on-failure
      labels:
        traefik.enable: "true"
        traefik.docker.network: traefik-net
        traefik.frontend.rule: "Host:blog.pelt10.fr"
        traefik.port: 80
        traefik.frontend.entryPoints: https,http
    environment:
      WORDPRESS_DB_HOST: bdd
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: *************
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - './content:/var/www/html/wp-content/'
    networks:
      - traefik-net // Mon réseau Traefik
      - blog
  bdd:
    image: mysql:5.7
    deploy:
      restart_policy:
        condition: on-failure
    environment:
      MYSQL_ROOT_PASSWORD: *************
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: *************
    volumes:
      - "./bdd:/var/lib/mysql"
    networks:
      - blog
networks:
  blog:
  traefik-net:
    external: true

Il ne me restait plus qu’à faire la redirection sur mon nom de domaine (ici un CNAME vers ma machine), lancer un petit coup de “docker stack deploy -c docker-compose.yml blog” et le tour était joué : le WordPress était installé ! Il ne me restait plus qu’à choisir un thème, modifier quelques options et installer des extensions pour avoir le blog que vous avez actuellement sous les yeux !

J’espère que ce premier article vous aura plus, hésitez pas à me donner votre avis, et on se retrouve la semaine prochaine !

2 thoughts on “Un Blog en 10 minutes ?”

Leave a Reply

Your email address will not be published. Required fields are marked *