Installer Plex avec Docker

Guide d'installation de Plex sous Docker.

Installer Plex avec Docker
plex media movies music tv

Au sommaire :

  • 1-Qu'est-ce que Plex ?
  • 2-Prérequis
  • 3-Déploiement
  • 4-Configuration
  • 5-Exposer son instance avec Traefik

1-Qu'est-ce que Plex ?

Plex est un serveur multimédia propriétaire qui va vous permettre d'organiser vos différents contenus (musiques, films, séries) à travers une interface web et de pouvoir y accéder à travers différents terminaux.

Plex propose également une offre nommé "Plex Pass" qui vous permet pour 119 euros (abonnement à vie) le transcodage matériel, séries et films gratuits (catalogue d'anciens contenus), l'IPTV et de multiples autres options.

Plex Pass
Stream smarter.

C'est ce que j'utilisais juste avant de basculer vers Jellyfin.

Installer Jellyfin avec Docker
Guide d’installation de Jellyfin sous Docker, une alternative à Plex.

Je l'utilise encore dans certains cas comme par exemple chez mes parents qui ont une Smart TV non Android et qui dispose de l'application Plex. Dans ce genre de cas, j'active mon instance Plex à distance (à travers un VPN en SSH via l'application de mon Iphone) et ça m'évite de devoir brancher un appareil pour regarder mes contenus.

Malgré la concurrence de Jellyfin, Plex reste quand même un choix pertinent si vous souhaitez disposer de votre propre serveur multimédia car il propose certaines options via le "Plex Pass" non disponibles sur Jellyfin. À vous de faire votre comparatif.

2-Prérequis

Pour déployer Plex, vous devez disposer d'une machine virtuelle fonctionnant sous Ubuntu Server.

Création de la machine virtuelle :

Virtualisation avec Proxmox VE : Si vous partez de zéro, suivez mon guide détaillé pour virtualiser Ubuntu sur Proxmox VE avec des réglages optimisés.

Virtualiser Ubuntu Server sur Proxmox VE
Guide d’installation de Ubuntu Server sur Proxmox VE avec mes meilleurs réglages.

Automatisation avec Cloud-Init : Pour gagner du temps lors de la configuration, utilisez un template Cloud-Init. Cela permet d'automatiser et de simplifier l'initialisation de vos machines virtuelles. Retrouvez les instructions dans ce guide.

Initialiser vos machines virtuelles avec Cloud-init sur Proxmox VE
Guide d’installation de Cloud-Init qui va vous permettre d’automatiser vos déploiements

Installation des outils nécessaires :

Docker et Docker Compose : Une fois la machine virtuelle prête, installez Docker et Docker Compose, indispensables pour gérer et orchestrer vos conteneurs. Ce guide vous accompagnera dans l'installation.

Installer Docker
Guide d’installation de Docker.

Exposition de l'application :

Proxy inverse avec Traefik : Pour exposer vos applications sur Internet de manière sécurisée, configurez un proxy inverse. Traefik est une solution recommandée. Suivez ce guide pour l'installation.

Installer Traefik avec Docker
Guide d’installation de Traefik.

3-Déploiement

Commencez par créer un dossier "docker" à la racine du dossier utilisateur"

mkdir -p ~/docker

Créez un fichier nommé "compose.yml"

touch ~/docker/compose.yml

Ouvrez le fichier "compose.yml" et copiez cette configuration.

networks:
# Docker Bridge Network
  default:
    driver: bridge

services:

  plex:
    image: lscr.io/linuxserver/plex:latest
    container_name: plex
    network_mode: host
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
      VERSION=docker
      PLEX_CLAIM= #optional
    volumes:
      - ${APPDATA}/plex:/config
      - ${MEDIAS}/movies:/data/movies
      - ${MEDIAS}/tvshows:/data/tvshows
      - ${MEDIAS}/music:/data/music
    restart: unless-stopped

Pour les options communes :

  • version : version du fichier compose : https://docs.docker.com/compose/compose-file/compose-file-v3/
  • network : en bridge (l'adresse IP sera celle de la machine virtuelle ou du conteneur LXC)
  • services : c'est là qu'il faudra ajouter les configurations de vos conteneurs
  • image : nom du registry suivi du nom de l'application (lscr.io/linuxserver/app_name)
  • container_name : le nom du conteneur, sinon Docker en choisira un de manière aléatoire (mieux vaut le nommer vous même)
  • network_mode : host pour indiquer qu'on souhaite utiliser le réseau du serveur hôte (celui de votre machine virtuelle en l’occurrence)
  • environment : il y a les variables de base (PUID, PGID, TZ) qui correspondent à l'utilisateur, le groupe et le fuseau horaire ainsi que deux variables spécifiques. VERSION indique à Plex que la mise à jour de l'application passera par Docker (pour éviter la mise à jour à l'intérieur du conteneur). Quant à PLEX_CLAIM, il sert à authentifier votre instance auprès de Plex (nous verrons ça plus bas)
  • volumes : variable ${APPDATA) (/home/user_name/appdata) suivi du nom de l'application (/app_name) et enfin ${MEDIA} (/mnt/movies, /mnt/tvshows et /mnt/music) qui de préférence seront sur un partage NFS et contiendront donc vos films, séries et musiques
  • restart : unless-stopped par défaut. Le daemon de Docker redémarrera automatiquement le conteneur sauf si vous l'arretez, il faudra le démarrer manuellement

Créez le dossier "media" puis les dossiers "tvseries" et "movies" à l'intérieur de ce dernier, sinon c'est le conteneur qui va le créer avec les accès root:root, ce qui va vous empêcher de transférer vos contenus si vous vous connecté avec un compte standard.

Téléchargez l'image et déployez le conteneur.

docker compose pull && docker compose create

Puis démarrez le conteneur.

docker start plex

4-Configuration

Avant de déployer le conteneur :

Allez sur le site https://www.plex.tv/ pour créer un compte utilisateur.

Ensuite, allez sur le site https://www.plex.tv/claim/ pour obtenir un token et ajoutez ce dernier à votre configuration docker-compose (attention!!! il ne dure que 4 minutes donc faites vite).

Indiquez l'adresse IP de votre serveur hôte suivi de :32400/web (ex : http://192.168.0.54:32400/web).

Cliquez sur "Connexion"

Cliquez sur "Je suis d'accord".

Cliquez sur "J'ai Compris".

Cliquez sur la croix si vous êtes pas intéressé par le "Plex Pass" pour le moment.

Ensuite dans "Nom", choisissez un nom pour votre instance Plex. Si vous souhaitez accéder à votre instance sans avoir à configurer une ouverture de port et votre reverse proxy, laissez coché l'option 'M'autoriser à accéder à mes médias en dehors de ma maison".

Dans "Médiathèque", cliquez sur "Ajouter Une Bibliothèque"

Dans cet exemple, je vais sélectionner mes dossiers "Movies" et "Music".

J'indique pour le scan de mes films qu'il soit effectué en français.

Cliquez sur "Parcourir Et Choisir Un Dossier Multimédia".

Ayant déjà créé les dossiers à l'avance avec les bons droits appliqués (via chmod et chown), Plex peut lire les dossier "movies" et "music" correctement et y accéder.

Cliquez sur l'onglet "Terminer" et sur l'icone "Terminé".

Une fois la configuration terminé, vous allez pouvoir accéder à vos contenus sur la gauche.

5-Exposer son instance avec Traefik

Plex propose d'accéder à votre instance via un serveur relais. L'avantage c'est qu'il y a aucun port à ouvrir sur votre box internet et pas de configuration à effectué du côté de votre reverse proxy.

Bémol, la bande passante est limitée à :

  • 1 mbps/s si vous n'avez pas le Plex Pass
  • 2 mbps/s si vous avez le Plex Pass

Donc si en plus vous faites appel au transcodage, c'est clairement pas intéressant mais pour ceux qui sont pas doués en informatique, c'est un plus non négligeable.

Accessing a Server through Relay
One of the most important features of Plex is the ability to let you access your content whenever you want…

L'autre solution, c'est d'accéder directement à votre serveur via un nom de domaine et en configurant votre reverse proxy.

Pour exposer votre instance sur l'internet public, suivez mon guide sur le reverse proxy Traefik.

Installer Traefik avec Docker
Guide d’installation de Traefik.

À la fin, vous devriez avoir la même configuration que moi.

networks:
# default network
  default:
    driver: bridge
# Traefik network
  web:
    name: web
    driver: bridge

services:

  traefik:
    container_name: traefik
    image: traefik:v2
    restart: always
    network:
      web:
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${APPDATA}/traefik/logs:/logs
      - ${APPDATA}/traefik/traefik.yml:/traefik.yml
      - ${APPDATA}/traefik/dynamic.yml:/dynamic.yml
      - ${APPDATA}/traefik/letsencrypt/acme.json:/acme.json
    labels:
      - traefik.enable=true
      - traefik.http.routers.traefik-dash.entrypoints=websecure
      - traefik.http.routers.traefik-dash.rule=Host(`traefik.<domain_name>.ovh`)
      - traefik.http.routers.traefik-dash.service=api@internal
      - "traefik.http.routers.traefik.middlewares=middlewares-basic-auth@file"

  plex:
    image: lscr.io/linuxserver/plex:latest
    container_name: plex
    network_mode: host
    environment:
      PUID: ${PUID}
      PGID: ${PGID}
      TZ: ${TZ}
      VERSION=docker
      PLEX_CLAIM= #optional
    volumes:
      - ${APPDATA}/plex:/config
      - ${MEDIAS}/movies:/data/movies
      - ${MEDIAS}/tvshows:/data/tvshows
      - ${MEDIAS}/music:/data/music
    labels:
      - traefik.enable=true
      - traefik.http.routers.plex.entrypoints=websecure
      - traefik.http.routers.plex.rule=Host(`plex.<domain_name>`)
      - traefik.http.routers.plex.service=plex-svc
      - traefik.http.services.plex-svc.loadbalancer.server.port=32400
      - traefik.http.routers.plex.tls.certresolver=letsencrypt