Plex

Ubuntu 16.04 LTS – Installation de Plex avec Nginx et SSL/TLS

Dans ce tutoriel, nous allons détailler la procédure à suivre pour mettre en place Plex, 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 leurs importations, et complète les données relatives à chaque élément, en effectuant une recherche et en intégrant les informations à partir de 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 mobile dédiée, votre SMART TV, etc.) vous permet de visualiser vos médias, modifier la qualité d’une vidéo en fonction de votre connexion internet, ou encore ajouter des sous-titres.

De plus, Plex s’intègre parfaitement avec les principaux services de cloud (Dropbox, Google Drive et Microsoft OneDrive) pour synchroniser vos médias.

Plex sera accessible depuis l’extérieur via Nginx utilisé comme reverse proxy et sera sécurisé grâce à un certificat SSL/TLS délivré par Let’s Encrypt.

1 – Prérequis

  • Vous devez disposer d’Ubuntu 16.04 LTS en version 64 bits.
  • Votre utilisateur doit avoir accès à sudo.
  • Les paquets curl, software-properties-common et python-software-properties doivent être installés sur votre système. Dans le doute, tapez la commande suivante :

2 – Installation de Plex Media Server

  • Téléchargez la dernière version de Plex Media Server sur https://plex.tv/downloads
  • Exécutez la commande suivante en remplaçant plexmediaserver_xxx.deb par le nom du paquet que vous venez de télécharger :
    Plex sera lancé par défaut sous le nouvel utilisateur plex.

3 – Reverse proxy avec Nginx

Si vous installez Plex Media Server sur votre propre machine, vous pouvez accéder à Plex directement via http://localhost:32400. En revanche si vous installez Plex sur un serveur distant, vous ne pourrez pas accéder à l’interface web via cette URL. Un reverse proxy (proxy inversé) est alors nécessaire.

Le reverse proxy remplit le rôle de passerelle entre l’extérieur (Internet) et le réseau local de votre serveur. Il sera ainsi possible d’accéder à l’interface web de Plex grâce à une URL de type http://plex.mondomaine.com/.

N’oubliez pas de modifier les règles DNS dans l’interface administrateur du fournisseur de votre nom de domaine pour pointer vers l’IP de votre serveur.

Notre choix se portera sur le serveur HTTP Nginx pour une question de performances. Nginx est reconnu pour ses hautes performances, sa stabilité, son ensemble de fonctionnalités, sa configuration simple ainsi que sa faible consommation en ressources.

  • Installez le paquet nginx :
  • Modifiez les directives suivantes du fichier de configuration Nginx /etc/nginx/nginx.conf :

    • worker_processes 8; : l’un des paramètres à ajuster immédiatement est le worker_processes. Pour profiter pleinement de la puissance de votre serveur, il est recommandé de mettre autant de worker_processes que de cœurs disponibles sur votre serveur. Pour connaître le nombre de cœurs sur votre serveur, il suffit de lancer la commande :
    • server_tokens off; : pour des raisons de sécurité, il est recommandé de désactiver l’envoi d’informations telles que le numéro de version de votre Nginx. Pour cela, décommentez cette directive dans le bloc http.
  • Créez le virtual host /etc/nginx/sites-available/plex et modifiez la ligne en surbrillance en fonction de votre configuration :
  • Activez le virtual host :
  • Rechargez la configuration Nginx :
    Plex est désormais accessible via http://plex.mondomaine.com.

4 – Sécuriser Plex avec SSL/TLS

Let’s Encrypt est une autorité de certification libre, automatisée et ouverte. Cette autorité fournit des certificats gratuits X.509 pour le protocole cryptographique SSL/TLS au moyen d’un processus automatisé destiné à se passer du processus complexe actuel impliquant la création manuelle, la validation, la signature, l’installation et le renouvellement des certificats pour la sécurisation des sites internet. En juillet 2017, Let’s Encrypt avait délivré plus de 100 millions de certificats.

4.1 – Installation

Installez le paquet certbot :

4.2 – Génération des certificats

Let’s Encrypt permet de générer de différentes façons plus ou moins automatisées un certificat. La méthode standalone permet de générer simplement un certificat. En revanche, celle-ci demande d’arrêter le serveur Nginx et ceci est valable à chaque renouvellement dudit certificat. Il existe aussi des plugins apache et nginx entièrement automatisés. Ces plugins mettent à jour automatiquement la configuration des virtual hosts mais le plugin nginx est encore expérimental. Dans cet article, nous recommandons d’utiliser le plugin webroot qui permet de générer et renouveler son certificat sans interrompre le serveur Nginx.

