Bien évidemment, le premier article se doit d’être sur la conception de ce site web: un wordpress sous docker.

J’avais quelques exigences. Il fallait que ce soit facile d’utilisation, facilement transportable, joli et sécurisé.

Du coup, après quelques recherches, l’évidence s’est imposée: un container WordPress:

Pourquoi?

  • Je ne suis pas développeur web. Un CMS permet d’obtenir un joli résultat, sans avoir a bidouiller du HTML, du CSS et des appels en bases de données.
  • En cas de problèmes, la communauté d’utilisateurs worpdress est telle que mon problème aura probablement été rencontré.
  • Toujours grâce à la très forte communauté, il s’agit d’un CMS très sécurisé, dans la mesure ou je n’installerai aucun plugin exotique.
  • Il existe une image docker officielle.

Il n’en fallait pas plus pour me laisser tenter. On y va.

J’utilises docker depuis quelques années maintenant, principalement pour faire tourner des micro-services chez moi. (Vous en entendrez parler plus tard).

Pour des raisons de facilité lors de configurations complexes, docker-compose est très pratique.

Dans ce cas présent, pour mette en place ce wordpress, il faudra faire tourner 2, voire 3 services:

  • WordPress (toute la partie « front-end » évidemment).
  • Mysql (pour stocker les informations en base de données).
  • phpmyadmin (au cas ou je doive aller voir ce qu’il se passe dans la base de données à la main, mais pas trop.)

Comment?

Voici mon docker-compose. On va l’expliquer juste après… Il vous faudra remplacer les valeurs entre accolades.

version: '3.1'
services:
  mysql:
    image: mysql:latest
    container_name: mysql
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./databases:/var/lib/mysql/
    environment:
     MYSQL_ROOT_PASSWORD: {passwd}
     MYSQL_USER: {user}
     MYSQL_PASSWORD: {passwd}
     MYSQL_DATABASE: {db}
    network_mode: "web"

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    restart: always
    environment:
      PMA_HOST: mysql
    depends_on:
      - mysql
    network_mode: "web"

  wordpress:
    image: wordpress:php7.4-apache
    container_name: wordpress
    restart: always
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: {user}
      WORDPRESS_DB_PASSWORD: {passwd}
      WORDPRESS_DB_NAME: {db}
    ports:
      - 9980:80
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./conf/hostname:/etc/hostname
      - ./html:/var/www/html
    depends_on:
      - mysql
    network_mode: "web"

Nous avons donc un fichier qui va créer trois services, dont le premier se nomme « mysql »:

  • Basé sur l’image officielle mysql, dans la dernière version.
  • Nous stockons les bases de données dans le répertoire « databases » de mon serveur.
  • Les identifiants « root » et « user » sont spécifiés
  • Une base de données « db » est crée.

Le second se nomme « phpmyadmin »:

  • Encore basé sur une image officielle.
  • Se connecte au SGBD mysql.
  • Vous remarquez que l’on ne spécifie pas de port. L’instance phpmyadmin n’est donc pas accessible. C’est fait exprès. Dans le cadre d’un serveur en ligne, je déconseille très fortement de laisser l’interface phpmyadmin accessible. Si toutefois je souhaite y avoir accès momentanément, il me suffira de rajouter deux lignes au service:
   ports:
      - 9090:80

Le troisième se nomme wordpress:

  • Basé sur l’image officielle, contenant php et apache.
  • est accessible sur le port 9980.
  • Se connecte au SGBD mysql.
  • Utilises les identifiants crées pour le service mysql.
  • Stocke les données dans le répertoire « html » du serveur.

Un petit coup de « docker-compose up » et les trois images se téléchargent toute seules, puis les services se créent… Facile non?

Attention. Le site ne sera pas protégé par le chiffrement. Il ne sera pas en « HTTPS ». Nous verrons ceci un peu plus tard, en utilisant en « reverse-proxy ».

One Reply to “Mon WordPress sous Docker”

Laisser un commentaire