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" #- "--certificatesresolvers.mytlschallenge.acme.email=postmaster@mydomain.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 !
@+