Manual setup#
Configuration#
Configure the following values in the deployment files:
SYNOLOGY_NAS_IP: Your Synology NAS IP addressSYNOLOGY_NAS_SHARE: NFS share path on your NASPLEX_CLAIM_TOKEN: Get from https://www.plex.tv/claim/ (valid for 4 minutes)PLEX_LOADBALANCER_IP: Your desired LoadBalancer IPPLEX_SERVER_NAME: Your Plex server name
Installation steps#
- Create Plex namespace:
kubectl create namespace plex- Apply Plex PVCs:
kubectl apply -f plex/pvc.yaml- Deploy Plex:
kubectl apply -f plex/deployment.yamlDeployment#
Plex is deployed by Argo CD. Sync order uses sync waves: hashicorp-vault, then external-secrets-operator, then plex.
Register application resources#
kubectl apply -k argocd
kubectl apply -f clusters/home-prod/argocd/app-of-apps.yamlApply only Plex directly if needed:
kubectl apply -f clusters/home-prod/argocd/applications/plex.yamlCheck status:
kubectl -n argocd get applications
kubectl -n argocd get application plex -o yamlVault and External Secrets integration#
Store the Plex claim token in Vault:
vault kv put secret/homelab/plex PLEX_CLAIM=your_claim_tokenCreate the ESO Vault token secret:
kubectl create secret generic vault-eso-token \
-n external-secrets-system \
--from-literal=token=YOUR_VAULT_TOKENVerify secret materialization:
kubectl get externalsecret -n plex
kubectl get secret plex-env -n plexStorage and migration#
plex-config-pvcis GitOps-managed viahomelabs/plex/manifests/pvc-config.yamland must match live immutable fields.plex-media-pvcis usually created manually or fromhomelabs/plex/pvc.yamland mounted by the Helm release.- Run
clusters/home-prod/overlays/plex/migrate-metadata-job.yamlonly when migrating metadata from old hostPath storage.
Cloudflare Tunnel (optional)#
- Add a Public Hostname, for example
plex.yourdomain.org. - Set service URL to
http://plex.plex.svc.cluster.local:32400. - Optionally disable Plex native remote access if tunnel-only.
- Confirm Plex Service is
ClusterIPon port32400.