---
navigation: true
title: Plex
main:
  fluid: false
---
:ellipsis{left=0px width=40rem top=10rem blur=140px}
# Plex

::alert{type="info"}
🎯 __Objectifs :__
- Installer Plex
- Installer Tautulli
- Accéder aux media depuis l'exterieur
::

[Plex](https://www.plex.tv/fr/) est une plateforme de streaming vidéo déployable chez vous, pour manager votre bibliothèque de films ou de série, et les lire en locale ou à distance. Plex dispose d'applications TV, Android, iOS, Window et Mac OS, permettant la lecture de vos bibliothèques, à la Netflix. 

Avec le *plexpass*, vous pouvez également organsier et lire vos contenus audio, à la spotify, la différence étant que c'est bien votre contenu qui est hébergé et lu depuis chez vous.

![picture](/img/serveex/plex.png)

On installera également [Tautulli](https://docs.linuxserver.io/images/docker-tautulli/), un outil qui permet d'avoir des stats poussées sur Plex. On utilisera, comme dès qu'on le peut, les images de linuxserver.io.

- [Plus d'info sur le conteneur Plex](https://docs.linuxserver.io/images/docker-plex)
- [Plus d'info sur le conteneur Tautulli](https://docs.linuxserver.io/images/docker-tautulli/)

::alert{type="info"}
:::list{type="info"}
- Vous serez amenés à creer un compte *Plex.tv*. Vous n'avez pas besoin d'exposer votre service Plex, il sera accessible directement par la plateforme. Votre serveur Plex sera gérable directement depuis votre compte.
:::
::

## Installer Plex
---
Structure des dossiers :
```console
root
├── docker
│   ├── plex      
│   │   ├── compose.yml
│   │   ├── .env
│   │   ├── config
│   │   └── transcode
│   └── tautulli
│       └── config
└── media
    ├── tvseries
    ├── movies
    └── library
```

Créez les dossiers `movies`, `tvseries` et `library` dans /media :

```sh
mkdir -p /media/movies /media/library /media/tvseries
```

Ouvrez Dockge dans votre navigeateur, et cliquez sur `compose`.
Nommez la stack `plex` et ajoutez la config suivante :

```yaml
---
services:
  linuxserver_plex:
    image: ghcr.io/linuxserver/plex:amd64-latest
    container_name: plex
    network_mode: host
    environment:
      - PUID=${PUID}
      - PGID=${GUID}
      - TZ=Europe/Paris
      - VERSION=docker
    volumes:
      - /docker/plex/config:/config
      - /docker/plex/transcode:/transcode
      - /media:/media
    restart: unless-stopped
    mem_limit: 4096m
    mem_reservation: 2048m
    devices:
      - /dev/dri:/dev/dri
  
  tautulli:
    image: lscr.io/linuxserver/tautulli:latest
    container_name: tautulli
    environment:
      - PUID=${PUID}
      - PGID=${GUID}
      - TZ=Europe/Paris
    volumes:
      - /docker/tautulli/config:/config
    ports:
      - 8181:8181
    restart: unless-stopped
```

::alert{type="success"}
✨ Ajoutez le label de watchtower dans chaque conteneur afin d'automatiser les mises à jour

    ```yaml
    services:
      plex:
        #...
        labels:
          - com.centurylinklabs.watchtower.enable=true
          
      tautulli:
        #...
        labels:
          - com.centurylinklabs.watchtower.enable=true
::

Trouvez votre PUID et votre GUID en tapant la commande suivante :

```shell
id nomdutilisateur
```
Et renseignez le `.env` avec les infos que vous avez trouvées, par exemple :

```properties
PUID=1000
GUID=1000
```
Déployez la stack.

L'interface locale est disponible via `http://ipduserveur:32400/web/index.html`. L'interface de Tautulli est joignable via `http://ipduserveur:8181`.

::alert{type="warning"}
:::list{type="warning"}
- Vous devez impérativement être sur votre réseau local au moment du premier setup de Plex, sans quoi l'url vous renverra sur votre compte Plex sans detecter votre serveur. Un VPN ne vous sauvera pas. Si vous ne pouvez pas faire autrement, [vous pouvez gérer l'installation à distance via un tunnel SSH](https://support.plex.tv/articles/200288586-installation/#toc-2).
:::
::

## Paramétrer Plex
---
Plex propose tout une gamme de film/série gratuitement. Après avoir créé votre compte, et pour ne pas polluer votre bibliothèque, je vous conseille de tout désactiver dans la section _Services en ligne_.

Ensuite rendez-vous dans la section _Accès à distance_ et choisissez un port manuellement (ici cela sera `1234`). Il est préférable de ne pas garder le port d'origine.

![picture](/img/serveex/plex-port.png)

- Sur votre routeur, redirigez le port `TCP` source `1234` vers le port `32400`, vers l'IP de votre serveur via [les règles NAT](/generalites/nat).
- Une fois fait, retournez dans Plex afin de vérifier que la connexion est bien opérationnelle

::alert{type="danger"}
:::list{type="danger"}
- __En cas d'échec :__ vérifiez les règles de votre pare-feu et autorisez le port `32400` de votre serveur.
:::
::

- Si vous avez un abonnement PlexPass et un GPU ou iGPU, activez *l'accélération matérielle* dans la section _Transcodeur_.
- Dans la section _Réglages/bibliothèque_, cochez _Analyser ma bibliothèque automatiquement_.
- Dans la section _Gérer/bibliothèque_ modifiez ou ajouter les bibliothèque, et choisissez le répertoire `/media/movies` pour les films et `/media/tvseries` pour les séries.

Et voilà, vous avez un Plex fonctionnel ! 

Vous n'avez plus qu'a remplir les dossiers `/media/movies` et `/media/tvseries` sur votre serveur de vos média favoris. Vous pourrez alors télécharger l'application Plex sur vos appareils et lire vos média favoris, chez vous ou à distance !

::alert{type="info"}
:::list{type="info"}
- Si pour stocker vos média vous utilisez un disque réseau (par exemple un stockage sur un NAS ou un disque dur externe branché ailleurs sur le réseau), veuillez consulter la section [montage samba](/generalites/samba) afin que Plex puisse y accéder.
:::
::

## Exposer Tautulli avec Swag
---
Plex n'a pas besoin d'etre exposé, étant joignable directement depuis votre compte Plex sur plex.tv. 

En  revanche, vous pouvez désirer exposer Tautulli, afin d'accéder aux stats même si vous n'est pas chez vous, depuis une simple url.
::alert{type="info"}
:::list{type="info"}
- Nous partons du principe que vous avez le sous-domaine `tautulli.mondomaine.fr` avec un `CNAME` qui pointe vers `mondomaine.fr` dans [zone DNS](/generalites/dns). Et que bien sûr, [à moins que vous utilisiez Cloudflare Zero Trust](/serveex/securite/cloudflare), le port `443` de votre box pointe bien sur le port `443` de votre serveur dans [les règles NAT](/generalites/nat).
:::
::


Rendez-vous dans dockge, et éditez le compose de SWAG en ajoutant le réseau de Tautulli :

```yaml
services:
  swag:
     container_name: # ...
      # ... 
     networks:              # Relie le conteneur au réseau custom 
      # ...           
      - tautulli            # Nom du réseau déclaré dans la stack
    
networks:                   # Définit le réseau custom
  # ...
  tautulli:                 # Nom du réseau déclaré dans la stack
    name: tautulli_default  # Nom véritable du réseau externe
    external: true          # Précise que c'est un réseau à rechercher en externe
```

Relancez la stack en cliquant sur "déployer" et patientez le temps que SWAG soit complètement opérationnel.

::alert{type="info"}
:::list{type="info"}
- Ici nous partons du principe que le nom du réseau de Tautulli est `tautulli_default`. Vous pouvez vérifier que la connexion est opérationnelle en visitant le dashboard de SWAG en tapant `http://ipduserveur:81`.
:::
::

Copiez en renommant le fichier `tautulli.subdomain.conf.sample` en `tautulli.subdomain.conf` et éditez le :

::alert{type="success"}
✨ __Astuce :__ vous pouvez utiliser [File Browser](/serveex/files/file-browser) pour naviguer dans vos fichier et éditer vos documents au lieu d'utiliser les commandes du terminal.
::

```shell
sudo cp /docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf.sample /docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf
sudo vi /docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf
```

Et vérifiez que la configuration correspond bien à ceci, sinon éditez le fichier en appuyant sur `i`:

```nginx
## Version 2023/05/31
# make sure that your tautulli container is named tautulli
# make sure that your dns has a cname set for tautulli

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name tautulli.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    # enable for ldap auth (requires ldap-location.conf in the location block)
    #include /config/nginx/ldap-server.conf;

    # enable for Authelia (requires authelia-location.conf in the location block)
    #include /config/nginx/authelia-server.conf;

    # enable for Authentik (requires authentik-location.conf in the location block)
    #include /config/nginx/authentik-server.conf;

    location / {
        # enable the next two lines for http auth
        #auth_basic "Restricted";
        #auth_basic_user_file /config/nginx/.htpasswd;

        # enable for ldap auth (requires ldap-server.conf in the server block)
        #include /config/nginx/ldap-location.conf;

        # enable for Authelia (requires authelia-server.conf in the server block)
        #include /config/nginx/authelia-location.conf;

        # enable for Authentik (requires authentik-server.conf in the server block)
        #include /config/nginx/authentik-location.conf;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app tautulli;
        set $upstream_port 8181;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }

    location ~ (/tautulli)?/api {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app tautulli;
        set $upstream_port 8181;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }

    location ~ (/tautulli)?/newsletter {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app tautulli;
        set $upstream_port 8181;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }

    location ~ (/tautulli)?/image {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app tautulli;
        set $upstream_port 8181;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }
}
```

::alert{type="success"}
✨ Vous pouvez protéger cette app avec Authentik en retirant les `#` devant `include /config/nginx/authentik-server.conf;`{lang=nginx} et `include /config/nginx/authentik-location.conf;`{lang=nginx}. N'oubliez pas de [créer une application et un fournisseur dans Authentik](/serveex/securite/authentik#protéger-une-app-par-reverse-proxy).
::

Appuyez sur `Echap` puis sauvegardez et quittez en tappant `:x`

Patientez quelques minutes puis tapez dans votre navigateur `http://tautulli.mondomaine.fr`.

::alert{type="danger"}
:::list{type="danger"}
- __En cas d'échec :__ vérifiez les règles de votre pare-feu.
:::
::

Et voilà !