Forum Linux.général Problème de Routage Traefik dans Docker

Posté par  . Licence CC By‑SA.
Étiquettes :
1
13
août
2025

Sommaire

j'ai une stack *arr dans docker, les services sont bien accessible via hostname.local:

je voudrais utiliser hostname.local/ plutot que de me rappeler quel port est pour quel service.
Donc j'essaye Traefik comme reverse proxy pour router le trafic vers différents services (Jellyfin, Radarr, Sonarr, Bazarr, etc.) via des préfixes de chemin (par exemple hostname.local/jellyfin, hostname.local/radarr).
Mes essais actuels : j'ai configuré avec découverte automatique des services Docker, des labels sur chaque service pour définir les règles de routage, des middleware (stripprefix pour retirer le préfixe, Headers personnalisés [X-Forwarded-Proto, X-Forwarded-Host, X-Forwarded-Prefix])

problème : ça ne marche pas. J'ai toujours accès hostname.local: mais quand j'essaye

hostname.local/ j'ai des erreurs

https://github.com/gartcimore/parr/blob/main/docker-compose.yml

services:
############################
# DOCKER SOCKET PROXY
############################
socket-proxy:
image: tecnativa/docker-socket-proxy:latest
container_name: socket-proxy
environment:
- CONTAINERS=1
- SERVICES=1
- NETWORKS=1
- POST=0
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- socket_proxy
restart: unless-stopped

############################
# TRAEFIK
############################

traefik:
image: traefik:v3.0
container_name: traefik
command:
- --api.dashboard=true
- --api.insecure=true
- --providers.docker=true
- --providers.docker.endpoint=tcp://socket-proxy:2375
- --providers.docker.exposedbydefault=false
- --providers.docker.network=traefik
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
ports:
- "80:80"
- "443:443"
- "8081:8080"
networks:
- traefik
- socket_proxy
restart: unless-stopped

############################
# PROWLARR
############################

prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ}
volumes:
- ${DOCKER_CONFIG_DIR}/prowlarr/data:/config
ports:
- 9696:9696
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.prowlarr.rule=Host(${HOSTNAME}) && PathPrefix(/prowlarr)"
- "traefik.http.routers.prowlarr.entrypoints=web"
- "traefik.http.services.prowlarr.loadbalancer.server.port=9696"
- "traefik.http.middlewares.prowlarr-stripprefix.stripprefix.prefixes=/prowlarr"
- "traefik.http.middlewares.prowlarr-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
- "traefik.http.middlewares.prowlarr-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
- "traefik.http.middlewares.prowlarr-headers.headers.customrequestheaders.X-Forwarded-Prefix=/prowlarr"
- "traefik.http.routers.prowlarr.middlewares=prowlarr-headers,prowlarr-stripprefix"
restart: unless-stopped

############################
# RADARR
############################

radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ}
volumes:
- ${DOCKER_CONFIG_DIR}/radarr:/config
- /mnt/dataYmir/:/data
ports:
- 7878:7878
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.radarr.rule=Host(${HOSTNAME}) && PathPrefix(/radarr)"
- "traefik.http.routers.radarr.entrypoints=web"
- "traefik.http.services.radarr.loadbalancer.server.port=7878"
- "traefik.http.middlewares.radarr-stripprefix.stripprefix.prefixes=/radarr"
- "traefik.http.middlewares.radarr-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
- "traefik.http.middlewares.radarr-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
# - "traefik.http.middlewares.radarr-headers.headers.customrequestheaders.X-Forwarded-For=127.0.0.1"
- "traefik.http.middlewares.radarr-headers.headers.customrequestheaders.X-Forwarded-Prefix=/radarr"
- "traefik.http.routers.radarr.middlewares=radarr-headers,radarr-stripprefix"
restart: unless-stopped

############################
# SONARR
############################

sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ}
volumes:
- ${DOCKER_CONFIG_DIR}/sonarr:/config
- /mnt/dataYmir/:/data
- /mnt/data/:/dataDrogo
ports:
- 8989:8989
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.sonarr.rule=Host(${HOSTNAME}) && PathPrefix(/sonarr)"
- "traefik.http.routers.sonarr.entrypoints=web"
- "traefik.http.services.sonarr.loadbalancer.server.port=8989"
- "traefik.http.middlewares.sonarr-stripprefix.stripprefix.prefixes=/sonarr"
- "traefik.http.middlewares.sonarr-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
- "traefik.http.middlewares.sonarr-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
- "traefik.http.middlewares.sonarr-headers.headers.customrequestheaders.X-Forwarded-Prefix=/sonarr"
- "traefik.http.routers.sonarr.middlewares=sonarr-headers,sonarr-stripprefix"
restart: unless-stopped

