Plex c'est quoi ?

Plex est un logiciel client-serveur de streaming multimédia, qui permet de diffuser aussi bien des vidéos, des photos que de la musique.Il se découpe en 2 parties disticntes :

  • Le serveur Plex, qui peut être installé sous divers OS ( Windows, Mac, Linux, FreeBSD ). C'est lui qui contient et organise les fichiers et qui va gérer les connexions des clients.
  • Le client qui reçoit le contenu du serveur : Il est possible de se connecter depuis un navigateur web. Ou d'installer une application disponible sous de nombreux systèmes d'exploitation. On trouve également une application mobile et smart TV.

Je ne vais pas lancer de débat sur le piratage informatique que je ne cautionne pas.😽

Certes Plex est surtout connu dans le cas d'utilisation de SeedBox mais je trouve dommage de le limiter uniquement à ça. Il fait le boulot pour le partage de photos et videos et permet de ne pas partager ses données personnelles une nouvelle fois avec les GAFA...

J'utilise plex pour des raisons bien précises, stocker et diffuser mes photos et vidéos de vacances bien au chaud sur un serveur. Et sans les stocker de façon permanente sur un support externe ( On me volera plus facilement mon téléphone portable que hacker/voler mon serveur ... )

Installation de Docker sur mon dédié

Pour ceux qui ont suivi le blog, je reprends globalement les choses déjà vues sur l'article dédié à l'installation de docker sur un dédié Kimsufi.

⚠️ Toutes les commandes qui suivent son réalisées en root ⚠️

Installation Docker

sudo apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common

On récupère la clé du dépôt : curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Et on ajoute le dépôt Docker :

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable" 

Ensuite on installe Docker : sudo apt update && sudo apt-get install docker-ce docker-ce-cli containerd.io

Installation de docker-compose

Tout comme pour l'installation de Docker, vous pouvez en apprendre plus sur la commande docker-compose dans cet article.

On récupère l'outil : sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

On le rend exécutable : chmod +x /usr/local/bin/docker-compose

Et c'est fini !

Création de notre stack

Nous allons créer une stack d'applications avec docker-compose qui comprendra les éléments suivants :

  • Traefik qui va nous délivrer le certificat SSL et gérer le trafic entrant.
  • Plex serveur pour le streaming multimédia.

Je place toujours mes fichiers docker-compose dans des dossiers séparés : mkdir ~/plex && cd ~/plex

Ensuite on édite le fichier docker-compose.yml :

version: '3.7'
services:
  traefik:
    image: traefik:2.1
    container_name: traefik
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.yml:/etc/traefik/traefik.yml:ro
      - ./custom/:/etc/traefik/custom/:ro
      - traefik_ssl:/letsencrypt
    networks:
      - traefik

  plex:
    container_name: plex
    image: plexinc/pms-docker
    restart: always
    hostname: test.domain.com
    environment:
      - TZ='Europe/Paris'
      - PLEX_CLAIM='claim-XXXXXXXXXXXXX'
      - ADVERTISE_IP=https://test.domain.com
    ports:
      - 32400:32400/tcp
      - 3005:3005/tcp
      - 8324:8324/tcp
      - 32469:32469/tcp
      - 1900:1900/udp
      - 32410:32410/udp
      - 32412:32412/udp
      - 32413:32413/udp
      - 32414:32414/udp
    volumes:
      - plex_config:/config
      - plex_transcode:/transcode
      - plex_data:/data
    labels:
      - "traefik.enable=true"
      - "traefik.http.services.plex.loadbalancer.server.port=32400"
      - "traefik.http.routers.plex.rule=Host(`test.domain.com`)"
      - "traefik.http.routers.plex.middlewares=SecHeader@file"
      - "traefik.http.routers.plex-https.rule=Host(`test.domain.com`)"
      - "traefik.http.routers.plex-https.entrypoints=https"
      - "traefik.http.routers.plex-https.tls=true"
      - "traefik.http.routers.plex-https.tls.certresolver=myhttpchallenge"
      - "traefik.http.routers.plex-https.middlewares=SecHeader@file"
    networks:
      - traefik

volumes:
  plex_config:
    name: plex_config

  plex_transcode:
    name: plex_transcode

  plex_data:
    name: plex_data

  traefik_ssl:
    name: traefik_ssl

networks:
  traefik:
    name: traefik

Pour la création du certificat, ainsi que l'accès à Plex. Il va falloir créer un enregistrement A dans votre DNS qui pointe vers l'IP de votre serveur dédié. Ce nom DNS devra être renseigné dans les variables suivantes :

Dans la déclaration du serveur plex :

  • hostname
  • ADVERTISE_IP

Dans la déclaration du service traefik à deux reprises :

  • Host()

Il faut également obtenir votre token claim, identifiez-vous à l'adresse suivante pour l'obtenir : https://plex.tv/claim

Ensuite on édite le fichier traefik.yml:

entryPoints:
    http:
      address: :80

    https:
      address: :443

providers:
  docker:
    exposedByDefault: false

  file:
    directory: /etc/traefik/custom/
    watch: true

certificatesResolvers:
  myhttpchallenge:
    acme:
      email: "test@test.com"
      storage: "/letsencrypt/acme.json"
      httpChallenge:
        entryPoint: http

Pensez à modifier le champ email de ce fichier.

Enfin on va forcer le HTTPS sur notre serveur. Créez le dossier custom : mkdir custom && cd custom

Editez le fichier middlewares.yml :

http:
  middlewares:
    SecHeader:
      headers:
        forceSTSHeader: true
        stsIncludeSubdomains: true
        stsSeconds: 31536000
        sslRedirect: true
        sslForceHost: true
        sslHost: 'test.domain.com'

        frameDeny: true
        contentTypeNosniff: true
        browserXssFilter: true

Ici il faut modifier la variable suivante avec votre DNS :

  • sslHost

Premier lancement 🚀

Nous allons pouvoir lancer une première fois notre serveur: docker-compose up -d

Pour une première instanciation, Plex souhaite être normalement contacté en local. Pour cela nous allons utiliser un bon vieux tunnel ssh

ssh -L 8888:127.0.0.1:32400 root@monserveurdedie.fr

Avec putty ça donne :

putty

Ensuite rendez-vous sur http://127.0.0.1:8888/web et réalisez l'installation de plex.

Une fois le démarrage réalisé, pensez à changer le port de connexion dans les options du serveur :

plex menu 1

plex menu 2

À ce moment là, je vous conseille d'arrêter votre serveur pour modifier la configuration : docker-compose stop

Editez le fichier docker-compose.yml et retirez la ligne suivante :

32400:32400/tcp

Elle n'est plus nécessaire après la première connexion, puisque c'est Traefik qui va gérer le flux. Relancez : docker-compose up -d

Il ne reste plus qu'à vous connecter : https://test.domain.com.


Plex est un outil formidable pour le partage/streaming de vidéos, photos ou même musique ( dont vous possédez les droits bien sûr ). Et qui peut remplacer une utilisation d'Icloud par exemple pour le partage de photos/vidéos familiales. N'hésitez donc pas à regarder si l'outil peut vous plaire !

J'espère que cet article vous aura tout de même plu ! En tout cas n'hésitez pas à m'apporter des précisions ou des commentaires sur Twitter