Transformer son Synology en download/media center avec Transmission, Jdownloader, Sickchill, Couchpotato, Plex et Tautulli.

Transformer son synology en download / media center grâce à Docker. On installe Transmission, Jdownloader, Sickchill, Couchpotato, Plex et Tautulli, rien que ça !

Transformer son Synology en download/media center avec Transmission, Jdownloader, Sickchill, Couchpotato, Plex et Tautulli.

Bonjour,

Je préviens avant de démarrer, ça va être un grooos post.

Les prérequis:

  • Avoir un Synology ou un Xpenology (la base quoi !).
  • Avoir un accès SSH sur votre Syno/Xpenology.
  • Savoir un minimum ce qu’est Docker et un container.
  • Avoir le paquet Docker installé sur votre Synology/Xpenology.

Quelques questions / réponses avant de commencer :

  •  L’installation va se faire via des containers sous Docker. Pourquoi utiliser Docker et non pas les paquets qui sont disponible dans les différentes bibliothèques pour Synology ? Pour plusieurs raisons : la maintenance, la performance et l’indépendance vis à vis de la version de Synology.
  • Vu qu’on va faire l’installation via Docker, pourquoi ne pas utiliser le paquet Docker qui est dans Synology ? Pour une seule et unique raison : la performance. Il y a encore quelques mois, je faisais mes installations via l’interface graphique et ça fonctionnait très bien. Mais je me suis rendu compte qu’en le faisant via docker-compose, les utilitaires étaient beaucoup mais alors vraiment beaucoup plus réactifs ! Par exemple, jdownloader et Sickchill étaient parfois très lent, les pages pouvaient mettre plusieurs secondes à s’afficher, c’était assez agaçant. Via docker-compose, tout est instantané comme ça devrait l’être (enfin si votre hardware le permet, of course). Ca semble très étrange mais ça pourrait être du à la façon dont l’API docker est géré dans le paquet Synology.
  • Tu as dis que la maintenance était plus simple mais via les paquets, j’ai juste un clic à faire de temps en temps. Oui c’est vrai mais là c’est encore mieux car tout va se faire tout seul et surtout comme c’est via Docker, vous aurez des versions beaucoup plus à jour (et plus rapidement) que via les paquets de Synology.
  • Pourquoi vouloir être indépendant vis à vis de la version de Synology? Ca a du vous arriver, mais après des mises à jour de Synology, vous vous retrouvez avec des paquets qui ne fonctionnent pas. C’est normal, il faut, si il y a de grosses modifications, que les paquets soient mises à jour et parfois ça peut prendre du temps. Ca ne sera pas un problème si vos utilitaires tournent sous Docker. J’ai pour ma part switché tout sous docker il y a 3 ans quand je me suis retrouvé avec un Synology 918 tout neuf sur lequel tout simplement aucun paquet n’était disponible car c’était une toute nouvelle architecture. Je peux vous dire que quand j’ai vu que rien n’était disponible, j’étais dégoûté de l’avoir acheté et heureusement Docker m’a sauvé. J’en ai d’ailleurs gardé un gout très amer car je l’ai revendu quelques mois après pour me monter mon propre serveur et passer sur Xpenology.
  • En résumé : les paquets de Synology c’est son immense succès car ça permet d’avoir une solution clé en main en quelques minutes mais c’est ça peut comme je l’ai expliqué précédemment devenir une véritable plaie sans parler de la perte très nette de performance.

1. On va commencer par s’occuper de la partie qui concerne ce que j’appelle les fondations pour mes installations de docker. Je divise mes installations sous docker en général en 3 stacks différents : le stack des fondations ou j’installe le reverse proxy et tout ce qui est lié au management des containers, ensuite le stack principal et un dernier stack qui concerne le monitoring. Ca me permet de faire des mises à jour simples quand je veux modifier des choses sur mon stack et normalement de ne quasi jamais toucher à mon stack principal. Si vous souhaitez tout regrouper dans un seul fichier docker-compose ça fonctionne parfaitement. Ah oui, et on va effectivement tout faire à partir des fichiers docker-compose, c’est parfait pour la maintenance et les upgrades, beaucoup mieux que de lancer les conteneurs à base de lignes de commandes.

2. Connectez vous en SSH sur votre Synology/Xpenology et pensez à créer votre répertoire Docker (vous pouvez l’appeler comme vous voulez) ou vous stockerez vos containers.

3. On va maintenant créer deux networks virtuels pour le reverse proxy : un qui sera « en contact » avec l’extérieur de votre réseau et l’autre qui sera « interne » à votre réseau local. Let’s rock :

docker network create frontend
docker network create backend

4. On va maintenant créer le docker-compose qui va bien:

mkdir traefik
cd traefik
nano docker-compose.yml

Et donc le fichier en lui même:

