1 - Packages

Requis :

  • docker & docker-compose

  • Images docker: hub docker

  • Accès à ansible-ljk:/srv/ansible-ljk/roles/conf_sites3-ljk

2 - Architecture

Screenshot

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

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