Synology [Tuto] Installation de Plex en Docker sur un NAS Synology + Transcodage Matériel / Hardware (HW)

EVO

Administreur
Membre du personnel
25 Novembre 2019
8 160
1 563
278
/var/run/docker.sock
Bonjour,
Un nouveau petit tuto pour vous apprendre a installer Plex en Docker sur votre NAS Synology, mais également, a activer le transcodage matériel* ou hardware ( HW ).

* Le transcodage hardware nécessite un Plex Pass et un NAS disposant d'un CPU comprenant un GPU.

PDErw8Z.png


Pré-Requis :
Avoir un NAS Synology compatible avec Docker.
[Tuto] Connaitre le PUID / PGID d'un utilisateur.


Sommaire :
1/ Création du dossier d'installation
2/ Création d'un utilisateur "plex"
3/ Récupération du PUID / PGID
Méthode 1 : "classique" via Docker DSM :
___1/ Télécharger le conteneur
___2/ Paramétrage du conteneur
___3/ Accès a plex
___4/ Activer le transcodage hardware (HW)
_____A/ Modification du .json
_____B/ Activation du transcodage sur Plex
_____C/ Contrôler que le transcodage hardware fonctionne
Méthode 2 : via Portainer
Méthode 3 : via Docker-compose
Annexe 1 - Application des permissions sur /dev/dri


1/ Création du dossier d'installation
Plex à besoin d'un dossier sur le NAS, ou il va pouvoir s'installer, enregistrer sa database, les métadonnées, ... et un autre pour le transcodage.
Dans mon cas, j'ai choisi de le mettre dans un dossier partagé "docker", j'y est donc créé un dossier "plex" et dans ce dossier un dossier "config" et un dossier "transcode"
Le chemin d’accès a ces dossiers, pour ce tuto, sera donc /docker/plex/config et /docker/plex/transcode, ils seront à modifier suivant vos choix.

2/ Création d'un utilisateur "plex"
Depuis l'interface DSM, nous allons dans Panneau de configuration > Utilisateur créer un utilisateur pour plex, ici, je vais l'appeler "plex".
Cet utilisateur devra avoir les droits en lecture/écriture sur le dossier docker/plex et ce qu'il contient, et également sur vos médias ( afin que Plex puisse les indexer ).

3/ Récupération du PUID / PGID
Il va falloir associer notre conteneur à l'utilisateur "plex", pour cela il faut connaitre le PUID et le PGID de cette utilisateur, pour cela, je vous laisse utiliser ce tuto : [Tuto] Connaitre le PUID / PGID d'un utilisateur.
On notera le PUID/PGID de l'utilisateur choisi, on va en avoir besoin juste après !

Méthode 1 : "classique" via Docker DSM :
1/ Télécharger le conteneur
Nous allons télécharger le conteneur linuxserver/plex, pour cela nous allons ouvrir docker et se rendre dans Registre et rechercher "plex".
e22njPz.png

Une fois l'image linuxserver/plex, on clique dessus, puis sur Télécharger, on sélectionnera "latest".

2/ Paramétrage du conteneur
Une fois l'image fini de télécharger, nous allons dans Image, nous sélectionnons linuxserver/plex:latest et on clique sur Lancer.
Cette fenêtre s'affiche :
z46iDEb.png

Il est possible de modifier, le nom "linuxserver-plex1" qui est un nom par défaut, se nom sera le nom de votre conteneur t'elle qu'il apparaitra dans le liste de conteneur de Docker. On peut le nommer par exemple "Plex" tout simplement.
Je vous conseil d'activer la limitation des ressources :
pozfdO9.png

Priorité Moyen, par defaut c'est tres bien.
Pour la RAM tout dépend de la quantité dispo sur votre machine, mais 2048Mo et a mon sens un minimum pour Plex.

Ensuite, on clique sur Paramêtres Avancés, dans Volumes :
Pour le fonctionnement de plex, 2 dossiers sont obligatoires :
/config et / transcode
Il vous faut les ajouter dans les volumes comme ceci :
SMVpbRq.png