version: '3.5'
services:
  # Reverse Proxy / Traefik 2.x
  # https://hub.docker.com/_/traefik
  traefik:
    image: traefik:latest
    container_name: traefik
    hostname: traefik
    restart: unless-stopped
    networks:
      - routers
    command:
      #- "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      #- "--entrypoints.websecure.address=:443"
      #- "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
      #- "--certificatesresolvers.mytlschallenge.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
      #- "[email protected]omain.com"
      #- "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "8080:8080"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      #- "./letsencrypt:/letsencrypt"
    labels:
      - "traefik.http.routers.router0.rule=Host(`localhost`) && PathPrefix(`/test`)"
      - "traefik.enable=true"

  # Installer Portainer / Interface graphique docker
  # https://hub.docker.com/r/portainer/portainer
  portainer:
  image: portainer/portainer:latest
  container_name: portainer
  restart: unless-stopped
  networks:
    - backend
  ports:
    - "9000:9000"
  labels:
    - "traefik.enable=false"
  volumes:
    - "/var/run/docker.sock:/var/run/docker.sock"
    - ./data:/data

  # Watchtower detects if any linked containers have an new image available, automatically updating & restarting them if needed.
  watchtower:
  # https://hub.docker.com/r/centurylink/watchtower/
  image: v2tec/watchtower:latest
  # https://github.com/v2tec/watchtower#options
  # This schedule applies updates (if available) at midnight.
  command: --cleanup --schedule "0 0 0 * * *"
  depends_on:
    - traefik
  restart: unless-stopped
  container_name: watchtower
  networks:
    - backend
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
  labels:
    - "traefik.enable=false"

networks:
  frontend:
    external: true
  backend:
    external: true

Alors les explications :

  •  Traefik c’est votre reverse proxy qui va vous permettre de gérer le trafic qui passe dans vos différents containers et les certificats SSL. A noter que pour cette installation je ne m’en sers pas, je le mets « pour plus tard » car il vous sera utile si vous souhaitez que vos containers soient accessibles depuis l’extérieur de votre réseau.
  • Portainer va vous permettre de gérer les containers docker via une interface graphique (pratique pour aller voir rapidement les logs, les arrêter, redémarrer, etc…) sans ligne de commande. C’est équivalent à l’interface graphique pour Docker que vous avez via votre paquet dans Synology/Xpenology.
  • Watchtower va bosser comme un grand en tâche de fond et va mettre à jour automatiquement vos containers tous les jours à minuit. Il va vérifier si il existe une nouvelle image et si c’est le cas, la pull et relancer automatiquement le container. Génial pour vous assurer d’être tout le temps à jour mais il faut faire attention car des fois certaines mises à jour peuvent « casser » votre installation.

5. On enregistre le magnifique (ctrl +x si vous utilisez nano) docker-compose.

6. On va maintenant pouvoir lancer les containers:

docker-compose up -d --build

7. Si vous n’avez pas fait d’erreur l’interface de traefik sera disponible sur http://votreiplocale:8080 ou alors https://votredomaine.com/traefik, et l’interface de portainer sera disponible sur http://votreiplocale:9000

8. A noter que le password qui est demandé pour l’interface de traefik doit être généré avec htpasswd generator. Pour ça on peut le faire soit avec une ligne de commande soit aller directement sur un site: http://www.htaccesstools.com/htpasswd-generator/. A savoir que dès qu’il y a un sigle $ il faut en rajouter un deuxième sinon docker-compose ne le prend pas en compte. C’est un peu bordélique je vous l’accorde.

9. Maintenant qu’on a mis en place les fondations, on va pouvoir s’atteler à votre stack principal. On commence par se rendre dans le répertoire qui va bien. Moi je l’ai appelé Hadopi pour leur rendre hommage, c’est important de leur reconnaître une utilité publique.

cd /volume1/docker/
mkdir Hadopi
nano docker-compose.yml

Et donc le fichier en lui même:

