[Tuto] Installation de Wireguard Client, Prowlarr, rutorrent, Sonarr, Radarr

  • Vague de SPAM

    Suite à une vague de spam sur le forum, les inscriptions sont temporairement limitées.

    Après votre inscription, un membre de l'équipe devra valider votre compte avant qu'il ne soit activé. Nous sommes désolés pour la gêne occasionnée et vous remercions de votre patience.
Autre point, @EVO je vois que tu as utilisé spliit, tu en es content ? C'est assez fiable ?

J'utilise depuis plusieurs années, sans soucis.

Parce que si la personne qui gère le compte met du temps à m'envoyer la conf
J'ai jamais eu a contacter directement , a chaque fois c'était via le système auto, tu as donc les identifiants dans la foulée
 
  • J'aime
Réactions: Nincha
Hello !
Bon j'ai suivi le tuto et j'ai pu déployer tout ça par le biais de Portainer 🙂
Merci @EVO pour ce tuto.
J'ai également souscris chez spliit pour Windscribe, merci pour la découverte !

Pour le fichier rutorrent.env j'ai eu quelques difficultés car Portainer ne reconnaît pas le chemin du fichier. Il a fallu cliquer sur une option "charger un fichier d'environnement", puis en lieu et place du path du fichier env, il faut indiquer "stack.env".
J'ai également l'option sys_modules sur la partie wireguard qui fait planter le déploiement, en la commentant ça passe ( pas encore pris le temps de regarder les effets de bord de l'absence de cette cap).

Bon maintenant me reste à paramétrer tout ce petit monde et trouver des indexers français efficaces

Merci !

Prochaine étape, ajouter flaresolverr
 
  • J'aime
Réactions: EVO
J'ai également l'option sys_modules sur la partie wireguard qui fait planter le déploiement, en la commentant ça passe ( pas encore pris le temps de regarder les effets de bord de l'absence de cette cap).

Prochaine étape, ajouter flaresolverr
une plaie ce truc 😂 Viré depuis bien longtemps me concernant.
 
Ok merci pour ton retour.
Si je tente, je donnerai un rtex sur le niveau d'embetement du truc....
Concernant sys module, j'en conclus que les règles iptables sont probablement mal gérées ?
 
C'est quoi ton systeme ? Si les acces aux conteneurs, . fonctionnent pour moi c'est ok
Une lxc proxmox privileged
J'ai testé de couper le vpn pour voir si j'avais toujours accès, et après cela un ajout d'indexer ça tourne à l'infini donc j'en conclus que le vpn est bien obligatoire pour les autres conteneurs
 
Flaresolverr ajouté en 10 minutes, juste eu à ajouter le depends on vpn, virer l'attribution de port et ajouter le health check.
Et prowlarr le reconnaît, en testant l'ajout d'un indexer ça fonctionne.
Prendre le compose qui est sur docker hub comme base.
 
Top , après je le rajouterzi pas , au final j'arrive très bien a m'en passer. Dans quelques joirs tu verra sil fonctionne toujours aussi bien 😊
Effectivement pour le moment ce n'est que le test de départ, on verra bien.

Pour le restant de la stack, après c'est une usine à gaz à configurer avec tous les custom format.
Merci trash guides aussi
 
  • J'aime
Réactions: MaîtrePacha et EVO
Bonjour tout le monde,
J'ai quelques petites questions car je deploie pour la seconde fois cette stacks et je me demandais :

1- Est il interessant d'utiliser l'image gluetun pour y mettre wireguard ? Quelle serait les différences en terme de perfomance

2- pourquoi est ce que tous les services (radarr, lidarr, ...) passent par le VPN avec network_mode: "service:vpn" ? N'est il pas plus intéressant de ne mettre que rtorrent derrière le VPN ?

3- Y a t'il une raison d'utiliser l'image crazymax pour rtorrent par rapport à celle de linuxserver ?

Merci pour les réponses :)
 
1- Est il interessant d'utiliser l'image gluetun pour y mettre wireguard ? Quelle serait les différences en terme de perfomance
Gluetun permet plus de réglage, le port forwarding avec certains fournisseur compatible, ... donc cela peut etre interessant effectivement. Cependant si le but est juste de mettre un fichier de config wireguard pour se connecter, l'image wireguad de linuxserver est plus simple je trouve. Aussi, principalement c'est que au moment ou j'ai fait mon installation, gluetun n’existai pas :)

2- pourquoi est ce que tous les services (radarr, lidarr, ...) passent par le VPN avec network_mode: "service:vpn" ? N'est il pas plus intéressant de ne mettre que rtorrent derrière le VPN ?
C'est un choix perso, je souhaite masquer également mon ip qui se connecte aux trackers, et quand elle consulte les site comme thetvdb , ....

3- Y a t'il une raison d'utiliser l'image crazymax pour rtorrent par rapport à celle de linuxserver ?
Oui, a la base car l'image de crazymax est bien plus complète. Maintenant, en plus l'image de linuxserver n'est plus maintenu.
 
  • J'aime
Réactions: exemple54
Merci @EVO pour les explications !!

Une dernière question est si je veux passer par un reverse proxy (eg. swag) pour accéder à radarr, sonarr, rutorrent ... Comment je dois faire ? (si c'est possible)
J'ai essayé de faire l'ajout d'un network au sein de la stack, ou en créant un réseau dans portainer puis en l'ajoutant manuellement, mais je n'arrive pas à accéder en tapant https://sonarr.ndd.fr

Merci d'avance pour l'aide
 
Bonjour,
Wireguard est en unhealthy depuis que j'ai essayé d'ajouter des lignes au compose, maintenant supprimées.
Ça c'est le compose du vpn :
Code:
version: "3.9"
      
services:
  vpn:
    image: lscr.io/linuxserver/wireguard
    container_name: vpn

    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    networks:
      default:
        ipv4_address: 172.18.200.2
    environment:
      - PUID=1000
      - PGID=100
      - TZ=Europe/Paris
    volumes:
      - /share/CACHEDEV1_DATA/Docker/wireguard/config:/config
      - /lib/modules:/lib/modules
    ports:
     - 7878:7878 # WebUI radarr
     - 8989:8989 # WebUI sonarr
     - 9696:9696 # WebUI prowlarr
     - 9090:9090 # WebUI qbittorrent
     - 6881:6881 # tcp qbittorrent
     - 6881:6881/udp # udp qbittorrent
     - 7070:7070 # WebUI qbtemp
     - 6882:6882 # tcp qbtemp
     - 6882:6882/udp # udp qbtemp
    sysctls:
     - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped
    mem_limit: 128m
    healthcheck:
     test: ["CMD-SHELL", "if [ $$(curl --silent https://ifconfig.co/country-iso) = 'FR' ]; then exit 0; else exit 1; fi"]
     start_period: 10s
     interval: 60s
     timeout: 10s
     retries: 3



  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    network_mode: "service:vpn"
    depends_on:
      - vpn
    labels:
      - com.centurylinklabs.watchtower.enable=true
      - deunhealth.restart.on.unhealthy=true
    environment:
      - PUID=1000
      - PGID=100
      - TZ=Europe/Paris
      - DOCKER_MODS=ghcr.io/themepark-dev/theme.park:prowlarr
      - TP_THEME=organizr
    volumes:
      - /share/CACHEDEV1_DATA/Docker/prowlarr/config:/config
    mem_limit: 256m
    restart: unless-stopped
    healthcheck:
     test: "CMD-SHELL", "curl --fail [http://172.18.200.2:9696/ || exit 1"]
     start_period: 15s
     interval: 90s
     timeout: 10s
     retries: 3



sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    depends_on:
      - vpn
    network_mode: "service:vpn"
    labels:
      - com.centurylinklabs.watchtower.enable=true
      - deunhealth.restart.on.unhealthy=true
    environment:
      - PUID=1000
      - PGID=100
      - TZ=Europe/Paris
      - DOCKER_MODS=ghcr.io/themepark-dev/theme.park:sonarr
      - TP_THEME=organizr
    volumes:
      - /share/CACHEDEV1_DATA/Docker/sonarr/config:/config
      - /share/CACHEDEV3_DATA/Medias-3/Seed-2:/data/seed
      - /share/CACHEDEV1_DATA/Medias/Series:/data/series
      - /share/CACHEDEV1_DATA/Medias/Animes:/data/animes
      - /share/CACHEDEV1_DATA/Medias/DDL:/data/ddl

      - /share/CACHEDEV4_DATA/MD2/Series:/data/series-3
      - /share/CACHEDEV4_DATA/MD2/Animes:/data/animes-3
    mem_limit: 2048m
    restart: unless-stopped
    healthcheck:
     test: "CMD-SHELL", "curl --fail [http://172.18.200.2:8989/ || exit 1"]
     start_period: 15s
     interval: 90s
     timeout: 10s
     retries: 3



  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    depends_on:
      - vpn
    network_mode: "service:vpn"
    labels:
      - com.centurylinklabs.watchtower.enable=true
      - deunhealth.restart.on.unhealthy=true
    environment:
      - PUID=1000
      - PGID=100
      - TZ=Europe/Paris
      - DOCKER_MODS=ghcr.io/themepark-dev/theme.park:radarr
      - TP_THEME=organizr
    volumes:
      - /share/CACHEDEV1_DATA/Docker/radarr/config:/config
      - /share/CACHEDEV1_DATA/Medias/DDL:/data/ddl
      - /share/CACHEDEV3_DATA/Medias-3/Seed-2:/data/seed
      - /share/CACHEDEV4_DATA/MD2/Films:/data/films-2
    mem_limit: 2048m
    restart: unless-stopped
    healthcheck:
     test: "CMD-SHELL", "curl --fail [http://172.18.200.2:7878/ || exit 1"]
     start_period: 15s
     interval: 90s
     timeout: 10s
     retries: 3



qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    depends_on:
      - vpn
    network_mode: "service:vpn"
    labels:
      - com.centurylinklabs.watchtower.enable=true
      - deunhealth.restart.on.unhealthy=true
    environment:
      - PUID=1000
      - PGID=100
      - TZ=Europe/Paris
      - WEBUI_PORT=9090
    volumes:
      - /share/CACHEDEV1_DATA/Docker/qbittorrent/config:/config
      - /share/CACHEDEV1_DATA/Medias/Seed:/data/seed
    mem_limit: 2048m
    restart: unless-stopped
    healthcheck:
     test: "CMD-SHELL", "curl --fail [http://172.18.200.2:9090/ || exit 1"]
     start_period: 15s
     interval: 90s
     timeout: 10s
     retries: 3



  qbittorrent_temp:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbtemp
    depends_on:
      - vpn
    network_mode: "service:vpn"
    labels:
      - com.centurylinklabs.watchtower.enable=true
      - deunhealth.restart.on.unhealthy=true
    environment:
      - PUID=1000
      - PGID=100
      - TZ=Europe/Paris
      - WEBUI_PORT=7070
    volumes:
      - /share/CACHEDEV1_DATA/Docker/qbtemp/config:/config
      - /share/CACHEDEV3_DATA/Medias-3/Seed-2:/data/seed
    mem_limit: 2048m
    restart: unless-stopped
    healthcheck:
     test: "CMD-SHELL", "curl --fail [http://172.18.200.2:7070/ || exit 1"]
     start_period: 15s
     interval: 90s
     timeout: 10s
     retries: 3


      
