Installer Transmission avec Docker
Guide d'installation de Transmission sous Docker

Au sommaire :
- 1-Qu'est-ce que Transmission ?
- 2-Prérequis
- 3-Déploiement
- 4-Configuration
- 5-Exposer son instance avec Traefik
1-Qu'est-ce que Transmission ?
Transmission est un client Torrent libre multi-plateformes (Linux, Windows, macOS) qui a la particularité d'être souvent installé par défaut dans la plupart des distributions Linux.
En soit, c'est pas la "killer app" car des clients Torrent c'est pas ce qui manque sur le marché.
C'est le client que j'utilise par défaut sur Ubuntu en version desktop.
2-Prérequis
Pour déployer Transmission, vous devez disposer d'une machine virtuelle fonctionnant sous Ubuntu Server.
Création de la machine virtuelle :
Virtualisation avec Proxmox VE : Si vous partez de zéro, suivez mon guide détaillé pour virtualiser Ubuntu sur Proxmox VE avec des réglages optimisés.

Automatisation avec Cloud-Init : Pour gagner du temps lors de la configuration, utilisez un template Cloud-Init. Cela permet d'automatiser et de simplifier l'initialisation de vos machines virtuelles. Retrouvez les instructions dans ce guide.

Installation des outils nécessaires :
Docker et Docker Compose : Une fois la machine virtuelle prête, installez Docker et Docker Compose, indispensables pour gérer et orchestrer vos conteneurs. Ce guide vous accompagnera dans l'installation.

Sécurisation et exposition de l'application :
Proxy inverse avec Traefik : Pour exposer vos applications sur Internet de manière sécurisée, configurez un proxy inverse. Traefik est une solution recommandée. Suivez ce guide pour l'installation.

Gestion des accès avec Authelia : Pour renforcer la sécurité, implémentez une solution de gestion des accès telle qu'Authelia. Ce guide vous fournira les étapes nécessaires :

3-Déploiement
Commencez par créer un dossier "docker" à la racine du dossier utilisateur"
mkdir -p ~/docker
Créez un fichier nommé "compose.yml"
touch ~/docker/compose.yml
Ouvrez le fichier "compose.yml" et copiez cette configuration.
networks:
# Docker Bridge Network
default:
driver: bridge
services:
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
# - TRANSMISSION_WEB_HOME= #optional
# - USER= #optional
# - PASS= #optional
# - WHITELIST= #optional
# - PEERPORT= #optional
# - HOST_WHITELIST= #optional
volumes:
- ${APPDATA}/transmission:/config
- ${APPDATA}/downloads:/downloads
- ${APPDATA}/watch:/watch
ports:
- 9091:9091
- 51413:51413
- 51413:51413/udp
restart: unless-stopped
Pour les options communes :
- network : en bridge (l'adresse IP sera celle de la machine virtuelle ou du conteneur LXC)
- services : c'est là qu'il faudra ajouter les configurations de vos conteneurs
- image : nom du registry suivi du nom de l'application (lscr.io/linuxserver/app_name)
- container_name : le nom du conteneur, sinon Docker en choisira un de manière aléatoire (mieux vaut le nommer vous même)
- environment : il y a les variables de base (PUID, PGID, TZ) qui correspondent à l'utilisateur, le groupe et le fuseau horaire. Vous avez ensuite des variables optionnelles (qu'on ne va pas couvrir) comme TRANSMISSION_WEB_HOME (si vous souhaitez changer l'interface web)
, USER/PASS (si vous souhaitez créer un utilisateur et un mot de passe), WHITELIST (liste blanche d'adresses IP), PEERPORT (port d'écoute Torrent facultatif), HOST_WHITELIST (liste blanche de DNS) - volumes : variable ${APPDATA) (/home/user_name/appdata) suivi du nom de l'application (/app_name) pour la configuration de l'application, downloads pour les téléchargements et watch (dossier pour charger automatiquement vos fichiers torrent, très utile dans le cas d'une seedbox)
- ports : 9191 (port d'écoute de l'interface web), 51413 TCP et UDP (port d'écoute pour le trafic). Veuillez prendre compte que le port 9091 est également utilisé par Authelia donc pensez à le changer (9092 par exemple)
- restart : unless-stopped par défaut. Le daemon de Docker redémarrera automatiquement le conteneur sauf si vous l’arrêtez, il faudra le démarrer manuellement
Téléchargez l'image et déployez le conteneur.
docker compose pull && docker compose create
Puis démarrez le conteneur.
docker start transmission
4-Configuration
Une fois l'application démarrée, tapez l'adresse IP de votre machine virtuelle suivi du numéro de port que vous aurez choisi.
L'interface est pas vraiment géniale mais ça a le mérite d'aller à l'essentiel. À noter que depuis la version 4, il n’est plus possible d'installer des interfaces alternatives.

Pour charger un fichier torrent ou un lien web, cliquez sur le dossier avec le logo "+".


Un petit tour rapide des options mais comme vous allez le constater pour les habitués, c'est standard de chez standard.





5-Exposer son instance avec Traefik et Authelia
Voici la configuration avec Traefik et Authelia.
Cochez la section ports si vous ne souhaitez pas accéder à l'application en local.
Ensuite, si vous avez suivi les guides de Traefik et Authelia, il vous faudra ajouter les labels adéquat pour pouvoir exposer l'application sur internet et activer l'authentification SFA ou MFA.
Comme d'habitude, suivez les parties 6 et 7 du guide de Traefik pour ouvrir les ports de votre box internet et ajouter les entrées DNS pour pouvoir accéder à l'application.
Et n'oubliez JAMAIS :
- D'éditer le fichier "configuration.yml" de Authelia.
- D'ajouter le nom de domaine de l'application
- De redémarrer l'application avec "docker compose restart authelia" pour que la modification soit prise en compte.

networks:
# default network
default:
driver: bridge
# Traefik network
web:
name: web
driver: bridge
services:
traefik:
container_name: traefik
image: traefik:v2
restart: always
network:
web:
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ${APPDATA}/traefik/logs:/logs
- ${APPDATA}/traefik/traefik.yml:/traefik.yml
- ${APPDATA}/traefik/dynamic.yml:/dynamic.yml
- ${APPDATA}/traefik/letsencrypt/acme.json:/acme.json
labels:
- traefik.enable=true
- traefik.http.routers.traefik-dash.entrypoints=websecure
- traefik.http.routers.traefik-dash.rule=Host(`traefik.<domain_name>.ovh`)
- traefik.http.routers.traefik-dash.service=api@internal
- "traefik.http.routers.traefik.middlewares=middlewares-basic-auth@file"
authelia:
image: authelia/authelia
container_name: authelia
volumes:
- ${APPDATA}/authelia:/config
networks:
- web
labels:
- traefik.enable=true
- traefik.http.routers.authelia.entrypoints=websecure
- traefik.http.routers.authelia.rule=Host(`authelia.<domain_name>`)
- traefik.http.routers.authelia.tls.certresolver=letsencrypt
ports:
- 9091:9091
restart: unless-stopped
healthcheck:
disable: true
environment:
- TZ=${TZ}
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
# - TRANSMISSION_WEB_HOME= #optional
# - USER= #optional
# - PASS= #optional
# - WHITELIST= #optional
# - PEERPORT= #optional
# - HOST_WHITELIST= #optional
network:
- web
volumes:
- ${APPDATA}/transmission/data:/config
- ${APPDATA}/downloads:/downloads
- ${APPDATA}/watch:/watch
ports:
- 9091:9091
- 51413:51413
- 51413:51413/udp
restart: unless-stopped