1 - Packages
Requis :
-
docker & docker-compose
-
Images docker: hub docker
-
Accès à ansible-ljk:/srv/ansible-ljk/roles/conf_sites3-ljk
2 - Architecture
2-1 nginx-proxy [doc: link]
Nginx frontal avec les ports mappés sur l’hôte
- Gestion redirection Vhost - Proxy_pass
- Gestion certificats - docker_volumes/proxy-acme/certs/
- Redirection - docker_volumes/nginx-proxy/vhost/$cname
2-2 proxy-acme [doc: link]
Génère des certificats *.imag.fr
- Generation de cert - Let's Encrypt / ACME challenge
- Renouvellement automatique
2-3 Principe
Un conteneur (nginx-proxy) frontal auto-alimenté par la lecture du socket docker.sock de l’hôte. Celui-ci crée les redirection automatiquement à chaque fois qu’un conteneur web est lancé dans le réseau virtuel net-nginx.
Ceci à l’aide de variable d’environnement pour chaque conteneur :
- VIRTUAL_HOST -> Proxy_pass
- VIRTUAL_PATH -> vhost location
proxy-acme quant à lui s’occupera du acme challenge en ayant accès au volume html de nginx-proxy. La gestion des conteneurs à certifier, se fait avec les variables d’environnement:
- LETSENCRYPT_HOST -> fqdn à certifier
- LETSENCRYPT_RESTART_CONTAINER
3 - Usage
On utilise ansible pour construire les conteneur avec les bonnes valeurs et l’arborescence fichier standardisée.
role ansible : ansible-ljk.imag.fr:/srv/ansible/roles/conf_sites3
NB: Les certificats univ-grenoble-alpes.fr / u-ga.fr .. doivent être en multisite ( un seul couple cert.cer / key.key par conteneur )
3-1 - Site
Ajouter un site Edit de : roles/conf_sites3/default/main.yml On ajoute un block à containers
containers:
exemple:
name: exemple
fqdn: exemple.imag.fr,exemple.univ-grenoble-alpes.fr
container_user: gitlab-runner
container_image: alpine:nginx-php73
no_acme: true
mailhost: true -> autorise php a faire du mailing
name : nom du conteneur
fqdn : cname.imag.fr,cname.univ-grenoble-alpes.fr,..
container_user : l’utilisateur qui lance le service du conteneur
container_image : voir roles/conf_sites3/tasks/main.yml & tasks/set_container_images.yml
no_acme : Utilise le cert/key dans roles/conf_sites3/files/SSL/$fqdn pour certificat (cas *.univ-grenoble-alpes.fr ou autre)
mailhost : Définit la variable d’env SMTPHOST du conteneur pour faire du mailing
3-2 - Membres
Conteneurs dont l’accès web correspondra à la racine html+/name: racine/name
containers_nocname:
test:
name: test
container_user: gitlab-runner
container_image: nginx:latest
Dans cet exemple, il sera accessible via https://membre-ljk.imag.fr/test
3-3 - Redirections
Les redirections se font sur le conteneur racine ( celui utilisé pour les pages membres )
racine:
racine:
name: membre-ljk
fqdn: membre-ljk.imag.fr
container_user: gitlab-runner
container_image: bookworm:nginx125
redirection_letsencrypt: cybersecurity.imag.fr
redirection_other_cert: ljk-rse.imag.fr,ljk-rse.univ-grenoble-alpes.fr
redirection_letsencrypt : Necessite un fichier avec fqdn à rediriger dans roles/conf_sites3/files/vhost/$fqdn
redirection_other_cert : Necessite un fichier avec fqdn à rediriger dans roles/conf_sites3/files/vhost/$fqdn & le couple cer/key dans roles/conf_sites3/files/SSL/$fqdn
4 - Docker images
Les images sont toutes customs. Elles tournent avec un utilisateur ayant les mêmes uid/gid que gitlab-runner de l’hôte (ici sites3-ljk) Ceci permet surtout que les droits d’accès aux fichiers soint uniformes tout en évitant de faire tourner le conteneur sous root.
Il est possible d’utiliser d’autres images, il suffira de changer l’utilisateur container_user
4-1 - Creation image docker
5 - Debug & Commandes
docker ps --all : afficher les infos sur les conteneurs lancés
docker top $conteneur : top sur un conteneur
docker stats : utilisation ressources par conteneurs
docker exec -ti $conteneur bash : lance un terminal dans un conteneur
--
docker-compose -f docker-compose-test.yml up -d : lance les conteneurs d'un fichier docker-compose
docker-compose -f docker-compose-test.yml down : stop les conteneurs d'un fichier compose
docker-compose -f docker-compose-test.yml logs : affiche les logs des conteneurs d'un fichier compose