{{tag>sysadmin netadmin docker traefik}}
====== 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
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
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
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 =====
* https://hub.docker.com/r/bitnami/dokuwiki