Qbittorrent

🎯 Objectifs :
  • Installer et configurer Qbittorent
  • Etre relié au réseau bittorent en toute sécurité avec Gluetun et Proton VPN

Picture

Afin de téléchargez vos media favoris en toute sécurité, nous allons monter un système à base de :

  • Qbittorent comme logiciel de téléchargement bittorent
  • Proton VPN Plus, VPN pour sécuriser vos échanges, auquel vous devez souscrire (il y a de nombreux codes promo) pour accéder au protocole Bittorent, mais vous pouvez également en choisir un autre, à condition qu'il propose le protocole bittorent.
  • Gluetun
  • Qbittorent port update pour mettre automatiquement à jour le port de votre VPN (qui change régulièrement).
  • Et le mode vuetorrent pour une interface moderne et intuitive.

Nous monterons ici le système ci-dessous :

Picture

Configuration


Structure des dossiers

root
├── docker
│   └── seedbox
│       ├── qbittorent
│       │   └── config
│       ├── gluetun
│       ├── downloads #vos téléchargements génériques
│       ├── compose.yaml
│       └── .env
└── video #relié à plex
    ├── movies #à selectionner dans l'interface pour télécharger vos films
    └── tvseries #à selectionner dans l'interface pour télécharger vos séries

Ouvrez Dockge, cliquez sur compose et nommez la stack seedbox. Collez la config ci-dessous :

version: "2.1"
services:
  qbit:
    image: ghcr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    restart: unless-stopped
    network_mode: service:gluetun
    mem_limit: 1g
    environment:
      - DOCKER_MODS=ghcr.io/gabe565/linuxserver-mod-vuetorrent|ghcr.io/t-anc/gsp-qbittorent-gluetun-sync-port-mod:main
      - TZ=Europe/Paris
      - PUID=${PUID}
      - PGID=${GUID}
      - WEBUI_PORT=${UI_PORT}
      - GSP_GTN_API_KEY=${GSP_KEY}
    volumes:
      - /docker/seedbox/qbittorrent/config:/config
      - /docker/seedbox/downloads:/downloads
      - /video/movies:/movies
      - /video/tvseries:/tvseries
    depends_on:
      - gluetun

  gluetun:
    image: qmcgaw/gluetun:v3.40
    container_name: gluetun
    restart: unless-stopped
    mem_limit: 1g
    volumes:
      - /docker/gluetun/config.toml:/gluetun/auth/config.toml:ro
    devices:
      - /dev/net/tun:/dev/net/tun
    ports:
      - ${UI_PORT}:5695 # Port de la web-ui
      - 8000:8000 # Port de controle de Gluetun
    cap_add:
      - NET_ADMIN
    environment:
      - TZ=Europe/Paris
      - VPN_SERVICE_PROVIDER=protonvpn
      - VPN_PORT_FORWARDING=on
      - VPN_PORT_FORWARDING_PROVIDER=protonvpn
      - VPN_TYPE=wireguard
      - WIREGUARD_PRIVATE_KEY=${PR_KEY}
      - SERVER_COUNTRIES=France
      - PORT_FORWARD_ONLY=on
Astuce : ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour
services:
  qbittorent:
    #...
    labels:
      - com.centurylinklabs.watchtower.enable=true
  gluetun:
    #...
    labels:
      - com.centurylinklabs.watchtower.enable=true
  qbittorrent-port-update:
    #...
    labels:
      - com.centurylinklabs.watchtower.enable=true

Avant de renseigner le .env dans Dockge, nous allons configurer la mise à jour du port de téléchargement. En effet, Proton, et la plupart des VPN, changent régulièrement le port de téléchargement, et celui-ci doit etre communiqué à Qbitorrent.

Pour ce faire, nous avons ajouté le mod ghcr.io/t-anc/gsp-qbittorent-gluetun-sync-port-mod dans le conteneur.

Il faut à présent permettre au mod de récupérer l'information via Gluetun, qui n'accepte que les communications chiffrées via son API.

A cet effet, ouvrez un terminal. Nous allons à présent générer une clé d'authentification :

sudo docker run --rm qmcgaw/gluetun genkey

Notez la clé. Puis créez le dossier /docker/gluetun

sudo mkdir /docker/gluetun

Et créez le fichier config.toml

sudo vi /docker/gluetun/config.toml

Entrez en modification en tapant i et éditez le comme suit en ajoutant la clée que vous avez générée :

