Comment créer sa seedbox avec Docker et Ubuntu Server

Docker, qBittorrent, port ouvert, dossier partagé : monte ta seedbox maison sur Ubuntu Server, pas à pas.

Introduction

⚠️ Avertissement. Monter sa propre seedbox demande d'être à l'aise avec un terminal Linux et avec les bases du réseau.

  • Si tu ne sais pas ce qu'est SSH, un port ou une permission de fichier, ne te lance pas là-dedans : loue plutôt une seedbox. Tu gagneras du temps et des nerfs.
  • Si tu sais un peu te débrouiller (copier des commandes, les comprendre à peu près, lire un message d'erreur), tu es au bon endroit : on va y aller pas à pas.

Dans l'article précédent, on a comparé la seedbox louée et la seedbox maison. Ici, on passe à la pratique : on va monter une seedbox avec Docker sur Ubuntu, parce que c'est la méthode la plus simple et la plus répandue.

À la fin de l'article, tu auras un client BitTorrent qui tourne 24h/24, accessible depuis ton navigateur, avec un port ouvert et tes fichiers rangés dans un dossier facile à récupérer.

(Comme toujours : utilise-la pour des contenus dont tu as les droits.)

Glossaire

Terme Définition
Docker Outil qui fait tourner des applications dans des conteneurs isolés, faciles à installer, à mettre à jour et à supprimer
Docker Compose Outil qui décrit un ou plusieurs conteneurs dans un seul fichier (docker-compose.yml)
Image Le "modèle" à partir duquel un conteneur est créé
Volume (bind mount) Un dossier de ta machine rendu visible à l'intérieur d'un conteneur
PUID / PGID L'identifiant de l'utilisateur et du groupe avec lesquels l'application tourne dans le conteneur
SSH / SFTP Connexion sécurisée à distance à un serveur, et transfert de fichiers par-dessus
WebUI L'interface web de qBittorrent, qui te permet de le piloter depuis ton navigateur
Redirection de port Réglage de ta box qui envoie le trafic reçu sur un port vers une machine précise de ton réseau

Ce que l'on va construire

Voici l'architecture, en quatre éléments :

  1. Un serveur Ubuntu, allumé en permanence.
  2. Un conteneur qBittorrent, lancé avec Docker Compose.
  3. Un dossier de téléchargement sur le serveur, partagé avec le conteneur.
  4. Un port ouvert sur ta box pour recevoir des connexions (c'est ce qui fait la différence entre un partage efficace et un partage poussif).

L'interface web, elle, reste uniquement accessible depuis ton réseau local. On ne l'expose jamais sur internet.

Prérequis

  • Un serveur ou un PC sous Ubuntu Server (une version LTS, par exemple 22.04 ou 24.04), allumé en continu.
  • Un accès SSH et un utilisateur avec les droits sudo.
  • De la place disque, et un disque en bon état.
  • Une IP publique : si tu es derrière un CGNAT (certaines box 4G/5G, par exemple), tu ne pourras pas ouvrir de port. Dans ce cas, la seedbox maison n'est pas faite pour toi.
  • L'accès à l'interface de ta box (ou de ton routeur) pour rediriger un port.

Pourquoi le dossier de téléchargement doit être facilement accessible

C'est le point qu'on oublie le plus souvent, alors autant l'expliquer maintenant. Par défaut, ce qui se trouve dans un conteneur est enfermé dedans. Si tu laisses Docker gérer le stockage tout seul, tes fichiers se retrouvent dans un répertoire interne (/var/lib/docker/...) difficile à retrouver, et supprimés avec le conteneur si tu fais une mauvaise manipulation.

On va donc choisir nous-mêmes un dossier sur le serveur (/srv/data) et le relier au conteneur. Ça nous permet :

  • de récupérer nos fichiers facilement (SFTP, partage réseau, serveur multimédia...) ;
  • de survivre à une mise à jour ou à une suppression du conteneur ;
  • d'avoir des permissions cohérentes : le conteneur écrit avec le même utilisateur que toi, donc tu peux lire, déplacer et supprimer ce qu'il télécharge ;
  • de garder une seule racine (/srv/data), ce qui sera indispensable plus tard pour l'automatisation (on y reviendra à la fin).

Étape 1 : installer Docker

Si Docker est déjà installé, passe à l'étape suivante (docker --version te le dira). Sinon, voici l'installation depuis le dépôt officiel :

sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

(Les commandes peuvent évoluer : en cas de doute, la documentation officielle fait foi.)

Pour utiliser Docker sans taper sudo à chaque fois, ajoute ton utilisateur au groupe docker, puis reconnecte-toi :

sudo usermod -aG docker $USER

Attention : appartenir au groupe docker revient à avoir des droits équivalents à root sur la machine. Ne le fais que sur un serveur dont tu maîtrises l'accès.

Vérifie que tout fonctionne :

docker run --rm hello-world
docker compose version

Étape 2 : préparer les dossiers

On crée un dossier pour la configuration, et un dossier pour les données :

mkdir -p ~/seedbox/config
sudo mkdir -p /srv/data/torrents
sudo chown -R $USER:$USER /srv/data

Note ensuite ton UID et ton GID : ce sont les valeurs qu'on donnera au conteneur.

id -u
id -g

Sur une installation classique, tu obtiendras 1000 et 1000.

Si tu as un disque dédié aux données, monte-le sur /srv/data avant de continuer.

Étape 3 : écrire le docker-compose.yml

Crée le fichier dans ~/seedbox :

nano ~/seedbox/docker-compose.yml

Voici son contenu :

services:
  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
      - WEBUI_PORT=8080
      - TORRENTING_PORT=6881
    volumes:
      - ./config:/config
      - /srv/data:/data
    ports:
      - 8080:8080
      - 6881:6881
      - 6881:6881/udp
    restart: unless-stopped

Ce que fait chaque partie :

  • image : l'image qBittorrent maintenue par LinuxServer.io, très utilisée et régulièrement mise à jour.
  • PUID / PGID : remplace-les par les valeurs de l'étape précédente si elles sont différentes.
  • TZ : ton fuseau horaire.
  • WEBUI_PORT : le port de l'interface web (8080 par défaut).
  • TORRENTING_PORT : le port d'écoute BitTorrent. On le fixe à 6881, et c'est celui qu'on ouvrira sur la box.
  • volumes : ./config conserve la configuration de qBittorrent, et /srv/data est notre dossier de données, qui apparaît sous /data dans le conteneur.
  • ports : les ports exposés. Le 6881 est ouvert en TCP et en UDP.
  • restart: unless-stopped : le conteneur redémarre tout seul après un redémarrage de la machine.

Étape 4 : lancer et configurer qBittorrent

Dans ~/seedbox, lance le conteneur :

cd ~/seedbox
docker compose up -d
docker compose ps

Récupère ensuite le mot de passe temporaire généré au premier démarrage :

docker compose logs qbittorrent | grep -i password

Ouvre http://IP_DE_TON_SERVEUR:8080 dans ton navigateur et connecte-toi avec l'utilisateur admin et ce mot de passe temporaire.

Ensuite, dans Options :

  1. Web UI : change le mot de passe tout de suite.
  2. Téléchargements : mets le dossier par défaut sur /data/torrents.
  3. Connexion : vérifie que le port d'écoute est bien 6881, et décoche l'option de port aléatoire. Tu peux aussi décocher la redirection UPnP, puisqu'on va ouvrir le port à la main.

Étape 5 : ouvrir le port

C'est l'étape qui fait toute la différence. Sans port ouvert, tu ne peux pas recevoir de connexions entrantes, donc moins de peers, et un partage nettement moins efficace.

  1. Donne une IP fixe à ton serveur sur ton réseau, par exemple avec une réservation DHCP dans ta box. Sinon, la redirection cessera de fonctionner le jour où l'IP changera.
  2. Dans l'interface de ta box, redirige le port 6881 en TCP et en UDP vers l'IP de ton serveur.
  3. Si tu as plusieurs routeurs en cascade, répète l'opération sur chacun.
  4. Teste le port depuis l'extérieur avec un site de test de port, pendant que qBittorrent tourne. Dans le client, l'icône de connexion en bas de fenêtre doit indiquer que tu es connecté, et non "derrière un pare-feu".

Deux précisions importantes :

  • N'ouvre jamais le port 8080 sur ta box. L'interface web ne doit pas être accessible depuis internet.
  • Si tu utilises UFW, sache que Docker contourne ses règles pour les ports qu'il publie. Le pare-feu ne protège donc pas un port déjà exposé dans le docker-compose.yml : c'est pour ça que ta box, elle, ne doit rediriger que le 6881.

Étape 6 : accéder à l'interface depuis l'extérieur (sans l'exposer)

Si tu veux piloter ta seedbox hors de chez toi, ne redirige pas le port 8080. Passe plutôt par un VPN (par exemple WireGuard ou Tailscale) : tu te connectes à ton réseau privé, et l'interface devient accessible comme si tu étais à la maison.

Étape 7 : récupérer tes fichiers

Les fichiers téléchargés sont dans /srv/data/torrents sur le serveur. Pour les rapatrier :

  • En ligne de commande, avec rsync (qui reprend un transfert interrompu) :
  rsync -avP utilisateur@IP_DE_TON_SERVEUR:/srv/data/torrents/ ./mes-fichiers/
  • Avec un client SFTP graphique (FileZilla, WinSCP...) en te connectant en SSH.
  • Via un partage réseau (Samba ou NFS) si tu préfères voir le dossier comme un disque.

Étape 8 : l'entretien

  • Mettre à jour le conteneur :
  cd ~/seedbox
  docker compose pull
  docker compose up -d
  docker image prune -f
  • Surveiller l'espace disque avec df -h : un disque plein arrête tout, silencieusement.
  • Sauvegarder le dossier ~/seedbox/config (c'est lui qui contient ta configuration).
  • Vérifier de temps en temps que le port est toujours ouvert, surtout après un changement de box ou de réseau.

Les pièges classiques

  • Permission denied : le PUID/PGID du conteneur ne correspond pas à l'utilisateur propriétaire de /srv/data.
  • Port "ouvert" mais injoignable : redirection oubliée sur l'un des routeurs, mauvaise IP, ou CGNAT.
  • Fichiers introuvables : le dossier de téléchargement n'est pas sous /data dans qBittorrent, donc il reste dans le conteneur.
  • Interface web exposée : le port 8080 redirigé par erreur sur la box.
  • Disque plein : plus rien ne se télécharge, sans message d'erreur évident.
  • Configuration perdue : aucune sauvegarde du dossier config.

Conclusion

Tu as maintenant une seedbox maison qui tourne : un client, un port ouvert, et un dossier propre pour tes fichiers. Ce n'est que la base. Ce qui fait vraiment gagner du temps, c'est l'automatisation : récupérer les fichiers tout seul, les ranger, gérer le ratio sans y toucher.

C'est justement la raison pour laquelle on a tout rangé sous /srv/data : c'est la structure qu'il faut pour que ces outils fonctionnent proprement ensemble. On s'y attaque dans le prochain article.

Commentaires

Chargement des commentaires…

Masquer ce commentaire ?

Il ne sera plus visible du public. Son texte est conservé et vous pourrez le rétablir. Ses réponses restent visibles.

Signaler ce commentaire

Pourquoi ?