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 NeoX . É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
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
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 Gart Algar . É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.