Table des matières

, , ,

Installation dokuwiki en conteneur Docker derrière Traefik

Notes concernant l'installation de l'application dokuwiki via un conteneur Docker.

Docker est installé sur la VM docker-alpha.mairie.local

# Téléchargement de l'image
docker pull bitnami/dokuwiki:20200729.0.0
 
# Création d'un conteneur temporaire pour valider la liaison 
# entre le conteneur et le reverse-proxy traefik
docker container run -it --rm --name wiki_test --user root --network reverse_proxy_vnet bitnami/dokuwiki:20200729.0.0 /bin/sh
 
apt-get update
apt-get install iputils-ping
 
ping traefik
PING docker-alpha.mairie.local (172.16.1.23) 56(84) bytes of data.
64 bytes from docker-alpha.mairie.local (172.16.1.23): icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from docker-alpha.mairie.local (172.16.1.23): icmp_seq=2 ttl=64 time=0.048 ms
 
# La sortie du shell provoque la destruction du conteneur temporaire

Création d'un alias sur CRONOS ou RHEA puis vérification de la résolution

# Tests de résolution
 
# rhea 
dig @192.9.200.8 +short wiki.mairie.local
docker-alpha.mairie.local.
172.16.1.23
 
# cronos
dig @192.9.200.231 +short wiki.mairie.local
docker-alpha.mairie.local.
172.16.1.23

Maintenant que l'alias existe contacter wiki.mairie.local revient à contacter docker-alpha.mairie.local. On va correctement paramétrer le conteneur pour qu'il s'insère dans le réseau du reverse proxy Traefik via le docker-compose.

mkdir dokuwiki
docker-compose.yml
version: "3.3"

networks:
  reverse_proxy_vnet:
    external: true

services:
  dokuwiki:
    image: bitnami/dokuwiki:20200729.0.0
    networks:
      reverse_proxy_vnet:
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - PHP_MEMORY_LIMIT=64M
      - PHP_POST_MAX_SIZE=16M
      - PHP_UPLOAD_MAX_FILESIZE=16M
    volumes:
      - ${PWD}/data:/bitnami/dokuwiki:rw

    labels:
      # Directives de configuration lues par le reverse proxy Traefik
      - "traefik.enable=true"
      - "traefik.http.routers.dokuwiki_http.entryPoints=HTTP"
      - "traefik.http.routers.dokuwiki_http.rule=Host(`wiki.mairie.local`)"
      - "traefik.http.services.dokuwiki.loadbalancer.server.port=8080"

Configuration HTTPS

Création du certificat X509

La création du certificat ce fait sur l’hôte cert-mgr.mairie.local:

# depuis une session root
cd /usr/local/cert-mgr/intermediate_ca/
 
# Création de la clé privée
openssl genrsa -out private/wiki.mairie.local.key 2048
chmod 400 private/wiki.mairie.local.key
 
# Création de la CSR
# Copie et édition du fichier par de configuration par défaut pour CSR et certificats X509
cp conf/server_cert_x509_extensions.cnf conf/wiki.mairie.local.x509.cnf
 
# Après modification du fichier de configuration (completion section [ alt_name ])
openssl req -new -config conf/wiki.mairie.local.x509.cnf -sha256 -key private/wiki.mairie.local.key -out csr/wiki.mairie.local.csr.pem
 
# Vérification de la CSR (présence des extensions sous "Requested extensions")
openssl req -noout -text -in csr/wiki.mairie.local.csr.pem | grep -i "requested extensions" -A 12
 
# Création du certificat
openssl x509 -req -days 30 -in csr/wiki.mairie.local.csr.pem -CA ./certs/intermediate_ca_tnf.cert.pem -CAkey ./private/intermediate_ca_tnf.key -CAcreateserial -out certs/wiki.mairie.local.cert.pem -extensions x509v3_webserver -extfile conf/wiki.mairie.local.x509.cnf
 
# Certificat fullchain. Ajoute les clés publiques des CA
cat certs/wiki.mairie.local.cert.pem certs/ca-chain_tnf.cert.pem > certs/wiki.mairie.local.crt
 
# création d'une archive pour transfert du certificat et de la clé
tar cvzf /tmp/wiki.tgz private/wiki.mairie.local.key certs/wiki.mairie.local.crt

Installation du certificat dans Traefik

On fournit le certificat au reverse proxy Traefik. Sur la machine docker-alpha.mairie.local

mv wiki.mairie.local.crt wiki.mairie.local.key ./traefik/certs/

Création d'une unité de configuration dynamique pour déclarer le certificat et l'associer au magasin par défaut. Création d'un fichier ./traefik/conf/dynamic/wiki_crt_declaration.yml

wiki_crt_declaration.yml
tls:
  certificates:
      # Chemin complet tel qu'il est perçu par le conteneur
    - certFile: "/etc/certs/wiki.mairie.local.crt"
      keyFile: "/etc/certs/wiki.mairie.local.key"
      stores:
        - default

Pas besoin de redémarre le service Traefik pour que les modifications soient prises en compte.

Configuration dokuwiki

Il faut à présent mettre à jour la configuration du conteneur. Modification du docker-compose pour le service dokuwiki ./dokuwiki/docker-compose.yml

docker-compose.yml
version: "3.3"

networks:
  reverse_proxy_vnet:
    external: true

services:
  dokuwiki:
    image: bitnami/dokuwiki:20200729.0.0
    networks:
      reverse_proxy_vnet:
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - PHP_MEMORY_LIMIT=64M
      - PHP_POST_MAX_SIZE=16M
      - PHP_UPLOAD_MAX_FILESIZE=16M
    volumes:
      - ${PWD}/data:/bitnami/dokuwiki:rw

    labels:
      # Directives de configuration lues par le reverse proxy Traefik
      - "traefik.enable=true"
      - "traefik.http.routers.dokuwiki_http.entryPoints=HTTP"
      - "traefik.http.routers.dokuwiki_http.rule=Host(`wiki.mairie.local`)"
      - "traefik.http.services.dokuwiki.loadbalancer.server.port=8080"
 
      # Active le middleware de redirection http -> https
      - "traefik.http.middlewares.redirect_to_HTTPS.redirectscheme.scheme=https"
      - "traefik.http.middlewares.redirect_to_HTTPS.redirectscheme.permanent=true"
      - "traefik.http.middlewares.https-redirect.redirectscheme.port=443"
      - "traefik.http.routers.dokuwiki_http.middlewares=redirect_to_HTTPS@docker"
 
      # Gestion du HTTPS
      - "traefik.http.routers.dokuwiki_https.entrypoints=HTTPS"
      - "traefik.http.routers.dokuwiki_https.rule=Host(`wiki.mairie.local`)"
      - "traefik.http.routers.dokuwiki_https.tls=true"

Redémarrage du service:

cd dokuwiki
docker-compose up -d

Références