Aller au contenu

# Qbittorrent

Objectif

- Installer et configurer Qbittorent
- Etre relié au réseau bittorent en toute sécurité avec Gluetun et Proton VPN

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 :

## Configuration

Structure des dossiers

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    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 :

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    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:
          - TZ=Europe/Paris
          - PUID=${PUID}
          - PGID=${GUID}
          - WEBUI_PORT=${UI_PORT}
          - DOCKER_MODS=ghcr.io/gabe565/linuxserver-mod-vuetorrent
        volumes:
          - /docker/seedbox/qbittorrent/config:/config
          - /docker/seedbox/downloads:/downloads
          - /video/movies:/movies
          - /video/tvseries:/tvseries
        depends_on:
          - gluetun

      gluetun:
        image: qmcgaw/gluetun:v3.38
        container_name: gluetun
        restart: unless-stopped
        mem_limit: 1g
        volumes:
          - /docker/seedbox/gluetun:/gluetun
        ports:
          - ${UI_PORT}:5695 # (1)!
          - 8000:8000 # (2)!
        cap_add:
          - NET_ADMIN
        environment:
          - TZ=Europe/Paris
          - VPN_SERVICE_PROVIDER=custom
          - VPN_TYPE=wireguard
          - VPN_ENDPOINT_IP=${IP}
          - VPN_ENDPOINT_PORT=${PORT}
          - WIREGUARD_PUBLIC_KEY=${PU_KEY}
          - WIREGUARD_PRIVATE_KEY=${PR_KEY}
          - WIREGUARD_ADDRESSES=${IP_MASK}
          - VPN_PORT_FORWARDING=on
          - VPN_PORT_FORWARDING_PROVIDER=protonvpn
          - UPDATER_PERIOD=6h
          - BLOCK_MALICIOUS=off
          - BLOCK_SURVEILLANCE=off
          - BLOCK_ADS=off
          - DOT=off
          - HEALTH_VPN_DURATION_INITIAL=20s
          - HEALTH_VPN_DURATION_ADDITION=15s
          - HEALTH_SUCCESS_WAIT_DURATION=10s

      qbittorrent-port-update:
        image: technosam/qbittorrent-gluetun-port-update:latest
        container_name: qbittorrent_port_update
        network_mode: service:gluetun
        environment:
          - QBITTORRENT_WEBUI_PORT=${UI_PORT}
          - QBITTORRENT_WEBUI_USERNAME=${ID}
          - QBITTORRENT_WEBUI_PASSWORD=${PW}
        restart: unless-stopped
        depends_on:
          - gluetun

1. Port de la web-ui
2. Port de controle de Gluetun

Astuce

Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    services:
      qbittorent:
        #...
        labels:
          - com.centurylinklabs.watchtower.enable=true
      gluetun:
        #...
        labels:
          - com.centurylinklabs.watchtower.enable=true
      qbittorrent-port-update:
        #...
        labels:
          - com.centurylinklabs.watchtower.enable=true

Et renseignez dans `.env`:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    PUID=
    GUID=
    IP=
    PORT=
    UI_PORT=
    PU_KEY=
    PR_KEY=
    IP_MASK=
    ID=
    PW=

En détails :

Variable | Valeur | Exemples
--- | --- | ---
`PUID=` | A renseigner avec les infos de votre user (trouvables via la commande `$ id nomdutilisateur`) | `1000`
`GUID=` | A renseigner avec les infos de votre user (trouvables via la commande `$ id nomdutilisateur`) | `1000`
`IP=` | l'IP du endpoint de Proton, fournie par Proton. Les serveurs les plus performants étant en Suisse, je vous conseille d'en sélectionner un là bas. | `123.45.67.89`
`PORT=` | Le port de Wireguard, ici `51820` pour Proton | `51820`
`UI_PORT=` | Le port d'accès à la web ui, elle sera joignable via `http//ipduserveur:port` | `5695`
`PU_KEY=` | La clée publique fournie par Proton | `aNhcz1l3JfWbFZo2XMpzQlP2iOqk`
`PR_KEY=` | La clée privée fournie par Proton | `buKsjNHLyzKMM1qYnzOy4s7SHfly`
`IP_MASK=` | L'IP fournie par Proton et son masque | `10.2.0.2/32`
`ID=` | Nom d'utilisateur que vous devrez reporter ensuite dans l'interface de Qbittorent. Attention à bien renseigner la meme chose dans Qbittorent. | `monuser`
`PW=` | Mot de passe que vous devrez reporter ensuite dans l'interface de Qbittorent. Attention à bien renseigner la meme chose dans Qbittorent. | `monmotdepasse`

## Déploiement

Une fois fait, déployez le conteneur.

Attention

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'echec

Vérifiez les règles de votre pare-feu.

Changez votre nom d'utilisateur et votre mot de passe par ceux que vous avez configuré dans le `.env`

Relancez la stack afin de vous assurer que le conteneur qui met à jour le port s'est bien connecté avec vos identifiants

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.

Info

Nous partons du principe que vous avez renseigné un sous-domaine `seedbox.mondomaine.fr` avec un `CNAME` pointant sur mondomaine.fr dans les enregistrement DNS de votre registrar. Et que bien sûr, à moins que vous utilisiez Cloudflare Zero Trust, le port `443` de votre box pointe bien sur le port `443` de votre serveur via les règles NAT.

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

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    services:
      gluetun:
         container_name: gluetun
          # ...
         networks: # (1)!
          - swag # (2)!

    networks: # (3)!
      swag: # (6)!
        name: swag_default # (4)!
        external: true # (5)!

1. Relie le conteneur au réseau custom. A faire pour chaque conteneur à exposer de la stack
2. Nom du réseau déclaré dans la stack
3. Défini le réseau custom
4. Nom véritable du réseau externe
5. Précise que c'est un réseau à rechercher en externe
6. Nom du réseau déclaré dans la stack

Note

Ici nous partons du principe que le nom du réseau de Swag est swag_default. Puis déployez à nouveau la stack.

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.

    1
    $ 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 :

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    ## 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;

        }
    }

Protéger avec Authentik

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 !