Plex Media Server
Plex 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