[[roles]]
name = "t-anc/GSP-Qbittorent-Gluetun-sync-port-mod"
routes = ["GET /v1/openvpn/portforwarded"]
auth = "apikey"
apikey = "votre_clée" # clée que vous avez générée précédemment

Appuyez sur échap et quittez en sauvegardant en tapant :x. Rendez-vous dans Dockge, et renseignez les variables dans .env:

PUID=
GUID=
UI_PORT=
PR_KEY=
GSP_KEY= # la clé que vous avez générée et renseignée dans config.toml

En détails :

VariableValeurExemples
PUIDA renseigner avec les infos de votre user (trouvables via la commande id nomdutilisateur)1000
GUIDA renseigner avec les infos de votre user (trouvables via la commande id nomdutilisateur)1000
UI_PORTLe port d'accès à la web ui, elle sera joignable via http//ipduserveur:port5695
PR_KEYLa clée privée fournie par ProtonbuKsjNHLyzKMM1qYnzOy4s7SHfly
GSP_KEYClé que vous avez générée pour la mise à jour du portMnBa47MeVmk7xiv

Déploiement


Une fois fait, déployez le conteneur.

  • Dans les logs de lancement, vous trouverez un mot de passe temporaire pour l'utilisateur admin

Loggez vous sur http://ipduserveur:5695 (ou le port que vous avez configuré).

  • En cas d'échec : vérifiez les règles de votre pare-feu.

Changez votre nom d'utilisateur et votre mot de passe dans les paramètres "webui".

Et voilà ! Lorsque vous lancez un téléchargement, n'oubliez pas de préciser le bon répertoire de téléchargement afin que Plex puisse synchroniser correctement sa bibliothèque.

Exposer la webui


Afin de lancer des téléchargement hors de chez vous, sans VPN, vous pouvez exposer la webui de Qbittorent.

Pour cela, ajoutez le réseau de swag à gluetune via Dockge en ajoutant manuellement comme dans cet exemple :

services:
  nomduservice:
     container_name: #...
      # ... 
     networks: # Relie le conteneur au réseau custom. A faire pour chaque conteneur à exposer de la stack 
      - swag # Nom du réseau déclaré dans la stack
    
networks: # Défini le réseau custom
  swag: # Nom du réseau déclaré dans la stack
    name: swag_default # Nom véritable du réseau externe
    external: true # Précise que c'est un réseau à rechercher en externe
  • Ici nous partons du principe que le nom du réseau de Swag est swag_default.

Puis nous allons créer et éditer le fichier seedbox.subdomain.conf.

Astuce pour les allergiques au terminal : vous pouvez utiliser File Browser pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
sudo vi /docker/swag/config/nginx/proxy-confs/seedbox.subdomain.conf

Entrez en modification en appuyant sur i et copiez la configuration ci-dessous, en prenant soin de vérifier le port :

## Version 2023/12/19

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name seedbox.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    #if ($lan-ip = yes) { set $geo-whitelist yes; }
    #if ($geo-whitelist = no) { return 404; }
    if ($geo-blacklist = no) { return 404; }

    # enable for ldap auth (requires ldap-location.conf in the location block)
    #include /config/nginx/ldap-server.conf;

    # enable for Authelia (requires authelia-location.conf in the location block)
    #include /config/nginx/authelia-server.conf;

    # enable for Authentik (requires authentik-location.conf in the location block)
    #include /config/nginx/authentik-server.conf;

    location / {
        # enable the next two lines for http auth
        #auth_basic "Restricted";
        #auth_basic_user_file /config/nginx/.htpasswd;

        # enable for ldap auth (requires ldap-server.conf in the server block)
        #include /config/nginx/ldap-location.conf;

        # enable for Authelia (requires authelia-server.conf in the server block)
        #include /config/nginx/authelia-location.conf;

        # enable for Authentik (requires authentik-server.conf in the server block)
        #include /config/nginx/authentik-location.conf;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app gluetun;
        set $upstream_port 5555;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }
}
✨ Vous pouvez protéger cette app avec Authentik en retirant les # devant include /config/nginx/authentik-server.conf; et include /config/nginx/authentik-location.conf;. N'oubliez pas de créer une application et un fournisseur dans Authentik.

Appuyez sur Echap puis sauvegardez et quittez en tapant :x.

Patientez quelques minutes puis tapez dans votre navigateur https://seedbox.mondomaine.fr, vous arriverez sur l'interface de Qbittorent.

Et voilà, vous avez un mediacenter pret à l'emploi !

Picture