############################
# BAZARR
############################

bazarr:
image: lscr.io/linuxserver/bazarr:latest
container_name: bazarr
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ}
volumes:
- ${DOCKER_CONFIG_DIR}/bazarr:/config
- /mnt/dataYmir/:/data
ports:
- 6767:6767
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.bazarr.rule=Host(${HOSTNAME}) && PathPrefix(/bazarr)"
- "traefik.http.routers.bazarr.entrypoints=web"
- "traefik.http.services.bazarr.loadbalancer.server.port=6767"
- "traefik.http.middlewares.bazarr-stripprefix.stripprefix.prefixes=/bazarr"
- "traefik.http.middlewares.bazarr-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
- "traefik.http.middlewares.bazarr-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
- "traefik.http.middlewares.bazarr-headers.headers.customrequestheaders.X-Forwarded-Prefix=/bazarr"
- "traefik.http.routers.bazarr.middlewares=bazarr-headers,bazarr-stripprefix"
restart: unless-stopped

############################
# LIDARR
############################

lidarr:
image: lscr.io/linuxserver/lidarr:latest
container_name: lidarr
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ}
volumes:
- ${DOCKER_CONFIG_DIR}/lidarr:/config
- /mnt/dataYmir/:/data
ports:
- 8686:8686
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.lidarr.rule=Host(${HOSTNAME}) && PathPrefix(/lidarr)"
- "traefik.http.routers.lidarr.entrypoints=web"
- "traefik.http.services.lidarr.loadbalancer.server.port=8686"
- "traefik.http.middlewares.lidarr-stripprefix.stripprefix.prefixes=/lidarr"
- "traefik.http.middlewares.lidarr-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
- "traefik.http.middlewares.lidarr-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
- "traefik.http.middlewares.lidarr-headers.headers.customrequestheaders.X-Forwarded-Prefix=/lidarr"
- "traefik.http.routers.lidarr.middlewares=lidarr-headers,lidarr-stripprefix"
restart: unless-stopped

############################
# JELLYFIN

############################

jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ}
- JELLYFIN_PublishedServerUrl=http://${HOSTNAME}/jellyfin
volumes:
- ${DOCKER_CONFIG_DIR}/jellyfin:/config
- /mnt/dataYmir/media:/mediaYmir
- /mnt/data/media:/mediaDrogo
ports:
- 8096:8096
- 8920:8920 #optional
- 7359:7359/udp #optional
- 1900:1900/udp #optional
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.jellyfin.rule=Host(${HOSTNAME}) && (PathPrefix(/jellyfin))"
- "traefik.http.routers.jellyfin.entrypoints=web"
- "traefik.http.services.jellyfin.loadbalancer.server.port=8096"
- "traefik.http.middlewares.jellyfin-stripprefix.stripprefix.prefixes=/jellyfin"
- "traefik.http.middlewares.jellyfin-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
- "traefik.http.middlewares.jellyfin-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
# - "traefik.http.middlewares.jellyfin-headers.headers.customrequestheaders.X-Forwarded-For=127.0.0.1"
- "traefik.http.middlewares.jellyfin-headers.headers.customrequestheaders.X-Forwarded-Prefix=/jellyfin"
- "traefik.http.routers.jellyfin.middlewares=jellyfin-headers,jellyfin-stripprefix"
restart: unless-stopped

############################
# JELLYSEER
############################

jellyseer:
image: fallenbagel/jellyseerr:latest
container_name: jellyseer
environment:
- LOG_LEVEL=debug
- TZ=${TZ}
volumes:
- ${DOCKER_CONFIG_DIR}/jellyseer:/app/config
ports:
- 5055:5055
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.jellyseer.rule=Host(${HOSTNAME}) && PathPrefix(/jellyseer)"
- "traefik.http.routers.jellyseer.entrypoints=web"
- "traefik.http.services.jellyseer.loadbalancer.server.port=5055"
- "traefik.http.middlewares.jellyseer-stripprefix.stripprefix.prefixes=/jellyseer"
- "traefik.http.middlewares.jellyseer-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
- "traefik.http.middlewares.jellyseer-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
- "traefik.http.middlewares.jellyseer-headers.headers.customrequestheaders.X-Forwarded-Prefix=/jellyseer"
- "traefik.http.routers.jellyseer.middlewares=jellyseer-headers,jellyseer-stripprefix"
restart: unless-stopped

############################
# HOMARR
############################

