qBittorrent

Afin de télécharger vos media favoris en toute sécurité, nous allons monter un système à base de :
- qBittorrent comme logiciel de téléchargement BitTorrent
- 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 BitTorrent, mais vous pouvez également en choisir un autre, à condition qu'il propose le protocole BitTorrent.
- Gluetun
- qBittorrent 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 :
Configuration
- /
- srv
- docker
- seedbox
- qbittorrent
- config
- gluetun
- compose.yaml
- .env
- qbittorrent
- seedbox
- docker
- mediarelié à Jellyfin et qBittorrent
- downloadstéléchargements génériques, choisis dans les réglages
- moviesutilisé pour télécharger les films
- tvseriesutilisé pour télécharger les séries
- srv
Créer les dossiers média
Si ce n'est pas déjà fait, créez le dossier downloads dans /media :
mkdir -p /media/downloads
Déployer la stack
Ouvrez Dockge, cliquez sur compose, et nommez la stack seedbox. Collez la configuration suivante :
---
services:
qbit:
image: ghcr.io/linuxserver/qbittorrent:libtorrentv1
container_name: qbittorrent
restart: unless-stopped
network_mode: service:gluetun
mem_limit: 4g
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=${PGID}
- WEBUI_PORT=${UI_PORT}
- GSP_GTN_API_KEY=${GSP_KEY}
- GSP_QBT_USERNAME=${ID}
- GSP_QBT_PASSWORD=${PW}
volumes:
- /srv/docker/seedbox/qbittorrent/config:/config
- /media:/media
depends_on:
- gluetun
gluetun:
image: qmcgaw/gluetun:v3.41.3
container_name: gluetun
restart: unless-stopped
mem_limit: 4g
volumes:
- /srv/docker/gluetun/config.toml:/gluetun/auth/config.toml:ro
devices:
- /dev/net/tun:/dev/net/tun
ports:
- ${UI_PORT}:${UI_PORT} # 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
---
services:
qbittorrent:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
gluetun:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
Configurer la mise à jour du port de téléchargement
Avant de renseigner le .env dans Dockge, configurons la mise à jour du port de téléchargement. Proton et la plupart des VPN font tourner le port de redirection, qui doit être communiqué à qBittorrent.
Nous avons ajouté le mod ghcr.io/t-anc/gsp-qbittorent-gluetun-sync-port-mod au conteneur.
Il faut maintenant permettre au mod de récupérer les informations de Gluetun, qui n'autorise qu'une communication chiffrée via son API.
Ouvrez un terminal pour générer la clé d'authentification :
sudo docker run --rm qmcgaw/gluetun genkey
Notez la clé, puis créez le dossier /srv/docker/gluetun :
sudo mkdir /srv/docker/gluetun
Créez le fichier config.toml :
sudo nano /srv/docker/gluetun/config.toml
Saisissez :
[[roles]]
name = "t-anc/GSP-Qbittorent-Gluetun-sync-port-mod"
routes = ["GET /v1/portforward"]
auth = "apikey"
apikey = "votre_cle_ici" # la clé que vous venez de générer
Appuyez sur Ctrl+O, puis Enter pour enregistrer, et Ctrl+X pour quitter.
Renseigner vos variables d'environnement
Dans Dockge, renseignez les variables du .env :
PUID=
PGID=
UI_PORT=
PR_KEY=
GSP_KEY= # la clé générée et saisie dans config.toml
ID=
PW=
Détail :
| Variable | Description | Exemple |
|---|---|---|
PUID | ID utilisateur (id votreutilisateur) | 1000 |
PGID | ID de groupe (id votreutilisateur) | 1000 |
UI_PORT | Port d'accès à l'interface web | 5695 |
PR_KEY | Clé privée fournie par Proton | buKsjNHLyzKMM1qYnzOy4s7SHfly |
GSP_KEY | Clé générée pour la mise à jour du port | MnBa47MeVmk7xiv |
ID | Identifiant de connexion à l'interface qBittorrent | user |
PW | Mot de passe de l'interface qBittorrent | password |
Terminé !
Déploiement
Déployer le conteneur
Une fois fait, déployez le conteneur.
admin.
Consultez les logs dans Dockge pour le récupérer, ou tapez cette commande dans un terminal :docker logs qbittorrent 2>&1 | grep -i "temporary password"
Se connecter et sécuriser son compte
Connectez-vous sur http://ipduserveur:5695 (ou le port que vous avez défini).
Changez votre identifiant et votre mot de passe dans les réglages « webui ».
Terminé !
C'est terminé ! Dans les réglages de qBittorrent, section « Téléchargements », définissez /media/downloads comme dossier par défaut.
Lors de l'ajout d'un téléchargement, pensez à choisir le bon dossier pour que Jellyfin se synchronise correctement (/media/movies ou /media/tvseries). Vous pouvez aussi automatiser cela avec des catégories et des dossiers.
Exposer la webui
Pour lancer des téléchargements depuis l'extérieur, sans VPN, vous pouvez exposer l'interface web de qBittorrent.
seedbox.mondomaine.fr avec un CNAME pointant vers mondomaine.fr dans la zone DNS. Et que le port 443 de votre box est redirigé vers votre serveur dans les règles NAT, à moins d'utiliser Cloudflare Zero Trust.Ajouter le réseau de Gluetun à SWAG
Dans Dockge, modifiez le fichier compose de SWAG et ajoutez le réseau de Gluetun :
---
services:
swag:
container_name: # ...
# ...
networks:
# ...
- seedbox
networks:
# ...
seedbox:
name: seedbox_default
external: true
Cliquez sur « Deploy » et attendez que SWAG soit complètement initialisé.
seedbox_default. Vous pouvez le confirmer en consultant le tableau de bord de SWAG sur http://ipduserveur:81.Créer le fichier subdomain.conf
Créez ou modifiez maintenant seedbox.subdomain.conf.
sudo nano /srv/docker/swag/config/nginx/proxy-confs/seedbox.subdomain.conf
Collez la configuration suivante (vérifiez le port) :
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
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 5695;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
Appuyez sur Ctrl+O, puis Enter pour enregistrer, et Ctrl+X pour quitter.
Terminé !
Attendez quelques minutes, puis allez sur https://seedbox.mondomaine.fr. Vous devriez arriver sur l'interface de qBittorrent.
Protéger qBittorrent avec TinyAuth
Ajoutez la vérification forward-auth de TinyAuth directement dans seedbox.subdomain.conf, de la même façon que dans le tutoriel TinyAuth :
## Version 2023/12/19
server {
listen 443 ssl;
listen [::]:443 ssl;
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 /tinyauth {
internal;
proxy_pass http://tinyauth:3000/api/auth/nginx;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Uri $request_uri;
}
location @tinyauth_login {
return 302 https://tinyauth.mondomaine.fr/login?redirect_uri=$scheme://$http_host$request_uri;
}
location / {
auth_request /tinyauth;
error_page 401 = @tinyauth_login;
# 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 5695;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
location /tinyauth s'exécute dans le conteneur de SWAG lui-même, SWAG doit donc être sur le réseau Docker de TinyAuth pour le joindre par son nom (tinyauth ici). Cela devrait déjà être en place depuis l'exposition de TinyAuth. Si vous rencontrez une erreur, revérifiez que le fichier compose de SWAG a toujours ce réseau rattaché.authentik-server.conf et authentik-location.conf. N'oubliez pas de créer une application et un provider dans Authentik.Et voilà ! Vous avez maintenant un media center prêt à l'emploi.
Jellyfin
Installer Jellyfin, un serveur multimédia libre et open source, pour diffuser vos films et séries depuis n'importe où sans abonnement payant.
Automatisation
Automatiser les téléchargements de médias avec la suite Servarr, Radarr, Sonarr, Bazarr, Prowlarr et Seerr, pour les films et les séries.