networks:
  default:
    name: downloads_net
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.200.0/24


J'avais ça dans les logs :
Code:
Uname info: Linux 5c5b9552d31a 5.10.60-qnap #1 SMP Thu Dec 25 04:02:51 CST 2025 x86_64 GNU/Linux
**** As the wireguard module is already active you can remove the SYS_MODULE capability from your container run/compose. ****
****     If your host does not automatically load the iptables module, you may still need the SYS_MODULE capability.     ****
**** Client mode selected. ****
[custom-init] No custom files found, skipping...
**** Disabling CoreDNS ****
**** Found WG conf /config/wg_confs/wg0.conf, adding to list ****
**** Activating tunnel /config/wg_confs/wg0.conf ****
Warning: `/config/wg_confs/wg0.conf' is world accessible
[#] ip link add dev wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.13.13.1 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip -4 route add 10.13.13.2/32 dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
iptables v1.8.11 (nf_tables): Could not fetch rule set generation id: Invalid argument
[#] ip link delete dev wg0
**** Tunnel /config/wg_confs/wg0.conf failed, will stop all others! ****
**** All tunnels are now down. Please fix the tunnel config /config/wg_confs/wg0.conf and restart the container ****
[ls.io-init] done.

J'ai testé plusieurs choses. Pour commencer, refaire le wg0.conf n'a fait que changer l'erreur dans les logs :
Code:
Uname info: Linux 215bd8ffc4e6 5.10.60-qnap #1 SMP Thu Dec 25 04:02:51 CST 2025 x86_64 GNU/Linux
**** As the wireguard module is already active you can remove the SYS_MODULE capability from your container run/compose. ****
****     If your host does not automatically load the iptables module, you may still need the SYS_MODULE capability.     ****
**** Client mode selected. ****
[custom-init] No custom files found, skipping...
**** Disabling CoreDNS ****
**** Found WG conf /config/wg_confs/wg0.conf, adding to list ****
**** Activating tunnel /config/wg_confs/wg0.conf ****
Warning: `/config/wg_confs/wg0.conf' is world accessible
[#] ip link add dev wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 100.76.186.235/32 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -6 rule add not fwmark 51820 table 51820
[#] ip -6 rule add table main suppress_prefixlength 0
[#] ip -6 route add ::/0 dev wg0 table 51820
[#] nft -f /dev/fd/63
netlink: Error: cache initialization failed: Invalid argument
[#] resolvconf -d wg0 -f
[#] ip -6 rule delete table 51820
[#] ip -6 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0
**** Tunnel /config/wg_confs/wg0.conf failed, will stop all others! ****
**** All tunnels are now down. Please fix the tunnel config /config/wg_confs/wg0.conf and restart the container ****
[ls.io-init] done.
En prenant soin de supprimer les containers, le réseau et les images à chaque fois, j'ai testé plusieurs fix trouvés sur diverses sources :

- Supprimer ⁨::/0⁩ de AllowedIPs dans wg0.conf
- Ajouter ⁨- NFTABLES=0⁩ aux variables du compose
- Supprimer ces lignes du compose :
Code:
PostUp = DROUTE=$(ip route | grep default | awk '{print $3}'); HOMENET=192.168.0.0/16; HOMENET2=172.16.0.0/12; ip route add $HOMENET2 via $DROUTE; ip route add $HOMENET via $DROUTE;iptables -I OUTPUT -d $HOMENET -j ACCEPT;iptables -A OUTPUT -d $HOMENET2 -j ACCEPT; iptables -A OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = HOMENET=192.168.0.0/16; HOMENET2=172.16.0.0/12; ip route del $HOMENET2 via $DROUTE; ip route del $HOMENET via $DROUTE; iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT; iptables -D OUTPUT -d $HOMENET -j ACCEPT; iptables -D OUTPUT -d $HOMENET2 -j ACCEPT

- et même vider le dossier conf pour ne laisser que wg0.conf avant de redéployer les containers

Don je sèche un peu ^^
 
Hello Tente de virer la cap SYS MODULE, et revoie les permissions de ton fichier pour qu'il ne soit accessible que par le user qui en est propriétaire (à priori id 1000 si ça correspond à ton compose)

De mon côté, je tente d'ajouter jellyseer à cette stack mais celui-ci n'arrive pas à communiquer avec mon jellyfin, de même que prowlarr sonarr Radarr n'arrivent pas à communiquer avec gotify. Jellyfin et gotify ont des adresses IP séparées (chacun sur une lxc différente)
 
  • J'aime
Réactions: MaîtrePacha
Hello Tente de virer la cap SYS MODULE, et revoie les permissions de ton fichier pour qu'il ne soit accessible que par le user qui en est propriétaire (à priori id 1000 si ça correspond à ton compose)
Je ne m'attendais pas a une réponse aussi rapide. Je vais essayer ça de suite, merci !
 
Hello Tente de virer la cap SYS MODULE, et revoie les permissions de ton fichier pour qu'il ne soit accessible que par le user qui en est propriétaire (à priori id 1000 si ça correspond à ton compose)

De mon côté, je tente d'ajouter jellyseer à cette stack mais celui-ci n'arrive pas à communiquer avec mon jellyfin, de même que prowlarr sonarr Radarr n'arrivent pas à communiquer avec gotify. Jellyfin et gotify ont des adresses IP séparées (chacun sur une lxc différente)
J'ai retiré le SYS MODULE mais ça n'a pas changé, permissions ok. Concernant ton problème, je dirais que jellyfin et gotify ne peuvent pas communiquer avec les services derrière le vpn s'ils ne font pas parti du même réseau. Par exemple, si le nom du réseau de ton vpn est downloads_net
Dans les composes de jellyfin et gotify, ajoute un
Code:
    networks:
      - downloads_net

après container name et

Code:
networks:
  downloads_net:
    external: true

à la fin des composes