Newsgroups

Ubuntu 20.04 – Newsgroups – Installation de NZBGet, NZBHydra, Sonarr, Radarr et Plex avec Docker

Les newsgroups demeurent relativement plus complexes à utiliser que les services de téléchargement direct HTTP ou de Peer-to-Peer. Mais soyons clairs, il n’y a pas mieux que le réseau Usenet pour dénicher des informations pointues sur toutes sortes de sujets et télécharger des contenus de qualité, rapidement et en toute sécurité, à condition toutefois de débourser quelques euros par mois… Il existe aujourd’hui des outils tels que NZBGet, NZBHydra, Sonarr, Radarr et Lidarr permettant de simplifier grandement l’utilisation des newsgroups.
       
  • À qui s’adresse ce tutoriel ?

    Si vous souhaitez automatiser le téléchargement des films, séries TV et albums de musique dès leur disponibilité pour ensuite les streamer sur votre ordinateur, smartphone ou encore votre smartTV, alors cet article est fait pour vous ! Côté sécurité, vous serez totalement anonyme et protégé !

    Cette procédure fonctionne à la fois pour des installations en local, sur VM ou sur serveur dédié (kimsufi, dedibox, etc.). Il n’est pas obligatoire d’avoir un nom de domaine pour y accéder de l’extérieur. Toutefois, si vous en possédez un, nous verrons comment mettre en place un serveur HTTP Nginx ou Traefik et chiffrer vos échanges avec le protocole SSL/TLS.

  • Usenet ? Newsgroups ?

    Usenet, géré par le protocole NNTP, est un réseau décentralisé, neutre et garantissant un fort anonymat. Ce réseau est antérieur à Internet et est composé de serveurs liés entre eux par des règles de partage (Peering). On accède à Usenet grâce à des providers et chacun d’entre eux a ses propres caractéristiques techniques (rétention, nombre de groupes, connexions, etc.).

    Usenet héberge des forums et des groupes appelés Newsgroups. Ceux-ci sont partagés entre les Newsgroups textes (discussions) et les Newsgroups binaires (qui permettent d’accéder aux fichiers). Chaque fichier posté dans ces groupes binaires est limité en taille.

  • C’est quoi un fichier NZB ?

    Afin de contourner les limites de taille, les fichiers sont découpés en plusieurs fichiers RAR (une image ISO de votre distribution Linux préférée de 1.7Go peut-être divisée par exemple en 114 parties de 15 Mo chacun). À noter que les fichiers RAR sont souvent accompagnés de fichiers PAR (Parity Volume Set pour parité d’un ensemble de fichiers) qui permet de réparer les fichiers égarés ou corrompus.

    Pour éviter de chercher à la main les innombrables fichiers que composent une archive, il suffit de se procurer le fichier NZB qui lui correspond. Il contient la liste entière des différentes composantes (fichiers RAR) et les compléments de parité (fichiers PAR) qui leur sont associés.

  • Les outils utilisés

    Le grabber NZBget permet justement, à partir d’un fichier NZB, de télécharger automatiquement la liste complète des fichiers RAR, de vérifier l’intégralité de chaque archive, d’extraire et de déplacer le fichier final dans le dossier de votre choix. Cette application, tournant en arrière plan, propose une interface web pour ajouter vos fichiers NZB via votre navigateur ou smartphone.

    Ces fichiers NZB sont référencés par des moteurs de recherche (ou indexers accessibles à tous, via un compte ou encore sur invitation. Ils se différencient, comme tout moteur de recherche, par le nombre de fichiers indexés ou par le type de contenu qu’ils proposent. C’est pour cela qu’il peut être intéressant d’en avoir plusieurs et c’est là que NZBHydra intervient. Une fois configuré, NZBHydra permet de faire une recherche via plusieurs indexers en même temps. Il vous donnera également les statistiques sur les différents indexeurs que vous utiliserez. La seule contrainte de NZBHydra est que vos indexers doivent disposer d’une API. Certains indexers, comme NZBGeek, limitent l’accès à leurs API aux comptes premium.

    Sonarr permet de rechercher vos fichiers NZB et d’automatiser le téléchargement de vos séries préférées. Vous ajoutez une série dans l’interface en précisant la qualité et la langue souhaitées et Sonarr recherchera celle-ci via les indexers configurés. Enfin Sonarr ajoutera automatiquement dans NZBGet la série en téléchargement. Parmi les nombreuses fonctionnalités de Sonarr, celui-ci dispose de tâches automatiques et quotidiennes ajoutant automatiquement un épisode fraichement sorti. L’interface dispose aussi d’un calendrier répertoriant les sorties des prochains épisodes.

    Sonarr

    Radarr et Lidarr ont un fonctionnement similaire à Sonarr mais respectivement pour les films et les fichiers audio.

    Enfin Plex est une solution centralisant l’ensemble de vos médias (films, séries, musiques, photos) et les diffusant sur n’importe quel appareil disposant d’une connexion internet.

    Plex, basé sur XBMC, repose sur une architecture en deux parties. D’un côté, l’application serveur contient l’ensemble de vos médias, facilite l’organisation de votre collection (par thèmes, saisons, albums, etc.) et complète les informations relatives à chaque média, en effectuant une recherche sur les principales bases de données en ligne (TMDb, MoviePosterDB, etc.). L’application convertit vos médias à la volée dans un format compatible avec le lecteur.

    De l’autre côté, l’application lecteur (votre navigateur, l’application Plex sur votre mobile, SMART TV, etc.) vous permet de visualiser vos médias. La qualité du flux streamé est ajustée en fonction de la qualité de votre réseau et celui-ci dispose de nombreuses fonctionnalités comme la synchronisation et la lecture hors-ligne ou encore la récupération automatique de sous-titres.

    NZBGet, NZBHydra, Radarr, Sonarr, Lidarr et Plex seront accessibles depuis l’extérieur via Traefik utilisé comme reverse proxy et seront sécurisés grâce à un certificat SSL/TLS délivré par Let’s Encrypt.

  • Pourquoi Docker ?

    Vos outils seront déployés en quelques minutes ! Docker permet en quelques commandes d’installer et d’exécuter tous les outils dont vous aurez besoin. Chaque outil est isolé et possède son propre container Docker. Chaque container contient toutes les dépendances (librairies, démons, configurations, etc.) nécessaires à son exécution sans interférer avec les autres outils ou d’autres services installés sur votre serveur. Enfin les mises à jour des outils sont simplifiées et peuvent être totalement automatisées (nous le verrons). Les images Docker sont versionnées et permettent de redéployer une version précédente très facilement.

    • 1 – Prérequis

      • Vous devez disposer d’Ubuntu 20.04 en version Desktop, Server ou ARM (Raspberry Pi). Si vous disposez d’une version antérieure, vous pouvez mettre à jour votre système en suivant cette procédure.
      • Votre utilisateur doit avoir accès à sudo.
      • Les paquets curl et software-properties-common doivent être installés sur votre système. Dans le doute, tapez la commande suivante :
        sudo apt-get install -y curl software-properties-common
      • Vos dépôts APT doivent être à jour. Dans le doute, tapez la commande suivante :
        sudo apt-get update
      • [Facultatif] Bien que NZBHydra soit configuré par défaut avec des indexers ne nécessitant pas de compte particulier, vous pouvez souscrire à des indexers privés plus complets tels que Usenet-Crawler, NZBGeek, DogNZB, OMGWTFNZBS et Nzbplanet référençant un plus grand nombre de liens NZB.
      • Vous devez disposer d’un provider. C’est sûrement le choix le plus important que vous aurez à faire si vous vous lancez dans l’univers des Newsgroups. Chaque Fournisseur Usenet a ses propres caractéristiques techniques et celles-ci détermineront le prix de votre abonnement. Une petite liste des options qui vont déterminer votre choix :
        • Le volume de téléchargement
        • La rétention binaire (durée de conservation des fichiers, exprimée en jours)
        • Le nombre de Newsgroups disponibles
        • La vitesse de téléchargement et le nombre de connexions simultanées autorisées
        • La confidentialité et sécurité (conservation de l’historique, SSL et VPN)
        • Le taux de complétion (intégrité des archives)
        • La localisation des serveurs
        • Le prix…

        Dans les providers qui tiennent la route et qui disposent de serveurs en Europe (important !), je vous recommande Pure Usenet et UsenetServer. Ils offrent un volume de téléchargement illimité et un service Usenet de premier rang en matière de sécurité / confidentialité (SSL 256 bits), d’excellentes vitesses d’accès (serveurs en Europe) à plus de 100 000 newsgroups jusqu’à 20 connexions simultanées et un très bon délai de rétention. Enfin UsenetServer propose, contrairement à la plupart des concurrents, un VPN inclus dans leur forfait.

        • Formule
        • Vitesse de téléchargement
        • Volume de téléchargement
        • Connexions simultanées
        • Rétention binaire
        • Complétion
        • Nombre de groupes
        • SSL
        • Conservation des logs
        • VPN inclus
        • Localisation des serveurs

      2 – Newsgroups : installation de Docker & Docker Compose

      Docker

      1. Installez Docker :

        sudo apt-get install -y docker.io
      2. Vérifiez que Docker est correctement installé avec la commande :

        docker -v
        Docker version 19.03.8, build afacb8b7f0

        La commande doit retourner la version installée de Docker.

      Docker Compose

      1. Téléchargez Docker Compose avec la commande suivante en modifiant la version si besoin avec la dernière release du repository officiel de Docker :

        sudo curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
      2. Ajoutez les droits d'exécution sur le binaire de Docker Compose :

        sudo chmod +x /usr/local/bin/docker-compose
      3. Vérifiez l'installation de Docker Compose avec la commande :

        docker-compose -v
        docker-compose version 1.26.2, build 8a1c60f6

        Si l'installation s'est correctement effectuée, cette commande doit vous renvoyer la version de Docker Compose.

      1. Installez les dépendances requises pour Docker Compose :

        sudo apt install -y python3-pip libffi-dev
      2. Installez Docker Compose :

        sudo pip3 install docker-compose
      3. Vérifiez l'installation de Docker Compose avec la commande :

        docker-compose -v
        docker-compose version 1.26.2, build 8a1c60f6

        Si l'installation s'est correctement effectuée, cette commande doit vous renvoyer la version de Docker Compose.


      3 – Newsgroups : droits Unix et arborescence

      Il est recommandé, pour des raisons de sécurité, de créer un utilisateur dédié à la gestion des volumes Docker (NZBGet, NZBHydra, Sonarr, Radarr, Lidarr et Plex) et de ne pas les lancer sous votre super-utilisateur.

      1. Créez un utilisateur media :

        sudo adduser media
      2. Ajoutez-le au groupe docker :

        sudo adduser media docker

      L’arborescence utilisée sur le filesystem sera la suivante :

      data
      ├── movies
      ├── music
      ├── nzb
      └── tv

      Le choix de spécifier un répertoire par type de média sera très utile pour la gestion des librairies au sein de Plex. Un fichier téléchargé via NZBGet restera dans le dossier /data/nzb tant qu’il sera en cours de téléchargement. Une fois terminé, celui-ci sera automatiquement déplacé par NZBGet dans le répertoire /data/movies, /data/tv ou /data/music selon si le téléchargement a été ajouté par Radarr, Sonarr ou Lidarr. Nous verrons plus tard comment configurer automatiquement le déplacement d’un média dans le bon répertoire.

      1. Créez l’arboresence dédiée aux téléchargements :

        sudo mkdir -p /data/nzb /data/movies /data/music /data/tv
      2. Attribuez ces répertoires à l’utilisateur media pour éviter de futurs problèmes de permissions :

        sudo chown media:media /data/nzb /data/movies /data/music /data/tv

      4 – Les images newsgroups

      4.1 – Création des volumes Dockers

      Chacun des outils utilisés est facultatif, si vous ne souhaitez pas utiliser tel ou tel outil, il suffit de ne pas le mettre dans le fichier docker-compose.yml.

      • Connectez-vous sous l’utilisateur media :

        su media
      • Déplacez-vous dans le répertoire personnel de cet utilisateur :

        cd
      • Créez le fichier /home/media/.env et modifiez les valeurs en fonction de votre configuration :

        PUID=1001
        PGID=1001
        PATH_MEDIA=/data
        • PUID et GUID : ces deux variables représentent respectivement l’identifiant et le groupe de votre utilisateur media. Ces valeurs peuvent être différentes d’un système à l’autre. Tapez la commande suivante pour obtenir le PUID et GUID de votre utilisateur media :

          id media
          uid=1001(media) gid=1001(media) groups=1001(media),999(docker)

          Dans cet exemple, le uid correspond au PUID et le gid correspond au PGID.

        • PATH_MEDIA : chemin absolu du dossier parent des dossiers /data/nzb, /data/movies, /data/music et /data/tv où seront stockés vos médias. Si vous choisissez un chemin autre que celui-ci, assurez-vous que l’utilisateur media ait les droits de lecture et d’écriture dans le répertoire spécifié.
        •    
      • Créez le fichier /home/media/docker-compose.yml avec le contenu suivant (copiez le contenu tel quel sans rien modifier) :

        version: '3.7'
        services:
          nzbget:
            image: linuxserver/nzbget:latest
            container_name: nzbget
            restart: unless-stopped
            ports:
              - 6789:6789
            environment:
              - PUID=${PUID}
              - PGID=${PGID}
              - TZ=Europe/Paris
            volumes:
              - /home/media/nzbget/config:/config
              - ${PATH_MEDIA}:/downloads
        
          nzbhydra:
            image: linuxserver/hydra2:latest
            container_name: nzbhydra
            restart: unless-stopped
            ports:
              - 5076:5076
            environment:
              - PUID=${PUID}
              - PGID=${PGID}
              - TZ=Europe/Paris
            volumes:
              - /home/media/nzbhydra/config:/config
              - ${PATH_MEDIA}:/downloads
        
          sonarr:
            image: linuxserver/sonarr:latest
            container_name: sonarr
            restart: unless-stopped
            ports:
              - 8989:8989
            environment:
              - PUID=${PUID}
              - PGID=${PGID}
              - TZ=Europe/Paris
            volumes:
              - /home/media/sonarr/config:/config
              - ${PATH_MEDIA}:/data
        
          radarr:
            image: linuxserver/radarr:latest
            container_name: radarr
            restart: unless-stopped
            ports:
              - 7878:7878
            environment:
              - PUID=${PUID}
              - PGID=${PGID}
              - TZ=Europe/Paris
            volumes:
              - /home/media/radarr/config:/config
              - ${PATH_MEDIA}:/data
        
          lidarr:
            image: linuxserver/lidarr:latest
            container_name: lidarr
            restart: unless-stopped
            ports:
              - 8686:8686
            environment:
              - PUID=${PUID}
              - PGID=${PGID}
              - TZ=Europe/Paris
            volumes:
              - /home/media/lidarr/config:/config
              - ${PATH_MEDIA}:/data
        
          plex:
            image: linuxserver/plex:latest
            container_name: plex
            restart: unless-stopped
            ports:
              - 32400:32400
            environment:
              - VERSION=latest
              - PUID=${PUID}
              - PGID=${PGID}
              - TZ=Europe/Paris
            volumes:
              - /home/media/config:/config
              - ${PATH_MEDIA}:/data
      • Démarrez l’ensemble des containers :

        docker-compose up -d
      • Listez vos containers avec la commande :

        docker ps -a
        CONTAINER ID        IMAGE                           COMMAND             CREATED             STATUS                   PORTS                                  NAMES
        e0fd73c0222b        linuxserver/hydra:latest        "/init"             42 seconds ago      Up 42 seconds            0.0.0.0:5076->5076/tcp               nzbhydra
        4299b6a1375c        linuxserver/nzbget:latest       "/init"             42 seconds ago      Up 42 seconds            0.0.0.0:6789->6789/tcp              nzbget
        73fd8a87a51b        linuxserver/radarr:latest       "/init"             42 seconds ago      Up 42 seconds            0.0.0.0:7878->7878/tcp              radarr
        89b02e056b06        linuxserver/sonarr:latest       "/init"             42 seconds ago      Up 42 seconds            0.0.0.0:8989->8989/tcp              sonarr
      • Revenez sous votre super utilisateur :

        exit

      Si vous êtes en local, les services sont désormais disponibles aux adresses suivantes :

      Les services sont désormais disponibles aux adresses suivantes :

      4.2 – Mise à jour automatique des images Docker

      Pour profiter des dernières fonctionnalités (codecs Plex, URL des trackers de Jackett mises à jour, etc.) et des derniers patchs de sécurité, il est important d’avoir des images Docker à jour.

      Si vous avez plusieurs docker-compose.yml sur votre système, je vous invite à consulter cet article.

      Nous allons automatiser la mise à jour des images via une règle crontab. Celle-ci sera planifiée pour exécution tous les jours à 23h42. Les traces liées à l’exécution de ces commandes seront enregistrées dans un fichier /var/log/docker-updater.log.

      1. Éditez la crontab :

        sudo crontab -e
      2. Ajoutez la ligne suivante :

        42 23 * * * (cd /home/media && /usr/local/bin/docker-compose pull && /usr/local/bin/docker-compose up -d --remove-orphans && /usr/bin/docker image prune -f) > /var/log/docker-updater.log 2>&1
      3. Sauvegardez et quittez.

      5 – (Facultatif) Accès à distance

      • Si vous souhaitez rester full Docker et accéder à vos services via une URL de type https://nzbget.mondomaine.com par exemple, je vous conseille l’utilisation de Traefik :
        Choix 1 : Accès de l’extérieur avec Traefik

      • Si vous possédez déjà un serveur Nginx (ou si vous êtes plus à l’aise avec Nginx) et souhaitez accéder à vos services via une URL de type https://mondomaine.com/nzbget par exemple, je vous conseille l’utilisation de Nginx :
        Choix 2 : Accès de l’extérieur avec Nginx

      6 – Configuration et problèmes rencontrés

      Nous allons maintenant configurer les applications pour qu’elles puissent communiquer entre elles et que chacune d’elles dispose d’un minimum de sécurité :

      Configuration et problèmes rencontrés


      Ubuntu Server 20.04Docker 19.03.8
      Docker Compose 1.26.2
      NZBGet 21.1-r2311
      NZBHydra 2.25.0
      Jackett 0.16.105.0
      Sonarr 2.0.0.5344
      Radarr 0.2.0.1480
      Lidarr 0.7.1.1381
      Plex 1.19.4.2935-79e214ead



5 réponses
  1. Linuxuser
    Linuxuser dit :

    Une mine d’or ton tutoriel, pour quelqu’un qui ne connaissait pas docker (juste de nom), tu m’as vraiment bien avancé et donné l’envie d’aller plus loin avec cette outil :)

    Un petit complément que je préfère perso, pour l’accès à muximux avec un htpasswd :

    • Installez le paquet apache2-utils :
      $ sudo apt-get install apache2-utils
    • Créez le htpasswd pour l’utilisateur media et spécifiez un password :
      $ sudo htpasswd -c /etc/nginx/htpasswd media
    • Ajoutez les lignes suivantes dans le virtual host :
      ...
          location / {
              try_files            $uri $uri/ /index.php?$args;
              auth_basic           "Restricted";
              auth_basic_user_file /etc/nginx/htpasswd;
          }
      ...
      
    • Rechargez la configuration de Nginx :
      $ sudo systemctl reload nginx.service

    Il ne vous reste plus qu’à bloquer tout les ports avec votre firewall préféré, garder le port 80 ou 443 ouvert suivant votre config, ou les 2.

    Encore merci pour le taff.

    Répondre
  2. MissonHxC
    MissonHxC dit :

    Excellent article / tuto !
    Ça faisait longtemps que je voulais soulager mon NAS Synology en déportant NZBGet et Sonarr sur une machine dédiée. J’ai récupéré un NUC au boulot qui ne servait plus et j’ai suivi ton tuto !
    C’est parfait :D

    Une seule petite erreur/oubli/copier-coller foireux :
    Dans la partie « 4.4 – Virtual host », lors de l’ajout des confs SSL au Vhost, les proxy server configurés ont un paramètre différent de ce que tu indiques dans la partie « 3.4 – Reverse proxy avec Nginx ».
    Dans la partie 3.4, c’est un include des proxy params par défaut et dans la partie 4.4 tu include un fichier custom j’imagine :)

    A part ce détail, c’est super.

    Excellent boulot et belle utilisation de Docker.

    Répondre
  3. Fox
    Fox dit :

    Salut et merci pour ce tuto au top !!!

    J’ai cependant un petit problème de droits au niveau des volumes. Je monte dans /media/nas le dossier de mon nas asustor qui contient les vidéos pour que plex (qui est également installé sur la même machine) puisse accéder aux vidéo. Dans la config des volumes docker j’en lui indique le chemin /media/nas/Films pour le dossier /movies de sonarr.

    Mon problème est que lorsque je veux importer mes vidéos dans sonarr il m’indique (comme c’es également indiqué dans le tuto) qu’il doit avoir les droits en écriture (pour l’utilisateur media donc).

    Faut il créer cet utilisateur sur le nas ? Quelles sont les commandes pour ajouter les droits nécessaires sur le dossier ? Surtout que je vais avoir le problème pour déplacer ce qui est téléchargé par nzbget dans ce dossier.

    Bref, help !!!

    Répondre
    • Edouard WATTECAMPS
      Edouard WATTECAMPS dit :

      Bonjour Fox,

      Comment et sous quel utilisateur est monté ton répertoire /media/nas sur ta machine ? Le plus simple dans ton cas est d’attribuer ce répertoire à l’utilisateur media et de monter le répertoire de ton NAS avec l’utilisateur media. Si tu montes manuellement ce répertoire, regarde la commande mount avec notamment l’option -o. Si celui-ci est monté automatiquement dans Ubuntu, renseigne-toi comment configurer le fichier /etc/fstab pour qu’il soit monté avec le bon utilisateur et les bons droits associés.

      W.

      Répondre

Laisser un commentaire

Participez-vous à la discussion?
N'hésitez pas à contribuer!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *