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
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