Plex Media Server


PlexPlex Media Server provides local media services for the household. This includes digitized copied of movies, television (including live TV with the help of the HD HomeRun Duo from SiliconDust), and Music.

Product: Plex Media Server
Install Type: Helm (Chart)
Container Image: Docker

Installation Details

For Helm charts, I generally pull the values to a file and modify that file for my specific needs:

 helm show values oci://ghcr.io/gabe565/charts/plex> values.yaml

This allows me to modify different environment specific configurations such as persistent storage and others. Please configure as appropriate for your environment, including storage and any other additional considerations. For example, the default chart is set to use UTC as a time zone. Being in the Eastern Time Zone in the United States, one of the modifications to the generated values.yaml file I make is:

# -- Environment variables. [[ref]](https://github.com/linuxserver/docker-plex#parameters)
# @default -- See [values.yaml](./values.yaml)
env:
  # -- Set the container timezone
  TZ: America/New_York

Other Considerations

Plex generally needs to have port TCP/32400 open for proper operation. In my configuration I use MetalLB to provide a LoadBlancer for the service so I have a port I can define in my router for port forwarding. This is an example of what I use:

 service:
   # -- Configures HTTP service settings for the chart.
   # @default -- See [values.yaml](./values.yaml)
   main:
     type: LoadBalancer
     ports:
       http:
         port: 32400

Also, with the larger sized media traffic, you may wish to make some adjustments to the ingress. Below is what I'm using for an Nginx ingress:

 ingress:
   # -- Enable and configure ingress settings for the chart under this key.
   # @default -- See [values.yaml](./values.yaml)
   main:
     enabled: true
     annotations:
       cert-manager.io/cluster-issuer: letsencrypt
       nginx.org/location-snippets: >
         proxy_ssl_verify off;
          gzip on;
         gzip_vary on;
         gzip_min_length 1000;
         gzip_proxied any;
         gzip_types text/plain text/css text/xml application/xml text/javascript application/x-javascript image/svg+xml;
         gzip_disable "MSIE [1-6]\.";
         proxy_set_header        Host                      $host;
         proxy_set_header        Referer                   $server_addr;
         proxy_set_header        Origin                    $server_addr;
         proxy_set_header        X-Real-IP                 $remote_addr;
         proxy_set_header        X-Forwarded-For           $proxy_add_x_forwarded_for;
         proxy_set_header        X-Forwarded-Proto         $scheme;
         proxy_set_header        X-Plex-Client-Identifier  $http_x_plex_client_identifier;
         proxy_set_header        Cookie                    $http_cookie;
         proxy_set_header        Sec-WebSocket-Extensions  $http_sec_websocket_extensions;
         proxy_set_header        Sec-WebSocket-Key         $http_sec_websocket_key;
         proxy_set_header        Sec-WebSocket-Version     $http_sec_websocket_version;
         proxy_set_header        Upgrade                   $http_upgrade;
         proxy_set_header        Connection                "upgrade";
     ingressClassName: nginx

     ... rest of ingress definition ...

Once you have made all of your changes, deploy with the following:

helm upgrade --install -n media --create-namespace \
             -f values.yaml plex oci://ghcr.io/gabe565/charts/plex