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