CAS Docker - IlanRuiz/Cours-TechES GitHub Wiki

Mise en place infrastructure

Site WordPress

Mise en place d'un site WordPress simple avec docker compose

version: "3"
services:
  db:
    image: mysql:latest
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress

volumes:
    db_data:

La validation que l'on peut faire est de stopper le conteneur de base de données et joindre le site pour voir comment il va réagir.

Site Moodle

sans compose

Suivi de l'exemple fourni par TechExpertTips

https://techexpert.tips/fr/moodle-fr/installation-moodle-docker/

docker network create moodle-network
docker volume create mariadb-data
docker run -d --name moodledb -v mariadb-data:/var/lib/mysql --network moodle-network -e "MYSQL_ROOT_PASSWORD=kamisama123" -e MYSQL_USER=moodle -e "MYSQL_PASSWORD=kamisama123" -e "MYSQL_DATABASE=moodle" mariadb
docker volume create moodle-data
docker run -d --name moodle -p 80:8080 -p 443:8443 -v moodle-data:/bitnami/moodle --network moodle-network -e MOODLE_DATABASE_HOST=moodledb -e MOODLE_DATABASE_USER=moodle -e MOODLE_DATABASE_PASSWORD=kamisama123 -e MOODLE_DATABASE_NAME=moodle bitnami/moodle:latest

Essayons d'accéder au site

image-20240220090410397

Cela fonctionne. Si l'on essaie de le joindre en stoppant le conteneur de base de données

Cela ne fonctionne plus. C'est parfait!

Compose

Maintenant il faut l'adapter en docker-compose

J'ai construit mon compose en me basant sur les commandes ci dessus, ainsi que le docker compose qui est fourni par bitnami

version: "3"
services:
  mariadb:
    image: mariadb:latest
    volumes: 
        - mariadb-data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: kamisama123
      MYSQL_DATABASE: moodle
      MYSQL_USER: moodle
      MYSQL_PASSWORD: kamisama123
  moodle: 
    image: bitnami/moodle:latest
    volumes:
        - moodle-data:/bitnami/moodle
    restart: always
    ports:
      - "80:8080"
      - "443:8443"
    environment:
      MOODLE_DATABASE_HOST: mariadb
      MOODLE_DATABASE_PORT_NUMBER: "3306"
      MOODLE_DATABASE_USER: moodle
      MOODLE_DATABASE_PASSWORD: kamisama123
      MOODLE_DATABASE_NAME: moodle
volumes:
    mariadb-data:
    moodle-data:

L'utilisateur par défaut est user et son mot de passe est bitnami

Liaison des base de données

Actuellement, nous avons deux docker-compose qui tournent de manière indépendante. Le but est d'en avoir qu'un seul.

La configurations des conteneurs Moodle et Wordpress ne va pas changer. Par contre, il va falloir adapter celle de Mariadb, qui va héberger les base de données de nos sites.

Basé sur les configurations ci dessus, nous avons deux bases de données avec les informations suivantes:

  • moodle
    • user: moodle
    • mot de passe: kamisama123
  • wordpress
    • user: wordpress
    • mot de passe: wordpress

Script sql

Le script sql se compose ainsi

#create databases
CREATE DATABASE IF NOT EXISTS moodle;
CREATE DATABASE IF NOT EXISTS wordpress;

#Creat users
CREATE USER moodle@localhost IDENTIFIED BY 'kamisama123';
GRANT ALL ON moodle.* to moodle@'%' IDENTIFIED BY 'kamisama123' WITH GRANT OPTION;
CREATE USER wordpress@localhost IDENTIFIED BY 'wordpress';
GRANT ALL ON wordpress.* to wordpress@'%' IDENTIFIED BY 'wordpress' WITH GRANT OPTION;

#End
FLUSH PRIVILEGES;

Ce script sera ensuite exécuté lors du démarrage du conteneur

Le docker compose de test est comme suit:

version: "3"
services:
  dbtest:
    image: mariadb:latest
    restart: always
    volumes:
        - ./sqlinit:/docker-entrypoint-initdb.d
    environment:
      MYSQL_ROOT_PASSWORD: mypass
    ports:
        - "3306:3306"
volumes:
    sqlinit:

C'est grâce à l'argument volumes que l'on exécute le script

L'on peut ensuite tester en se connectant à la base de données

mysql -h 10.10.10.15 -P 3306 --protocol=TCP -u root -p

L'on peut ensuite voir que les utilisateurs et base de données ont été crées

SELECT User FROM mysql.user;
SHOW DATABASES;

Liaison final

version: "3"
services:
  db:
    image: mariadb:latest
    restart: always
    volumes:
        - ./sqlinit:/docker-entrypoint-initdb.d
        - mariadb-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: mypass
  moodle:
    depends_on:
      - db
    image: bitnami/moodle:latest
    volumes:
        - moodle-data:/bitnami/moodle
    restart: always
    ports:
      - "80:8080"
      - "443:8443"
    environment:
      MOODLE_DATABASE_HOST: db:3306
      MOODLE_DATABASE_USER: moodle
      MOODLE_DATABASE_PASSWORD: kamisama123
      MOODLE_DATABASE_NAME: moodle 
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
volumes:
    moodle-data:
    mariadb-data:

LDAP

Mise en place d'un conteneur openldap ainsi qu'un gestionnaire ldap

version: "3"
services:
  openldap:
    image: osixia/openldap:latest
    restart: always
    ports:
      - 389:389
      - 636:636
    environment:
      LDAP_ORGANISATION: iris
      LDAP_DOMAIN: iris.local
      LDAP_ADMIN_PASSWORD: mypass
  phpldapadmin:
    image: osixia/phpldapadmin:latest
    container_name: phpldapadmin
    environment:
      PHPLDAPADMIN_LDAP_HOSTS: "openldap"
      PHPLDAPADMIN_HTTPS: "false"
    ports:
      - "8080:80"
    depends_on:
      - openldap

Le login admin: cn=admin,dc=iris,dc=local et son mot de passe: mypass

squid reverse proxy

Je vais utiliser le serveur wordpress come site pour tester mon reverse proxy

Le compose se présente ainsi

version: "3"
services:
  db:
    image: mysql:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
  proxy:
    image: ubuntu/squid
    ports:
      - "8080:3128"
    volumes:
      - ./squid.conf:/etc/squid/squid.conf
    restart: always

Le fichier de config de squid est le suivant

#Default acl confiugration
acl SSL_ports port 443
acl Safe_ports port 80       # http
acl Safe_ports port 21       # ftp
acl Safe_ports port 443       # https
acl Safe_ports port 70       # gopher
acl Safe_ports port 210       # wais
acl Safe_ports port 1025-65535    # unregistered ports
acl Safe_ports port 280       # http-mgmt
acl Safe_ports port 488       # gss-http
acl Safe_ports port 591       # filemaker
acl Safe_ports port 777       # multiling http
acl CONNECT method CONNECT

#Revers confiugration
http_access allow all
http_port 3128
#wordpress etant le nom du conteneur
http_port 80 accel defaultsite=wordpress
cache_peer wordpress parent 80 0 no-query originserver

#Default forward confiugration
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp:       1440    20% 10080
refresh_pattern ^gopher:    1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0    0% 0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .       0    20% 4320

Penser à activer le proxy dans la configuration de la machine (Edge, firefox, chrome, etc...)

aide:

https://www.architect.io/blog/2023-03-23/manage-networking-with-docker-compose/

https://www.server-world.info/en/note?os=Ubuntu_20.04&p=squid&f=4