Docker : installer Plex avec un SSL en 6 minutes (ou moins)

Docker 30 mai 2018

Après avoir lu un sujet concernant une installation à la main de Plex sur un “vieux” Debian, je me suis dit qu’il fallait quand même rappeler que tout est faisable en quelques minutes et de manière extrêmement simple. Comme ça on aura un beau Plex (tout est relatif…) avec un beau SSL qui se MàJ tout seul. 2 avantages à Docker : c’est rapide/facile à mettre en place et ça permet de ne sauvegarder que les configurations des applications (quelques Mo tout au plus dans bien des cas) et on peut donc tout réinstaller en moins de temps qu’il ne le faut pour l’écrire.

Pré-requis : un serveur dédié (voire un VPS) et créer un sous-domaine “plex” (ce qui donnerait plex.upandclear.org) qui redirige sur l’IP du serveur/VPS.

 

 

Commencer par installer Docker-CE (Community Edition) en suivant le guide selon l’OS. En bonus, tester que Docker fonctionne bien en lançant un Hello-world :

aerya@test:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete 
Digest: sha256:f5233545e43561214ca4891fd1157e1c3c563316ed8e237750d59bde73361e77
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

aerya@test:~$ 

 

 

Maintenant que Docker est en place il faut ajouter 3 containers :

  1. Un Proxy-Nginx qui va permettre d’accéder à Plex (ou tout autre Docker installé) via un sous-domaine
  2. Un générateur de SSL via Lets Encrypt (avec mise à jour automatisée)
  3. Plex évidemment
  4. Ce que vous devez sauvegarder

 

 

 

Proxy-Nginx

J’utilise jwilder/nginx-proxy : DockerHub / GitHub. On remarque au passage que pour lancer un Docker il convient (la plupart du temps) d’indiquer utilisateur/projet pris sur DockerHub. Pour l’installer/lancer :

docker run -d -p 80:80 -p 443:443 \
  --name nginx-proxy \
  --restart always \
  -e DEFAULT_HOST=upandclear.org \
  -v /home/aerya/docker/nginx-proxy/certs:/etc/nginx/certs:ro \
  -v /home/aerya/docker/nginx-proxy/dhparam:/etc/nginx/dhparam \
  -v /etc/nginx/vhost.d \
  -v /usr/share/nginx/html \
  -v /var/run/docker.sock:/tmp/docker.sock:ro \
  --label com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy \
  jwilder/nginx-proxy

Remplacer mon domaine et mon pseudo par vos informations et le tour est joué !

Pour ceux qui veulent comprendre un peu : on lance ce docker qui va ouvrir et rediriger les ports HTTP (80) et HTTPS (443), avec une option pour qu’il se relance tout seul en cas de coupure/reboot et on lui dit de stocker les informations permanentes (certificats SSL) dans /home/…/docker/nginx-proxy/certs, pareil pour DHPARAM. Et pour terminer on lie ce container à celui qu’on installe juste après pour Lets Encrypt.

 

 

 

SSL

J’utilise jrcs/letsencrypt-nginx-proxy-companion : DockerHub / GitHub. Pour l’installer :

docker run -d \
  --name=letsencrypt-nginx-proxy-companion \
  --restart always \
  -v /home/aerya/docker/nginx-proxy/certs:/etc/nginx/certs:rw \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  --volumes-from nginx-proxy \
  jrcs/letsencrypt-nginx-proxy-companion

Voilà. Il ne reste qu’à ajouter des Dockers et quelques options si on souhaite les faire passer par le proxy Nginx et les mettre en SSL.

 

 

 

Plex

J’utilise le container officiel plexinc/pms-docker : DockerHub / GitHub. Pour l’installer :

docker run \
-d \
--name plex \
--restart always \
-p 32400:32400/tcp \
-p 3005:3005/tcp \
-p 8324:8324/tcp \
-p 32469:32469/tcp \
-p 1900:1900/udp \
-p 32410:32410/udp \
-p 32412:32412/udp \
-p 32413:32413/udp \
-p 32414:32414/udp \
-e TZ="Europe/Paris" \
-e PLEX_CLAIM="claim-codearallonge" \
-e ADVERTISE_IP="http://ip_de_mon_serveur:32400/" \
-h plex.upandclear.org \
-v /home/aerya/docker/plex:/config \
-v /tmp:/transcode \
-v /mnt/unionfs:/data \
-e "VIRTUAL_PORT=32400" \
-e "VIRTUAL_HOST=plex.upandclear.org" \
-e "LETSENCRYPT_HOST=plex.upandclear.org" \
-e "[email protected]" \
plexinc/pms-docker

On lance Plex, on ouvre tous les ports, on le met à la date/heure de PARIS (ou ce que vous voulez) et… on configure un peu :

  • PLEX_CLAIM : vous avez sans doute lu dans plein de tutoriels que pour activer Plex il fallait se connecter en proxy à son serveur etc. Je sens que certains ont connu des moments longs et solitaires. Avec Docker c’est plus simple : vous créez un compte gratuit sur plex.tv et vous prenez ensuite un code à usage unique (valide 4 minutes) pour lier ce nouveau serveur Plex à votre compte. Et c’est plié.
  • ADVERTISE_IP : histoire d’aider un peu vous indiquez votre IP:PORT d’installation
  • -h plex.upandclear.org, svp changez… Mettez votre sous-domaine créé pour l’occasion
  • -v /home/aerya/docker/plex : on sauvegarde localement notre configuration de Plex
  • -v /tmp : on force Plex à utiliser la RAM pour le transcodage, un peu plus rapide que via les disques durs
  • -v /mnt/unionfs : c’est le dossier où je stocke mon contenu. Si vous avez tout dans home/olivier/medias alors mettez ça et si du genre /home/olivier/films, /home/olivier/series, alors mettez /home/olivier

Et les options dédiées au proxy Nginx et au SSL :

  • -e … 32400 : le port vers lequel le proxy doit rediriger (donc 32400 vu que c’est le port d’accès de PlexWeb)
  • -e … host : le sous-domaine visé
  • -e LE host : le sous-domaine pour l’établissement du SSL via Lets Encrypt
  • -e LE email : l’email utilisé pour générer le SSL

Et voilou, bon film :)

 

 

Sauvegarde

Docker s’installe et se réinstalle en un rien de temps. Le plus long est de préparer son docker run la première fois. Du coup, selon mes exemples, ce qu’il faut réellement sauvegarder :

  • Vos médias, selon la place que ça prend c’est facile ou impossible. Parfois entre les deux
  • Le contenu de /home/aerya/docker, qui contient toutes les configurations des Dockers

 

 

Mots clés