homarr:
image: ghcr.io/homarr-labs/homarr:latest
container_name: homarr
environment:
- SECRET_ENCRYPTION_KEY=${HOMARR_SECRET_KEY}
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Optional, only if you want docker integration
- ${DOCKER_CONFIG_DIR}/homarr:/appdata
ports:
- '7575:7575'
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.homarr.rule=Host(${HOSTNAME}) && PathPrefix(/homarr)"
- "traefik.http.routers.homarr.entrypoints=web"
- "traefik.http.services.homarr.loadbalancer.server.port=7575"
- "traefik.http.middlewares.homarr-stripprefix.stripprefix.prefixes=/homarr"
- "traefik.http.middlewares.homarr-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
- "traefik.http.middlewares.homarr-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
- "traefik.http.middlewares.homarr-headers.headers.customrequestheaders.X-Forwarded-For=127.0.0.1"
- "traefik.http.middlewares.homarr-headers.headers.customrequestheaders.X-Forwarded-Prefix=/homarr"
- "traefik.http.routers.homarr.middlewares=homarr-headers,homarr-stripprefix"
restart: unless-stopped
```

GLUETUN

    image: qmcgaw/gluetun:v3
    container_name: gluetun
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun:/dev/net/tun
    ports:
      - 8080:8080/tcp # qbittorrent
    environment:
      - TZ=${TZ}
      - UPDATER_PERIOD=24h
      - VPN_SERVICE_PROVIDER=protonvpn
      - VPN_TYPE=${VPN_TYPE}
      - BLOCK_MALICIOUS=off
      - OPENVPN_USER=${OPENVPN_USER}
      - OPENVPN_PASSWORD=${OPENVPN_PASSWORD}
      - OPENVPN_CIPHERS=AES-256-GCM
      - WIREGUARD_PRIVATE_KEY=${WIREGUARD_PRIVATE_KEY}
      - PORT_FORWARD_ONLY=on
      - VPN_PORT_FORWARDING=on
      - VPN_PORT_FORWARDING_UP_COMMAND=/bin/sh -c 'wget -O- --retry-connrefused --post-data "json={\"listen_port\":{{PORTS}}}" http://127.0.0.1:8080/api/v2/app/setPreferences 2>&1'
      - SERVER_COUNTRIES=${SERVER_COUNTRIES}
    volumes:
      - ${DOCKER_CONFIG_DIR}/gluetun:/gluetun
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.qbittorrent.rule=Host(`${HOSTNAME}`) && PathPrefix(`/qbittorrent`)"
      - "traefik.http.routers.qbittorrent.entrypoints=web"
      - "traefik.http.services.qbittorrent.loadbalancer.server.port=8080"
      - "traefik.http.middlewares.qbittorrent-stripprefix.stripprefix.prefixes=/qbittorrent"
      - "traefik.http.routers.qbittorrent.middlewares=qbittorrent-stripprefix"
    restart: unless-stopped


    ############################
    # QBITTORRENT       
    ############################
  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    depends_on:
      gluetun:
        condition: service_healthy
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
      - WEBUI_PORT=8080
    volumes:
      - ${DOCKER_CONFIG_DIR}/qbittorent:/config
      - ${MEDIA_DIR}/downloads:/downloads
    restart: unless-stopped
    network_mode: "service:gluetun"

NETWORKS

networks:
traefik:
driver: bridge
external: false
socket_proxy:
driver: bridge
internal: true
external: false
```

  • # et sinon ?

    Posté par  . Évalué à 4 (+1/-0). Dernière modification le 13 août 2025 à 16:29.

    note que je n'y connais pas grand chose en docker et traefik

    mais l'experience fait qu'on arrive à se debrouiller

    problème : ça ne marche pas. J'ai toujours accès hostname.local: mais quand j'essaye hostname.local/ j'ai des erreurs

    mais quelles sont ces erreurs ?

    est-ce que ce ne serait pas que tes services attendent un nom du style https://monsonarr.local
    plutot que https://hostname.local ?

    je vois que tu definis des entrypoint dans traefik pour web et websecure
    mais que n'utilise que web dans tes services

    xxx.yyy.entrypoints=web

    si ton navigateur ajoute lui meme https://
    au mieux tu tombes sur traefik, mais il n'a pas de regle pour aller plus loin

    • [^] # Re: et sinon ?

      Posté par  . Évalué à 1 (+0/-0).

      il reste le websecure parce que j'étais parti super confiant et je pensais pouvoir faire ça facilement et forcer https. Ce sera la prochaine étape

      Les erreurs étaient un peu diverse, j'avais globalement des 404 mais pas tout le temps.
      J'avais car j'ai finalement trouvé qu'il y a un paramètre "baseurl" dans les *arr, j'ai donc retirer le middleware stripprefix et ajouté une baseurl à chaque service, ça marche pour presque tous

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.