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 :
- Un serveur Ubuntu, allumé en permanence.
- Un conteneur qBittorrent, lancé avec Docker Compose.
- Un dossier de téléchargement sur le serveur, partagé avec le conteneur.
- 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
dockerrevient à avoir des droits équivalents àrootsur 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/dataavant 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:./configconserve la configuration de qBittorrent, et/srv/dataest notre dossier de données, qui apparaît sous/datadans 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 :
- Web UI : change le mot de passe tout de suite.
- Téléchargements : mets le dossier par défaut sur
/data/torrents. - 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.
- 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.
- Dans l'interface de ta box, redirige le port 6881 en TCP et en UDP vers l'IP de ton serveur.
- Si tu as plusieurs routeurs en cascade, répète l'opération sur chacun.
- 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: lePUID/PGIDdu 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
/datadans 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
Connectez-vous pour commenter ou répondre.