---
title: Plex
description: Installer Plex Media Server avec Tautulli sur votre homelab pour diffuser films et séries depuis n'importe où sur tous vos appareils.
---


:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}

::note{to="/serveex/media/jellyfin"}

C'est une alternative à **Jellyfin**, conservée ici pour référence. Plex n'est pas entièrement auto-hébergé : même la lecture locale passe par le relais de Plex et exige un compte Plex, et plusieurs fonctions sont derrière le paywall du Plex Pass.
::

[Plex](https://www.plex.tv/fr/) est une plateforme de streaming vidéo auto-hébergée pour gérer votre bibliothèque de films ou de séries et les lire en local ou à distance. Plex propose des applications pour TV, Android, iOS, Windows et macOS, permettant de diffuser votre bibliothèque comme sur Netflix.

Avec le *Plex Pass*, vous pouvez aussi organiser et écouter votre musique à la manière de Spotify, à la différence que c'est votre contenu, hébergé et diffusé depuis votre serveur.

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

Nous installerons également [Tautulli](https://docs.linuxserver.io/images/docker-tautulli/), un outil qui fournit des statistiques détaillées sur Plex. Comme toujours, nous utiliserons les images linuxserver.io quand c'est possible.

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

::note

Vous devrez créer un compte *Plex.tv*. Vous n'avez pas besoin d'exposer votre service Plex, il sera accessible via la plateforme. Votre serveur Plex sera pilotable directement depuis votre compte.
::

## Installer Plex

::file-tree
---
tree:
  /:
    - srv:
      - docker:
        - plex:
          - compose.yml
          - .env
          - config/
          - transcode/
        - tautulli:
          - config/
    - media:
      - tvseries/
      - movies/
      - library/
---
::

::steps{level="3"}
### Créer les dossiers média

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

```bash [Terminal]
mkdir -p /media/movies /media/library /media/tvseries
```

### Déployer la stack

Ouvrez Dockge dans votre navigateur et cliquez sur `compose`.  
Nommez la stack `plex` et ajoutez la configuration suivante :

```yaml [compose.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:
      - /srv/docker/plex/config:/config
      - /srv/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:
      - /srv/docker/tautulli/config:/config
    ports:
      - 8181:8181
    restart: unless-stopped
```

::tip{icon=""}
✨ Ajoutez le label Watchtower à chaque conteneur pour automatiser les mises à jour :

```yaml [compose.yaml]
---
services:
  plex:
    #...
    labels:
      - com.centurylinklabs.watchtower.enable=true

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

### Renseigner vos variables d'environnement

Trouvez vos PUID et GUID en lançant :

```bash [Terminal]
id utilisateur
```

Remplissez votre fichier `.env` avec les valeurs récupérées, par exemple :

```properties [.env]
PUID=1000
GUID=1000
```

Déployez la stack.

L'interface locale est disponible sur `http://ipdevotreserveur:32400/web/index.html`.  
Tautulli est accessible sur `http://ipdevotreserveur:8181`.

::warning{to="https://support.plex.tv/articles/200288586-installation/#toc-2"}

Vous devez être sur votre réseau local pendant la configuration initiale de Plex. Sinon, l'URL redirigera vers votre compte Plex sans détecter votre serveur. Un VPN n'y changera rien. Si vous n'avez pas le choix, **vous pouvez faire la configuration à distance via un tunnel SSH**.
::

### Terminé !
::

## Paramétrer Plex
Plex propose une série de films et de séries gratuits. Après avoir créé votre compte, je vous conseille de tout désactiver dans la section _Services en ligne_ pour garder une bibliothèque propre.

Allez ensuite dans la section _Accès à distance_ et choisissez manuellement un port (nous prendrons `1234`). Mieux vaut ne pas utiliser le port par défaut.

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

- Sur votre box, redirigez le port TCP `1234` vers le port `32400` de l'IP de votre serveur avec les [règles NAT](/general/networking/nat).
- Une fois fait, retournez dans Plex pour vérifier que l'accès à distance fonctionne.

::caution

**Si ça ne marche pas :** vérifiez les règles de votre pare-feu et autorisez le port `32400` sur votre serveur.
::

- Si vous avez le PlexPass et un GPU ou iGPU, activez l'*accélération matérielle* dans la section _Transcodeur_.
- Dans _Paramètres > Bibliothèque_, activez _Mettre à jour ma bibliothèque automatiquement_.
- Dans _Gérer > Bibliothèque_, ajoutez ou modifiez les bibliothèques en pointant `/media/movies` pour les films et `/media/tvseries` pour les séries.

Et voilà ! Vous avez un serveur Plex fonctionnel !

Ajoutez simplement vos médias dans `/media/movies` et `/media/tvseries` sur votre serveur. Vous pouvez ensuite installer l'application Plex sur vos appareils et regarder vos contenus préférés en local ou à distance.

::note{to="/general/networking/samba"}

Si vos médias sont stockés sur un disque réseau (un NAS ou un disque dur externe accessible par le réseau), reportez-vous au **guide de montage Samba** pour que Plex puisse y accéder.
::

## Exposer Tautulli avec Swag
Vous n'avez pas besoin d'exposer Plex, il est accessible via votre compte Plex sur plex.tv.  

En revanche, vous voudrez peut-être exposer Tautulli pour consulter vos statistiques depuis une simple URL quand vous n'êtes pas chez vous.

::note

Nous partons du principe que vous avez le sous-domaine `tautulli.mondomaine.fr` avec un `CNAME` pointant vers `mondomaine.fr` dans votre [zone DNS](/general/networking/dns). Et bien sûr, [à moins d'utiliser Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box doit être redirigé vers le port `443` de votre serveur dans les [règles NAT](/general/networking/nat).
::

::steps{level="3"}
### Ajouter le réseau de Tautulli à SWAG

Allez dans Dockge et modifiez le fichier compose de SWAG en y ajoutant le réseau de Tautulli :

```yaml [compose.yaml]
---
services:
  swag:
     container_name: # ...
      # ... 
     networks:              # Rattache le conteneur au réseau personnalisé 
      # ...           
      - tautulli            # Nom du réseau déclaré

networks:                   # Définit le réseau personnalisé
  # ...
  tautulli:                 # Nom du réseau déclaré
    name: tautulli_default  # Nom réel du réseau externe
    external: true          # Le marque comme défini à l'extérieur
```

Redéployez la stack et attendez que SWAG soit pleinement opérationnel.

::note

Nous partons ici du principe que le nom du réseau de Tautulli est `tautulli_default`. Vous pouvez vérifier la connexion en visitant le tableau de bord de SWAG sur `http://ipdevotreserveur:81`.
::

### Créer le fichier subdomain.conf

Copiez et renommez le fichier `tautulli.subdomain.conf.sample` en `tautulli.subdomain.conf`, puis modifiez-le :

::tip{icon="" to="/serveex/files/file-browser-quantum"}
✨ **Astuce :** utilisez **File Browser** pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal.
::

```bash [Terminal]
sudo cp /srv/docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf.sample /srv/docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf
sudo nano /srv/docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf
```

Vérifiez que la configuration correspond à ce qui suit, et modifiez-la si nécessaire :

```nginx [tautulli.subdomain.conf]
## 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;

    }
}
```

::tip{icon="" to="/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy"}
✨ Vous pouvez protéger cette application avec Authentik en retirant le `#` devant `include /config/nginx/authentik-server.conf;` et `include /config/nginx/authentik-location.conf;`. N'oubliez pas de **créer une application et un provider dans Authentik**.
::

Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.

### Terminé !
::

Attendez quelques minutes, puis ouvrez `http://tautulli.mondomaine.fr` dans votre navigateur.

::caution

**Si ça ne marche pas :** vérifiez les règles de votre pare-feu.
::

Et c'est terminé !