Dans l'onglet "Volume", nous allons cliquer sur "Ajouter un dossier" et choisir le dossier "config" que nous avons créé précédemment pour l'installation de l'image. Le chemin de ce dossier sera /config. Idem pour /transcode.
Afin que plex accede a vos média, vous allez devoir lui donner acces, je vous est fait un exemple avec le dossier /music présent sur mon nas.
J'ai placé /music dans /data/music, a vous de faire la suite si par exemple, vous avez un dossier films, vous le placé de la meme façon, cliquer sur Ajouter un dossier, selectionner votre dossier /films, et dans la partie Chemins d'accès, indiquer : /data/films, ...

Dans l'onglet Réseau, nous allons cocher "Utiliser le même réseau que Docker Host"

Dans l'onglet Environnement, nous allons rajouter 3 variables :
VERSION, ici on choisi latest
TZ, c'est le fuseau horaire, j'ai choisi Europe/Paris.
PGID, Group id ( voir point 3/ du tuto ) ( dans mon exemple c'est 100 )
PUID, User id ( voir point 3/ du tuto ) ( dans mon exemple c'est 1030 )
E14qiGO.png


Maintenant, on clique sur "Appliquer", puis "Suivant", et on arrive a la page suivante :
iPVO3jb.png


On clique sur "Appliquer" et le conteneur se créer, et démarre.
Dans l'onglet "Conteneur", on peu vérifier que notre conteneur est bien démarré !

3/ Accès a plex
Dans votre navigateur, il vous suffit maintenant de taper l'adresse ip de votre NAS suivi du port 32400 et /web pour se connecter a l'interface Web de Plex.
Exemple : Si l'ip de votre NAS est 192.168.0.20 alors l'adresse est http://192.168.0.20:32400/web
Bien sur, si le pare-feu de votre NAS est actif, ce port devra être autorisé dans celui-ci !

A la 1ere connexion, il vous faudra réclamer le serveur plex avec votre compte Plex.tv. Cette étape ne peut être faite que en locale, via une machine sous le meme adresse IP que le serveur plex ( donc pas via un VPN, ... ) en cas de réclamation via un VPN, il vous faudra créer un tunnel SSH entre vous et le NAS.

4/ Activer le transcodage hardware (HW)
Attention, le NAS doit être compatible afin de permettre le transcodage hardware, de plus il faut disposer d'un Plex Pass.

Note : Pour l'activation du transcodage matériel, voir Annexe 1 - Application des permissions sur /dev/dri avant de faire les étapes A, B et C suivantes.

A/ Modification du .json
Pour éviter tout soucis d'encodage, je vous conseil de le faire directement depuis DSM, à l'aide du paquets : Editeur de texte
Il vous faut donc au préalable, aller dans Centre des paquets, et installer ce paquets si vous ne l'avez pas encore !
HfLIgs1.png


Ensuite, nous allons dans Docker, Conteneurs et on s'il est en route, on arrete le conteneur Plex
Puis, nous allons Exporter la configuration dans un dossier de DSM :
zOsJqf3.png


Ici je l'exporte dans /docker/Plex
zeNrPdd.png


Maintenant, via File Station, je vais dans le dossier comprenant mon fichier exporté, chez moi /docker/Plex, et dessus je clique droit pour l'ouvrir avec l'éditeur de texte :
CS5ghWZ.png


Le début du fichier va ressembler à ceci :
WZdR9UT.png


ll vous faudra remplacer ceci :
Code:
"devices" : null,

Par :
Code:
"devices" : [
      {
         "CgroupPermissions" : "rwm",
         "PathInContainer" : "/dev/dri",
         "PathOnHost" : "/dev/dri"
      }
   ],

Voici ce que cela devrait vous donner :
PfpkKCE.png


Vous pouvez maintenant enregistrer le fichier :
gh6tG9e.png


Maintenant que notre fichier est prêt, nous allons l'exporter dans Docker, afin de remplacer notre conteneur Plex.
Dans l'application Docker > Conteneur, nous allons supprimer le conteneur Plex actuel :
y7N6tsX.png

Cette étape supprime le conteneur et sa configuration* uniquement, mais ni plex ou vos médias.

*configuration qui est contenu dans le fichier .json précédemment modifié !

Une fois, fait, nous allons Importer notre nouveau fichier .json de configuration de plex :
BXhSkPW.png


On le sélectionne, et on valide, le conteneur va alors se créer :
yjjhYD8.png


Maintenant, nous démarrons notre conteneur Plex grâce au petit bouton en bout de ligne du conteneur plex :
6bjrmkk.png


B/ Activation du transcodage sur Plex
Depuis l'interface de Plex : Paramètres > Transcodeur
Le dossier tampon pour le transcodage doit être renseigné :
IZd9Asw.png

Si vous avez suivit le tuto pour l'installation, le dossier est /transcode, si ce n'est pas le cas, le dossier peut être différent suivant se que vous avez renseigné a l'installation de Plex.

Ensuite, juste en dessous, il faut coché les deux cases suivante :
UXYCkPj.png


Puis vous enregistrez les modifications :
vqPYK4i.png


C/ Controler que le transcodage hardware fonctionne
Afin de contrôler que le transcodage fonctionne, il vous suffit de lancer, une video, et d'abaisser la qualité afin de forcer plex a transcoder.
Pendant la lecture, rendez-vous dans le Tableau de Bord :
8RatFCH.png

Ici le (hw) nous confirme le fonctionnement du transcodage hardware !

Méthode 2 : via Portainer : ( Merci @MilesTEG1 )
Après avoir fait les étapes : 1/ Création du dossier d'installation, 2/ Création d'un utilisateur "plex" et 3/ Récupération du PUID / PGID

Accèder a Portainer, et aller dans Stack :
SppGNaj.png


Donner un nom a votre stack, par exemple "plex", et en dessous, coller le compose ci dessous :
Code:
version: "2.4"
services:
  linuxserver_plex:
    image: ghcr.io/linuxserver/plex:amd64-latest
    container_name: linuxserver_plex
    network_mode: host
    environment:
      - PUID=1030   # Utiliser la commande (en SSH) : id NOM_UTILISATEUR
      - PGID=100
      - TZ=Europe/Paris
      - UMASK=022 #optional
      - VERSION=docker
      # Si plex est en mode HOST, la ligne suivante n'est pas nécessaire.
      #- PLEX_CLAIM=BLABLA #obtain claim token https://plex.tv/claim expire within 4 minutes.
    
    # ###############
    # Le label ci-dessous permet à Watchtower de faire les mises à jour automatiquement
    # Cela peut-être supprimé si Watchtower n'est pas utilisé.
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    # ###############

    volumes:
      - "/volume1/docker/plex/config:/config"
      - "/volume1/docker/plex/transcode:/transcode" #optional
      - "/volume2/medias_1:/data/tvshows:ro"
      - "/volume2/medias_2:/data/movies:ro"
      - "/volume2/medias_3:/data/videos:ro"
    
    # Cette section permet de ne pas avoir besoin d'exporter puis éditer le fichier de configuration JSON du conteneur
    # Il faut quand même faire le script de modification de permissions.
    devices:
      - /dev/dri:/dev/dri #optional
    
    restart: unless-stopped
    
    # Les valeurs ci-dessous sont à adapter à la quantité de RAM de votre NAS.
    # Sur mon 920+ j'ai 12Go de RAM.
    mem_limit: 4096m
    mem_reservation: 2048m

Au besoin, le compose est aussi téléchargeable ici : Voir la pièce jointe docker-compose-plex.7z

Dans le compose, certains paramètres sont a modifier suivant votre configuration :
/volume1/docker/plex/config par le chemin vers votre dossier /plex/config.*
/volume1/docker/plex/transcode:/transcode par le chemin vers votre dossier /plex/transcode.*

PGID, Group id**( dans mon exemple c'est 100 )
PUID, User id** ( dans mon exemple c'est 1030 )

/volume2/medias_1, /volume2/medias_2, /volume2/medias_3 correspondent a vos dossiers de médias. L'option :ro signifie Read Only, si vous laissez cette option alors il ne sera pas possible de supprimer les médias depuis plex.

Si votre NAS n'est pas capable de transcoder matériellement, il faudra supprimer ces deux lignes :
Code:
    devices:
      - /dev/dri:/dev/dri #optional

mem_limit: 4096m - 4096 est la valeur maximal de ram en mégaoctet que plex pourra utiliser.
mem_reservation: 2048m - 2048 est la valeur de ram en mégaoctet réservé par le systeme pour plex.

* Point 1/ du tuto
** Point 3/ du tuto

Ensuite, pour créer le conteneur on clique sur "Deploy the stack" :
jrel076.png


Note : Pour l'activation du transcodage matériel, voir Annexe 1 - Application des permissions sur /dev/dri

Méthode 3 : via Docker-compose :
Nous allons maintenant créer un fichier "docker-compose.yml" avec les paramètres du conteneur.
Celui-ci est a placer dans /volume1/docker/plex

Code:
version: "2.4"
services:
  linuxserver_plex:
    image: ghcr.io/linuxserver/plex:amd64-latest
    container_name: linuxserver_plex
    network_mode: host
    environment:
      - PUID=1030   # Utiliser la commande (en SSH) : id NOM_UTILISATEUR
      - PGID=100
      - TZ=Europe/Paris
      - UMASK=022 #optional
      - VERSION=docker
      # Si plex est en mode HOST, la ligne suivante n'est pas nécessaire.
      #- PLEX_CLAIM=BLABLA #obtain claim token https://plex.tv/claim expire within 4 minutes.
    
    # ###############
    # Le label ci-dessous permet à Watchtower de faire les mises à jour automatiquement
    # Cela peut-être supprimé si Watchtower n'est pas utilisé.
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    # ###############

    volumes:
      - "/volume1/docker/plex/config:/config"
      - "/volume1/docker/plex/transcode:/transcode" #optional
      - "/volume2/medias_1:/data/tvshows:ro"
      - "/volume2/medias_2:/data/movies:ro"
      - "/volume2/medias_3:/data/videos:ro"
    
    # Cette section permet de ne pas avoir besoin d'exporter puis éditer le fichier de configuration JSON du conteneur
    # Il faut quand même faire le script de modification de permissions.
    devices:
      - /dev/dri:/dev/dri #optional
    
    restart: unless-stopped
    
    # Les valeurs ci-dessous sont à adapter à la quantité de RAM de votre NAS.
    # Sur mon 920+ j'ai 12Go de RAM.
    mem_limit: 4096m
    mem_reservation: 2048m

Au besoin, le compose est aussi téléchargeable ici :

Dans le compose, certains paramètres sont a modifier suivant votre configuration :
/volume1/docker/plex/config par le chemin vers votre dossier /plex/config.*
/volume1/docker/plex/transcode:/transcode par le chemin vers votre dossier /plex/transcode.*

PGID, Group id**( dans mon exemple c'est 100 )
PUID, User id** ( dans mon exemple c'est 1030 )

/volume2/medias_1, /volume2/medias_2, /volume2/medias_3 correspondent a vos dossiers de médias. L'option :ro signifie Read Only, si vous laissez cette option alors il ne sera pas possible de supprimer les médias depuis plex.

Si votre NAS n'est pas capable de transcoder matériellement, il faudra supprimer ces deux lignes :
Code:
    devices:
      - /dev/dri:/dev/dri #optional

mem_limit: 4096m - 4096 est la valeur maximal de ram en mégaoctet que plex pourra utiliser.
mem_reservation: 2048m - 2048 est la valeur de ram en mégaoctet réservé par le systeme pour plex.

* Point 1/ du tuto
** Point 3/ du tuto

Une fois placer ce fichier docker-compose.yml dans votre dossier /volume1/docker/plex

En SSH, rendez-vous dans le dossier en question :

Code:
cd /volume1/docker/plex

Ensuite, afin "d’exécuter" mon fichier docker-compose.yml, je tape en ssh :

Code:
sudo docker-compose up -d

La création du conteneur se fait, il devient visible dans l'appli "Docker" de DSM.

Note : Pour l'activation du transcodage matériel, voir Annexe 1 - Application des permissions sur /dev/dri

Annexe 1 - Application des permissions sur /dev/dri
Dans Panneau de configuration > Planifficateur de tâches, nous allons créer une nouvelle taches ( Taches Planifié > Script défini par l'utilisateur )
nmt5rbN.png


Je nomme la tache HW Plex, l'utilisateur doit rester "root".
y62Fmjq.png


Dans Paramètres de la tache, je rentre le script suivant :
Code:
#!/bin/bash
#Startup Script
#Access for HW Decoder Plex
chmod 666 /dev/dri/renderD128
exit
On peut, si on le souhaite, être averti par mail du bon déroulement de la tache, ou non.
3o7tb18.png


Maintenant, on clique sur OK, pour valider la création de la tâche.
Notre tache apparait dans la liste de tâches, on la sélectionne, et on l'Execute une 1ere fois !
CjdAbjh.png



2021-04-02 : MAJ du tuto, UMASK_SET ne doit plus être utilisé, UMASK le remplace
2021-01-24 - Correction d'une erreur sur le screen de configuration des variables d'environnement ( methode 1 )
2021-01-04 - Ajout d'une méthode Portainer suite au message de MilesTEG1
 
  • J'aime
Réactions: JusQuoBou et Garci80
Bonjour,
Merci pour ce tuto d'installation via Docker.
Cependant, quel est l'interet d'installer Plex en Docker alors qu'on peut l'installer très facilement via le centre de paquet?
 
Salut,
L'installation Docker apporte une couche de sécurité.
Elle simplifie aussi la gestion ( tous les conteneurs au memes endroit ).
L'installation est plus "propre" elle ne pollue pas le NAS.
Les mise à jours de Plex sont simplifié ( un redémarrage suffit pour que la maj soit appliqué )
...
 
J'utilise Plex via le centre de paquet synology, les mises à jour se font sans redémarrage, sans intervention, en automatique avec un script qui scanne quotidiennement les mises à jour de PMS.
Tout est dans un dossier /Plex/
La sécurité se fait via l'option réseau avec un certificat personnalisé PKCS #12 ( un pfx issu de let's encrypt). renouvellement automatique également.
J'utilise Tautulli par contre via Docker et je pense installer Ombi prochainement via Docker également. Pour ces deux appli, Docker est plus simple, et ne sont pas disponibles dans le centre de paquet.
Je n'ai pas trouvé de sujet sur Ombi sur le forum, je ne sais pas si il y en a un.
 
Invité a dit:
J'utilise Plex via le centre de paquet synology, les mises à jour se font sans redémarrage, sans intervention, en automatique avec un script qui scanne quotidiennement les mises à jour de PMS.
Mais cela te demande un script en +, donc au final cela reviens un peu au meme que docker. De plus pour Docker, cela nécessite un redémarrage, chose que je préfère a une installation automatique. Mais c'est avis plutôt personnel :)

Invité a dit:
Tout est dans un dossier /Plex/
Malheuresement, non. Plex va par exemple, s'installer dans le répertoire /etc ... et laisser des traces dans les fichiers système de l'os. D'ailleurs Docker n'est pas sans défaut de se coté non plus. C'est image peuveut avoir tendance a polluer le volume mais le nettoyage est plutot facile meme s'il demande un acces SSH, mais est loin d'etre "infaisaible" comme le serrait le nettoyage complet d'une installation en "dur".

Invité a dit:
La sécurité se fait via l'option réseau avec un certificat personnalisé PKCS #12 ( un pfx issu de let's encrypt). renouvellement automatique également.
Quand je parle sécurité, je parle principalement de fait que Plex soit "en prison" dans son conteneur, il n'a donc " en théorie" uniquement accès a se qu'on veut bien lui donner accès.
 
Superbe tuto, bien détaillé cela fait plaisir j'y suis presque, mais je ne peux pas lancer le container a la fin car je n'ai pas de dossier dri/ dans dev
et je n'arrive pas a le crée a tu un conseil
merci encore
 
Salut,
Ton NAS est-il capable de transcoder en hard ? Quel est son modèle ?
Si ton NAS est bien capable, et qu'il ne possède pas /dri tu devrait installer et lancer le paquets Video Station ( afin de le forcer a créer le dossier /dri ) ensuite il n'a plus besoin d'etre lancer.
 
EVOTk a dit:
Salut,
Ton NAS est-il capable de transcoder en hard ? Quel est son modèle ?
Si ton NAS est bien capable, et qu'il ne possède pas /dri tu devrait installer et lancer le paquets Video Station ( afin de le forcer a créer le dossier /dri ) ensuite il n'a plus besoin d'etre lancer.
je l'ai crée c'est bon
Je faisait un test sur un xpenology, il y a quelque chose dans ce répertoire normalement?
 
Effectivement, oui il y a les codec.
A savoir que sur Xpenology, le transcodage hard ne marche pas par défaut.
 
EVOTk a dit:
Effectivement, oui il y a les codec.
A savoir que sur Xpenology, le transcodage hard ne marche pas par défaut.

tu pourrais faire un package et les uploader voir cela fonctionne?
 
Malheureusement, c'est pas si simple. je te conseil de te tourner vers le forum Xpenology si tu souhaite plus d'info.
 
Bonjour,

Merci pour ce tuto, je viens de faire l'installation et il fini de synchroniser.
J'ai migrer de l'installation par paquet a celle de docker plus par geekisitude que par réel intérêt :)

Mais il me reste une question :
Pour les mises à jours de plex, si j'ai bien compris il suffit de redémarrer le nas ?

Merci d'avance pour la réponse.
 
Salut à tous,
Je viens ajouter ma petite contribution :)
EVOTk tu pourrais ajouter une section dans le tuto pour faire le conteneur avec un docker-compose (ou aussi Portainer car ça fonctionne bien avec ^^)
Le fichier docker-compose permet de ne pas avoir besoin de modifier le fichier json paragraphe B/ du tuto :) ça évite donc des étapes. Mais ça nécessite soit de passer par la CLI soit par Portainer).

Le fichier docker-compose.yml : (fichier 7zippé Voir la pièce jointe docker-compose-plex.7z)
Note : il faudra peut-être renommer le fichier en docker-compose.yml si vous passer par la CLI.
Note 2 : j'ai mis l'image pour mon 920+ (amd64-latest), il faudra probablement changer l'image pour votre architecture.
Code:
---
version: "2.4"
services:
  linuxserver_plex:
    image: ghcr.io/linuxserver/plex:amd64-latest
    container_name: linuxserver_plex
    network_mode: host
    environment:
      - PUID=1111   # Utiliser la commande (en SSH) : id NOM_UTILISATEUR
      - PGID=100
      - TZ=Europe/Paris
      - UMASK_SET=022 #optional
      - VERSION=docker
      # Si plex est en mode HOST, la ligne suivante n'est pas nécessaire.
      #- PLEX_CLAIM=BLABLA #obtain claim token https://plex.tv/claim expire within 4 minutes.
    
    # ###############
    # Le label ci-dessous permet à Watchtower de faire les mises à jour automatiquement
    # Cela peut-être supprimé si Watchtower n'est pas utilisé.
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    # ###############

    volumes:
      - "/volume1/docker/plex/config:/config"
      - "/volume1/docker/plex/transcode:/transcode" #optional
      - "/volume2/medias_1:/data/tvshows:ro"
      - "/volume2/medias_2:/data/movies:ro"
      - "/volume2/medias_3:/data/videos:ro"
    
    # Cette section permet de ne pas avoir besoin d'exporter puis éditer le fichier de configuration JSON du conteneur
    # Il faut quand même faire le script de modification de permissions.
    devices:
      - /dev/dri:/dev/dri #optional
    
    restart: unless-stopped
    
    # Les valeurs ci-dessous sont à adapter à la quantité de RAM de votre NAS.
    # Sur mon 920+ j'ai 12Go de RAM.
    mem_limit: 4096m
    mem_reservation: 2048m


Voilà voilà ^^

PS : je vais poster la même démarche sur le tuto Tautulli :geek:
++
 
Salut,
Merci pour ta contribution, j'ai rajouté au tuto une méthode Portainer. Quand j'aurais un peu de temps, je ferait la suite ( et Tautulli avec ;) )
 
EVOTk a dit:
Salut,
Merci pour ta contribution, j'ai rajouté au tuto une méthode Portainer. Quand j'aurais un peu de temps, je ferait la suite ( et Tautulli avec ;) )
Cool :)
Précision : c'est aussi valable pour l'utilisation de docker-compose en ligne de commande ;) (pareil pour Tautulli)