Le plugin webroot crée un fichier temporaire .well-known/acme-challenge dans un dossier spécifique accessible à Nginx, celui-ci permettra aux serveurs de Let’s Encrypt d’appeler ce fichier temporaire et ainsi de valider votre certificat.

  • Créez le répertoire destiné au fichier temporaire de Let’s Encrypt et assignez-le à l’utilisateur www-data pour que Nginx puisse y accéder :
  • Ajoutez les lignes suivantes dans votre virtual host pour rediriger Let’s Encrypt vers le dossier local précédemment créé :
  • Recharchez votre configuration Nginx :
  • Générez votre certificat en remplaçant [email protected] et plex.mondomaine.com par vos informations personnelles :

    Vous obtiendrez 4 fichiers dans le répertoire /etc/letsencrypt/live/plex.mondomaine.com :

    • cert.pem : le certificat de votre domaine plex.mondomaine.com
    • chain.pem : le certificat Let’s Encrypt
    • fullchain.pem : les certificats cert.pem et chain.pem combinés
    • privkey.pem : la clé privée du certificat.
  • SSL/TLS utilise un système de chiffrement asymétriques (comme RSA ou Diffie-Hellman) afin de sécuriser les échanges de vos flux. Par défaut, Nginx utilise une clé de 1048 bits. En augmentant la longueur de la clé à 4096 bits, vous augmenterez ainsi la sécurité de votre protocole SSL/TLS. Générez une nouvelle clé Diffie-Hellman (DH) de 4096 bits et attribuez-lui un minimum de permissions :

4.3 – Renouvellement automatique du certificat

Les certificats délivrés par Let’s Encrypt sont valides 90 jours. L’outil certbot fournit une option renew permettant de renouveler l’ensemble des certificats présents sur votre serveur si et seulement si ceux-ci expirent dans moins de 30 jours.

Nous allons créer une règle crontab où le script de renouvellement sera planifié pour exécution tous les lundis à 23h42. Les traces liées à l’exécution du script seront enregistrées dans un fichier /var/log/le-renew.log.

  • Éditez la crontab :
  • Ajoutez la ligne suivante :
  • Sauvegardez et quittez.

4.4 – Virtual host

  • Modifiez votre virtual host et les lignes en surbrillance en fonction de votre configuration :
  • Rechargez votre configuration Nginx :

5 – HTTP2

Je vous conseille vivement d’activer le nouveau protocole HTTP2 qui augmentera la sécurité et la rapidité de votre Plex.

HTTP2 permet notamment :

  • la compression des headers des requêtes et des réponses réduisant la bande passante lorsque les headers (comme les cookies) sont similaires.
  • le multiplexage des requêtes au serveur consistant à faire passer de multiples informations via un seul tuyau de transmission. Ainsi, on économise les multiples connexions entre le client et le serveur. Les requêtes, quant à elles, sont effectuées simultanément par le navigateur. Les requêtes ne se suivent donc plus les unes derrière les autres (HTTP1) et les plus prioritaires (CSS par exemple) ne sont plus bloquées par les moins prioritaires (images par exemple).
  • le push des ressources du serveur au navigateur. Désormais, le serveur pourra envoyer l’ensemble des ressources référencées dans une même page (CSS, JS…), avant même que le navigateur n’ait analysé celle-ci.

L’activation du protocole HTTP2 est très simple et consiste en l’ajout de la directive http2 dans votre virtual host (/etc/nginx/sites-available/plex) :

Une fois la modification effectuée, n’oubliez pas de recharger votre configuration Nginx :

6 – Sous-titres

Plex dispose d’un plugin intégré OpenSubtitles.org qui a pour fonction de récupérer les sous-titres sur une unique source : le site du même nom. Ce plugin fonctionne plutôt mal, il récupère (quand il les trouve) la plupart du temps des sous-titres non adaptés et non synchronisés à votre média.

Sub-Zero est bien plus performant car il recherche les sous-titres à partir de 8 sources différentes et télécharge le sous-titre ayant le score le plus élevé et ainsi obtenir le sous-titre adéquat. Ce score est déterminé en fonction des éléments que compose le nom de votre media (Film.2018.720p.BluRay-TEAM).

  • Arrêtez Plex :
  • Copiez le lien de l’archive zip (bundle) de la dernière release sur le GitHub de Sub-Zero : https://github.com/pannal/Sub-Zero.bundle/releases/latest
  • Placez-vous dans le répertoire de plugins de Plex :
  • Téléchargez Sub-Zero en replaçant le lien copié précédemment :
  • Décompressez l’archive :
  • Attribuez les fichiers extraits à l’utilisateur et au groupe plex :
  • Supprimez l’archive :
  • Démarrez Plex :
  • Activez et placez Sub-Zero par ordre de préférence dans Plex dans Settings → Server → Agents → Movies → Plex Movie (l’agent Local Media Assets étant les informations contenues localement dans un média) :


  • Réiterez l’étape précédente dans :
    • Settings → Server → Agents → Movies → The Movie Database
    • Settings → Server → Agents → Shows → TheTVDB
    • Settings → Server → Agents → Shows → The Movie Database.

7 – Problèmes rencontrés

Si le serveur n’est pas trouvé et que vous obtenez le message « Recherche de serveurs… », il est nécessaire d’ajouter une première fois le serveur en local.

  • Réalisez un tunnel SSH en remplaçant user par votre utilisateur et IP_SERVER par l’IP de votre serveur dédié :
  • Rendez-vous dans votre navigateur à l’URL suivante http://localhost:32400/web et ajoutez le serveur via l’interface web de Plex.


Ubuntu 16.04.3 Server LTS (64bits)Nginx 1.10.0
Plex 1.9.4.4325-1bf240a65

Auteur
AuteurEdouard WATTECAMPS

0 réponses

Répondre

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

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