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`)"
- "[email protected]"
- "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"
- "[email protected]"
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: "[email protected]"
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 [email protected]
Avec putty ça donne :

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 :

À 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