version: "3.5"
services:
  # Transmission: DL torrents
  # https://hub.docker.com/r/linuxserver/transmission/
  # Dans transmission / Blocklist
  # http://john.bitsurge.net/public/biglist.p2p.gz
  transmission:
    image: linuxserver/transmission:latest
    container_name: transmission
    restart: unless-stopped
    environment:
      - PUID=0
      - PGID=0
      - TZ=Europe/Paris
      - USER=votreuser #optional
      - PASS=votrepass #optional
    volumes:
      - /data/docker/Transmission/Config:/config
      - /data/Transmission:/downloads
      - /data/docker/Transmission/Config:/watch
    ports:
      - 9091:9091
      - 51413:51413
      - 51413:51413/udp
    networks:
      - services
    labels:
      - "traefik.enable=true"     
      
  # Jdownloader2 : download direct
  # https://hub.docker.com/r/jlesage/jdownloader-2/
  jdownloader2:
    image: jlesage/jdownloader-2:latest
    container_name: jdownloader2
    restart: unless-stopped
    ports:
      - 5800:5800
    volumes:
      - /data/docker/Jdownloader/Config:/config
      - /data/Transmission:/output   
    environment:
      - USER_ID=0
      - GROUP_ID=0
      - TZ=Europe/Paris      
      - DISPLAY_WIDTH=1280
      - DISPLAY_HEIGHT=768
      - APP_USER=votreuser
      - UMASK_SET: 002
      - KEEP_APP_RUNNIN: 1
      - CLEAN_TMP_DIR: 1
    networks:
      - services
    labels:
      - "traefik.enable=true"       

  # Couchpotato : download des films de vacances
  # https://hub.docker.com/r/linuxserver/couchpotato/
  couchpotato:
    image: linuxserver/couchpotato:latest
    container_name: couchpotato
    restart: unless-stopped    
    environment:
      - PUID=0
      - PGID=0
      - TZ=Europe/Paris
      #- UMASK_SET=022
    volumes:
      - /volume1/docker/Couchpotato/Config:/config
      - /volume1/Bibliotheque/Transmission:/downloads
      - /volume2/Library/Films:/movies
    ports:
      - 5050:5050
    networks:
      - services
    labels:
      - "traefik.enable=true"   
  
  # Sickchill : download des séries gratuites
  # https://hub.docker.com/r/linuxserver/sickchill/
  sickchill:
    image: linuxserver/sickchill:latest
    container_name: sickchill
    restart: unless-stopped     
    environment:
      - PUID=0
      - PGID=0
      - TZ=Europe/Paris
    volumes:
      - /data/docker/Sickrage/Config:/config
      - /data/Transmission:/downloads
      - /data/Series:/tv
    ports:
      - 8081:8081      
    networks:
      - services
    labels:
      - "traefik.enable=true"     

  # Plex : gestion & lecture des films/series de vacances
  # https://hub.docker.com/r/linuxserver/plex/
  plex:
    image: linuxserver/plex:latest
    container_name: plex
    restart: unless-stopped        
    environment:
      - PUID=0
      - PGID=0
      - VERSION=latest
      - TZ=Europe/Paris      
      #- UMASK_SET=022 #optional
    volumes:
      - /data/docker/Plex/Config:/config
      - /data/Bibliotheque/Series:/data/tv
      - /data/Bibliotheque/Transmission:/transcode  
      - /data/music:/data/music
      - /data/photo:/data/photo
      - /data/music/Playlist:/data/playlist
      - /data/Films:/data/movies
      - /data/Animes:/data/animes
    network_mode: host      
    labels:
      - "traefik.enable=true"          

  # Tautulli : stats Plex
  # https://hub.docker.com/r/linuxserver/tautulli/
  tautulli:
    image: linuxserver/tautulli:latest
    container_name: tautulli
    restart: unless-stopped
    environment:
      - PUID=0
      - PGID=0
      - TZ=Europe/Paris
    volumes:
      - /data/docker/Tautulli//Config:/config
      - /data/docker/Tautulli/Data:/logs
    ports:
      - 8181:8181
    networks:
      - services
    labels:
      - "traefik.enable=true"  
      
networks:
  services:
    external: true
  routers:
    external: true 

On enregistre le magnifique (ctrl +x si vous utilisez nano) docker-compose. On lance le docker-compose:

sudo docker-compose up -d    

10. Les containers sont accessibles sur:
Transmission: http://votreip:9091
Jdownloader: http://votreip:5800
Couchpotato: http://votreip:5050
Sickrage: http://votreip:8081
Tautulli: http://votreip:8181
Plex: http://plex.tv et http://votreip:32400

11. Les explications:

  • Transmission: logiciel de download peer to peer. A noter qu’il existe des applications dans Chrome & Firefox pour pouvoir envoyer directement un lien magnet avec un clic droit. Indispensable !
  • Jdownloader : logiciel de download pour les liens directs. A noter qu’il existe des applications dans Chrome & Firefox pour pouvoir envoyer directement un lien avec un clic droit. Indispensable !
  • Couchpotato: utilitaire qui permet de rechercher et downloader des films de vacances.
  • Sickchill (ex Sickrage): utilitaire qui permet de rechercher et downloader des séries gratuites.
  • Plex: votre utilitaire qui va vous permettre de transformer votre installation en média center. Il permet de centraliser vos films / séries et les visualiser.
  • Tautulli: permet de voir vos statistiques pour Plex.
  • Pour connaitre votre PUID/GUID, il suffit de taper:
     sudo id 
  • Il faut bien évidemment adapter les répertoires qui vont bien pour vos Volumes.

12. Et voila, enjoy ! Vous avez maintenant un Synology / Xpenology au top !

@+