{ "2.0.19": { "healthy": true, "supported": false, "healthy_error": null, "location": "/__w/charts/charts/charts/plex/2.0.19", "last_update": "2025-03-05 14:27:33", "required_features": [ "normalize/ixVolume", "definitions/timezone", "definitions/gpuConfiguration", "normalize/acl" ], "human_version": "1.41.4.9463_2.0.19", "version": "2.0.19", "chart_metadata": { "name": "plex", "description": "Plex is a media server that allows you to stream your media to any Plex client.", "annotations": { "title": "Plex" }, "type": "application", "version": "2.0.19", "apiVersion": "v2", "appVersion": "1.41.4.9463", "kubeVersion": ">=1.16.0-0", "maintainers": [ { "name": "truenas", "url": "https://www.truenas.com/", "email": "dev@ixsystems.com" } ], "dependencies": [ { "name": "common", "repository": "file://../../../common", "version": "1.2.9" } ], "home": "https://plex.tv/", "icon": "https://media.sys.truenas.net/apps/plex/icons/icon.png", "sources": [ "https://plex.tv/", "https://github.com/truenas/charts/tree/master/charts/plex", "https://hub.docker.com/r/plexinc/pms-docker/" ], "keywords": [ "plex" ] }, "app_metadata": { "runAsContext": [ { "userName": "root", "groupName": "root", "gid": 0, "uid": 0, "description": "Plex runs as root user." } ], "capabilities": [ { "name": "CHOWN", "description": "Plex is able to chown files." }, { "name": "FOWNER", "description": "Plex is able to bypass permission checks for it's sub-processes." }, { "name": "DAC_OVERRIDE", "description": "Plex is able to bypass permission checks." }, { "name": "SETGID", "description": "Plex is able to set group ID for it's sub-processes." }, { "name": "SETUID", "description": "Plex is able to set user ID for it's sub-processes." }, { "name": "KILL", "description": "Plex is able to kill processes." } ], "hostMounts": [] }, "schema": { "groups": [ { "name": "Plex Configuration", "description": "Configure Plex" }, { "name": "User and Group Configuration", "description": "Configure User and Group for Plex" }, { "name": "Advanced Pod Configuration", "description": "Configure Advanced Pod Options for Plex" }, { "name": "Network Configuration", "description": "Configure Network for Plex" }, { "name": "Storage Configuration", "description": "Configure Storage for Plex" }, { "name": "Resources Configuration", "description": "Configure Resources for Plex" } ], "portals": { "web_portal": { "protocols": [ "$kubernetes-resource_configmap_portal_protocol" ], "host": [ "$kubernetes-resource_configmap_portal_host" ], "ports": [ "$kubernetes-resource_configmap_portal_port" ], "path": "$kubernetes-resource_configmap_portal_path" } }, "questions": [ { "variable": "TZ", "group": "Plex Configuration", "label": "Timezone", "schema": { "type": "string", "default": "America/Los_Angeles", "required": true, "$ref": [ "definitions/timezone" ], "enum": [ { "value": "Asia/Damascus", "description": "'Asia/Damascus' timezone" }, { "value": "Asia/Saigon", "description": "'Asia/Saigon' timezone" } ] } }, { "variable": "plexConfig", "label": "", "group": "Plex Configuration", "schema": { "type": "dict", "attrs": [ { "variable": "claimToken", "label": "Claim Token", "description": "The claim token for the server to obtain a real server token.\nIf not provided, server is will not be automatically logged in.\nIf server is already logged in, this parameter is ignored.\nYou can obtain a claim token to login your server to your plex account\nby visiting https://www.plex.tv/claim.\n", "schema": { "type": "string", "default": "", "private": true } }, { "variable": "imageSelector", "label": "Image", "description": "The image to use for Plex.\n", "schema": { "type": "string", "default": "image", "required": true, "enum": [ { "value": "image", "description": "Plex Official Image" }, { "value": "plexPassImage", "description": "Plex Pass Image" } ] } }, { "variable": "additionalEnvs", "label": "Additional Environment Variables", "description": "Configure additional environment variables for Plex.", "schema": { "type": "list", "default": [], "items": [ { "variable": "env", "label": "Environment Variable", "schema": { "type": "dict", "attrs": [ { "variable": "name", "label": "Name", "schema": { "type": "string", "required": true } }, { "variable": "value", "label": "Value", "schema": { "type": "string", "required": true } } ] } } ] } } ] } }, { "variable": "plexID", "label": "", "group": "User and Group Configuration", "schema": { "type": "dict", "attrs": [ { "variable": "user", "label": "User ID", "description": "The user id that Plex files will be owned by.", "schema": { "type": "int", "min": 568, "default": 568, "required": true } }, { "variable": "group", "label": "Group ID", "description": "The group id that Plex files will be owned by.", "schema": { "type": "int", "min": 568, "default": 568, "required": true } } ] } }, { "variable": "podOptions", "label": "", "group": "Advanced Pod Configuration", "schema": { "type": "dict", "attrs": [ { "variable": "dnsConfig", "label": "Advanced DNS Configuration", "schema": { "type": "dict", "attrs": [ { "variable": "options", "label": "DNS Options", "schema": { "type": "list", "items": [ { "variable": "optionsEntry", "label": "DNS Option Entry", "schema": { "type": "dict", "attrs": [ { "variable": "name", "label": "Option Name", "schema": { "type": "string", "required": true } }, { "variable": "value", "label": "Option Value", "schema": { "type": "string", "required": true } } ] } } ] } } ] } } ] } }, { "variable": "plexNetwork", "label": "", "group": "Network Configuration", "schema": { "type": "dict", "attrs": [ { "variable": "webPort", "label": "WebUI Port", "description": "The port for Plex WebUI", "schema": { "type": "int", "default": 32400, "min": 9000, "max": 65535, "required": true } }, { "variable": "hostNetwork", "label": "Host Network", "description": "Bind to the host network. It's recommended to keep this disabled.\n", "schema": { "type": "boolean", "default": false } } ] } }, { "variable": "plexStorage", "label": "", "group": "Storage Configuration", "schema": { "type": "dict", "attrs": [ { "variable": "data", "label": "Plex Data Storage", "description": "The path to store Plex Data.", "schema": { "type": "dict", "attrs": [ { "variable": "type", "label": "Type", "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", "schema": { "type": "string", "required": true, "immutable": true, "default": "ixVolume", "enum": [ { "value": "hostPath", "description": "Host Path (Path that already exists on the system)" }, { "value": "ixVolume", "description": "ixVolume (Dataset created automatically by the system)" } ] } }, { "variable": "ixVolumeConfig", "label": "ixVolume Configuration", "description": "The configuration for the ixVolume dataset.", "schema": { "type": "dict", "show_if": [ [ "type", "=", "ixVolume" ] ], "$ref": [ "normalize/ixVolume" ], "attrs": [ { "variable": "aclEnable", "label": "Enable ACL", "description": "Enable ACL for the dataset.", "schema": { "type": "boolean", "default": false } }, { "variable": "datasetName", "label": "Dataset Name", "description": "The name of the dataset to use for storage.", "schema": { "type": "string", "required": true, "immutable": true, "hidden": true, "default": "data" } }, { "variable": "aclEntries", "label": "ACL Configuration", "schema": { "type": "dict", "show_if": [ [ "aclEnable", "=", true ] ], "attrs": [ { "variable": "path", "label": "Path", "description": "Path to perform ACL", "schema": { "type": "string", "hidden": true } }, { "variable": "entries", "label": "ACL Entries", "description": "ACL Entries", "schema": { "type": "list", "items": [ { "variable": "aclEntry", "label": "ACL Entry", "schema": { "type": "dict", "attrs": [ { "variable": "id_type", "label": "ID Type", "schema": { "type": "string", "enum": [ { "value": "USER", "description": "Entry is for a USER" }, { "value": "GROUP", "description": "Entry is for a GROUP" } ], "default": "USER" } }, { "variable": "id", "label": "ID", "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application", "schema": { "type": "int", "required": true, "min": 0 } }, { "variable": "access", "label": "Access", "schema": { "type": "string", "enum": [ { "value": "READ", "description": "Read Access" }, { "value": "MODIFY", "description": "Modify Access" }, { "value": "FULL_CONTROL", "description": "FULL_CONTROL Access" } ] } } ] } } ] } } ] } } ] } }, { "variable": "hostPathConfig", "label": "Host Path Configuration", "schema": { "type": "dict", "show_if": [ [ "type", "=", "hostPath" ] ], "attrs": [ { "variable": "aclEnable", "label": "Enable ACL", "description": "Enable ACL for the dataset.", "schema": { "type": "boolean", "default": false } }, { "variable": "acl", "label": "ACL Configuration", "schema": { "type": "dict", "show_if": [ [ "aclEnable", "=", true ] ], "attrs": [ { "variable": "path", "label": "Host Path", "description": "Host Path to perform ACL", "schema": { "type": "hostpath", "required": true, "empty": false } }, { "variable": "entries", "label": "ACL Entries", "description": "ACL Entries", "schema": { "type": "list", "items": [ { "variable": "aclEntry", "label": "ACL Entry", "schema": { "type": "dict", "attrs": [ { "variable": "id_type", "label": "ID Type", "schema": { "type": "string", "enum": [ { "value": "USER", "description": "Entry is for a USER" }, { "value": "GROUP", "description": "Entry is for a GROUP" } ], "default": "USER" } }, { "variable": "id", "label": "ID", "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application", "schema": { "type": "int", "required": true, "min": 0 } }, { "variable": "access", "label": "Access", "schema": { "type": "string", "enum": [ { "value": "READ", "description": "Read Access" }, { "value": "MODIFY", "description": "Modify Access" }, { "value": "FULL_CONTROL", "description": "FULL_CONTROL Access" } ] } } ] } } ] } }, { "variable": "options", "label": "ACL Options", "schema": { "type": "dict", "attrs": [ { "variable": "force", "label": "Force Flag", "description": "Enabling `Force` applies ACL even if the path has existing data", "schema": { "type": "boolean", "default": false } } ] } } ], "$ref": [ "normalize/acl" ] } }, { "variable": "hostPath", "label": "Host Path", "description": "The host path to use for storage.", "schema": { "type": "hostpath", "show_if": [ [ "aclEnable", "=", false ] ], "required": true } } ] } } ] } }, { "variable": "config", "label": "Plex Configuration Storage", "description": "The path to store Plex Configuration.", "schema": { "type": "dict", "attrs": [ { "variable": "type", "label": "Type", "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.\n", "schema": { "type": "string", "required": true, "immutable": true, "default": "ixVolume", "enum": [ { "value": "hostPath", "description": "Host Path (Path that already exists on the system)" }, { "value": "ixVolume", "description": "ixVolume (Dataset created automatically by the system)" } ] } }, { "variable": "ixVolumeConfig", "label": "ixVolume Configuration", "description": "The configuration for the ixVolume dataset.", "schema": { "type": "dict", "show_if": [ [ "type", "=", "ixVolume" ] ], "$ref": [ "normalize/ixVolume" ], "attrs": [ { "variable": "aclEnable", "label": "Enable ACL", "description": "Enable ACL for the dataset.", "schema": { "type": "boolean", "default": false } }, { "variable": "datasetName", "label": "Dataset Name", "description": "The name of the dataset to use for storage.", "schema": { "type": "string", "required": true, "immutable": true, "hidden": true, "default": "config" } }, { "variable": "aclEntries", "label": "ACL Configuration", "schema": { "type": "dict", "show_if": [ [ "aclEnable", "=", true ] ], "attrs": [ { "variable": "path", "label": "Path", "description": "Path to perform ACL", "schema": { "type": "string", "hidden": true } }, { "variable": "entries", "label": "ACL Entries", "description": "ACL Entries", "schema": { "type": "list", "items": [ { "variable": "aclEntry", "label": "ACL Entry", "schema": { "type": "dict", "attrs": [ { "variable": "id_type", "label": "ID Type", "schema": { "type": "string", "enum": [ { "value": "USER", "description": "Entry is for a USER" }, { "value": "GROUP", "description": "Entry is for a GROUP" } ], "default": "USER" } }, { "variable": "id", "label": "ID", "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application", "schema": { "type": "int", "required": true, "min": 0 } }, { "variable": "access", "label": "Access", "schema": { "type": "string", "enum": [ { "value": "READ", "description": "Read Access" }, { "value": "MODIFY", "description": "Modify Access" }, { "value": "FULL_CONTROL", "description": "FULL_CONTROL Access" } ] } } ] } } ] } } ] } } ] } }, { "variable": "hostPathConfig", "label": "Host Path Configuration", "schema": { "type": "dict", "show_if": [ [ "type", "=", "hostPath" ] ], "attrs": [ { "variable": "aclEnable", "label": "Enable ACL", "description": "Enable ACL for the dataset.", "schema": { "type": "boolean", "default": false } }, { "variable": "acl", "label": "ACL Configuration", "schema": { "type": "dict", "show_if": [ [ "aclEnable", "=", true ] ], "attrs": [ { "variable": "path", "label": "Host Path", "description": "Host Path to perform ACL", "schema": { "type": "hostpath", "required": true, "empty": false } }, { "variable": "entries", "label": "ACL Entries", "description": "ACL Entries", "schema": { "type": "list", "items": [ { "variable": "aclEntry", "label": "ACL Entry", "schema": { "type": "dict", "attrs": [ { "variable": "id_type", "label": "ID Type", "schema": { "type": "string", "enum": [ { "value": "USER", "description": "Entry is for a USER" }, { "value": "GROUP", "description": "Entry is for a GROUP" } ], "default": "USER" } }, { "variable": "id", "label": "ID", "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application", "schema": { "type": "int", "required": true, "min": 0 } }, { "variable": "access", "label": "Access", "schema": { "type": "string", "enum": [ { "value": "READ", "description": "Read Access" }, { "value": "MODIFY", "description": "Modify Access" }, { "value": "FULL_CONTROL", "description": "FULL_CONTROL Access" } ] } } ] } } ] } }, { "variable": "options", "label": "ACL Options", "schema": { "type": "dict", "attrs": [ { "variable": "force", "label": "Force Flag", "description": "Enabling `Force` applies ACL even if the path has existing data", "schema": { "type": "boolean", "default": false } } ] } } ], "$ref": [ "normalize/acl" ] } }, { "variable": "hostPath", "label": "Host Path", "description": "The host path to use for storage.", "schema": { "type": "hostpath", "show_if": [ [ "aclEnable", "=", false ] ], "required": true } } ] } } ] } }, { "variable": "logs", "label": "Plex Logs Storage", "description": "The path to store Plex Logs.", "schema": { "type": "dict", "attrs": [ { "variable": "type", "label": "Type", "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nemptyDir: Is a temporary directory that will be created on the disk or in memory.\n", "schema": { "type": "string", "required": true, "default": "emptyDir", "enum": [ { "value": "hostPath", "description": "Host Path (Path that already exists on the system)" }, { "value": "ixVolume", "description": "ixVolume (Dataset created automatically by the system)" }, { "value": "emptyDir", "description": "emptyDir (Temporary directory that will be created on the disk or in memory)" } ] } }, { "variable": "ixVolumeConfig", "label": "ixVolume Configuration", "description": "The configuration for the ixVolume dataset.", "schema": { "type": "dict", "show_if": [ [ "type", "=", "ixVolume" ] ], "$ref": [ "normalize/ixVolume" ], "attrs": [ { "variable": "aclEnable", "label": "Enable ACL", "description": "Enable ACL for the dataset.", "schema": { "type": "boolean", "default": false } }, { "variable": "datasetName", "label": "Dataset Name", "description": "The name of the dataset to use for storage.", "schema": { "type": "string", "required": true, "immutable": true, "hidden": true, "default": "logs" } }, { "variable": "aclEntries", "label": "ACL Configuration", "schema": { "type": "dict", "show_if": [ [ "aclEnable", "=", true ] ], "attrs": [ { "variable": "path", "label": "Path", "description": "Path to perform ACL", "schema": { "type": "string", "hidden": true } }, { "variable": "entries", "label": "ACL Entries", "description": "ACL Entries", "schema": { "type": "list", "items": [ { "variable": "aclEntry", "label": "ACL Entry", "schema": { "type": "dict", "attrs": [ { "variable": "id_type", "label": "ID Type", "schema": { "type": "string", "enum": [ { "value": "USER", "description": "Entry is for a USER" }, { "value": "GROUP", "description": "Entry is for a GROUP" } ], "default": "USER" } }, { "variable": "id", "label": "ID", "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application", "schema": { "type": "int", "required": true, "min": 0 } }, { "variable": "access", "label": "Access", "schema": { "type": "string", "enum": [ { "value": "READ", "description": "Read Access" }, { "value": "MODIFY", "description": "Modify Access" }, { "value": "FULL_CONTROL", "description": "FULL_CONTROL Access" } ] } } ] } } ] } } ] } } ] } }, { "variable": "emptyDirConfig", "label": "emptyDir Configuration", "schema": { "type": "dict", "show_if": [ [ "type", "=", "emptyDir" ] ], "attrs": [ { "variable": "medium", "label": "emptyDir Medium", "description": "Disk: Creates a temporary directory on the disk.
\nMemory: Creates a temporary directory in memory.\n", "schema": { "type": "string", "default": "", "enum": [ { "value": "", "description": "Disk (Temporary directory created on the disk)" }, { "value": "Memory", "description": "Memory (Temporary directory created in memory)" } ] } }, { "variable": "size", "label": "emptyDir Size Limit (in Gi)", "description": "The maximum size (in Gi) of the temporary directory.
\nFor example: 2\n", "schema": { "type": "int", "null": true, "default": 2 } } ] } }, { "variable": "hostPathConfig", "label": "Host Path Configuration", "schema": { "type": "dict", "show_if": [ [ "type", "=", "hostPath" ] ], "attrs": [ { "variable": "aclEnable", "label": "Enable ACL", "description": "Enable ACL for the dataset.", "schema": { "type": "boolean", "default": false } }, { "variable": "acl", "label": "ACL Configuration", "schema": { "type": "dict", "show_if": [ [ "aclEnable", "=", true ] ], "attrs": [ { "variable": "path", "label": "Host Path", "description": "Host Path to perform ACL", "schema": { "type": "hostpath", "required": true, "empty": false } }, { "variable": "entries", "label": "ACL Entries", "description": "ACL Entries", "schema": { "type": "list", "items": [ { "variable": "aclEntry", "label": "ACL Entry", "schema": { "type": "dict", "attrs": [ { "variable": "id_type", "label": "ID Type", "schema": { "type": "string", "enum": [ { "value": "USER", "description": "Entry is for a USER" }, { "value": "GROUP", "description": "Entry is for a GROUP" } ], "default": "USER" } }, { "variable": "id", "label": "ID", "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application", "schema": { "type": "int", "required": true, "min": 0 } }, { "variable": "access", "label": "Access", "schema": { "type": "string", "enum": [ { "value": "READ", "description": "Read Access" }, { "value": "MODIFY", "description": "Modify Access" }, { "value": "FULL_CONTROL", "description": "FULL_CONTROL Access" } ] } } ] } } ] } }, { "variable": "options", "label": "ACL Options", "schema": { "type": "dict", "attrs": [ { "variable": "force", "label": "Force Flag", "description": "Enabling `Force` applies ACL even if the path has existing data", "schema": { "type": "boolean", "default": false } } ] } } ], "$ref": [ "normalize/acl" ] } }, { "variable": "hostPath", "label": "Host Path", "description": "The host path to use for storage.", "schema": { "type": "hostpath", "show_if": [ [ "aclEnable", "=", false ] ], "required": true } } ] } } ] } }, { "variable": "transcode", "label": "Plex Transcode Storage", "description": "The path to store Plex Transcode.", "schema": { "type": "dict", "attrs": [ { "variable": "type", "label": "Type", "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nemptyDir: Is a temporary directory that will be created on the disk or in memory.\n", "schema": { "type": "string", "required": true, "default": "ixVolume", "enum": [ { "value": "hostPath", "description": "Host Path (Path that already exists on the system)" }, { "value": "ixVolume", "description": "ixVolume (Dataset created automatically by the system)" }, { "value": "emptyDir", "description": "emptyDir (Temporary directory created on the disk or in memory)" } ] } }, { "variable": "ixVolumeConfig", "label": "ixVolume Configuration", "description": "The configuration for the ixVolume dataset.", "schema": { "type": "dict", "show_if": [ [ "type", "=", "ixVolume" ] ], "$ref": [ "normalize/ixVolume" ], "attrs": [ { "variable": "aclEnable", "label": "Enable ACL", "description": "Enable ACL for the dataset.", "schema": { "type": "boolean", "default": false } }, { "variable": "datasetName", "label": "Dataset Name", "description": "The name of the dataset to use for storage.", "schema": { "type": "string", "required": true, "immutable": true, "hidden": true, "default": "transcode" } }, { "variable": "aclEntries", "label": "ACL Configuration", "schema": { "type": "dict", "show_if": [ [ "aclEnable", "=", true ] ], "attrs": [ { "variable": "path", "label": "Path", "description": "Path to perform ACL", "schema": { "type": "string", "hidden": true } }, { "variable": "entries", "label": "ACL Entries", "description": "ACL Entries", "schema": { "type": "list", "items": [ { "variable": "aclEntry", "label": "ACL Entry", "schema": { "type": "dict", "attrs": [ { "variable": "id_type", "label": "ID Type", "schema": { "type": "string", "enum": [ { "value": "USER", "description": "Entry is for a USER" }, { "value": "GROUP", "description": "Entry is for a GROUP" } ], "default": "USER" } }, { "variable": "id", "label": "ID", "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application", "schema": { "type": "int", "required": true, "min": 0 } }, { "variable": "access", "label": "Access", "schema": { "type": "string", "enum": [ { "value": "READ", "description": "Read Access" }, { "value": "MODIFY", "description": "Modify Access" }, { "value": "FULL_CONTROL", "description": "FULL_CONTROL Access" } ] } } ] } } ] } } ] } } ] } }, { "variable": "emptyDirConfig", "label": "emptyDir Configuration", "schema": { "type": "dict", "show_if": [ [ "type", "=", "emptyDir" ] ], "attrs": [ { "variable": "medium", "label": "emptyDir Medium", "description": "Disk: Creates a temporary directory on the disk.
\nMemory: Creates a temporary directory in memory.\n", "schema": { "type": "string", "default": "", "enum": [ { "value": "", "description": "Disk (Temporary directory created on the disk)" }, { "value": "Memory", "description": "Memory (Temporary directory created in memory)" } ] } }, { "variable": "size", "label": "emptyDir Size Limit (in Gi)", "description": "The maximum size (in Gi) of the temporary directory.
\nFor example: 2\n", "schema": { "type": "int", "null": true, "default": 2 } } ] } }, { "variable": "hostPathConfig", "label": "Host Path Configuration", "schema": { "type": "dict", "show_if": [ [ "type", "=", "hostPath" ] ], "attrs": [ { "variable": "aclEnable", "label": "Enable ACL", "description": "Enable ACL for the dataset.", "schema": { "type": "boolean", "default": false } }, { "variable": "acl", "label": "ACL Configuration", "schema": { "type": "dict", "show_if": [ [ "aclEnable", "=", true ] ], "attrs": [ { "variable": "path", "label": "Host Path", "description": "Host Path to perform ACL", "schema": { "type": "hostpath", "required": true, "empty": false } }, { "variable": "entries", "label": "ACL Entries", "description": "ACL Entries", "schema": { "type": "list", "items": [ { "variable": "aclEntry", "label": "ACL Entry", "schema": { "type": "dict", "attrs": [ { "variable": "id_type", "label": "ID Type", "schema": { "type": "string", "enum": [ { "value": "USER", "description": "Entry is for a USER" }, { "value": "GROUP", "description": "Entry is for a GROUP" } ], "default": "USER" } }, { "variable": "id", "label": "ID", "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application", "schema": { "type": "int", "required": true, "min": 0 } }, { "variable": "access", "label": "Access", "schema": { "type": "string", "enum": [ { "value": "READ", "description": "Read Access" }, { "value": "MODIFY", "description": "Modify Access" }, { "value": "FULL_CONTROL", "description": "FULL_CONTROL Access" } ] } } ] } } ] } }, { "variable": "options", "label": "ACL Options", "schema": { "type": "dict", "attrs": [ { "variable": "force", "label": "Force Flag", "description": "Enabling `Force` applies ACL even if the path has existing data", "schema": { "type": "boolean", "default": false } } ] } } ], "$ref": [ "normalize/acl" ] } }, { "variable": "hostPath", "label": "Host Path", "description": "The host path to use for storage.", "schema": { "type": "hostpath", "show_if": [ [ "aclEnable", "=", false ] ], "required": true } } ] } } ] } }, { "variable": "additionalStorages", "label": "Additional Storage", "description": "Additional storage for Plex.", "schema": { "type": "list", "default": [], "items": [ { "variable": "storageEntry", "label": "Storage Entry", "schema": { "type": "dict", "attrs": [ { "variable": "type", "label": "Type", "description": "ixVolume: Is dataset created automatically by the system.
\nHost Path: Is a path that already exists on the system.
\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n", "schema": { "type": "string", "required": true, "default": "ixVolume", "immutable": true, "enum": [ { "value": "hostPath", "description": "Host Path (Path that already exists on the system)" }, { "value": "ixVolume", "description": "ixVolume (Dataset created automatically by the system)" }, { "value": "smb-pv-pvc", "description": "SMB Share (Mounts a persistent volume claim to a SMB share)" } ] } }, { "variable": "readOnly", "label": "Read Only", "description": "Mount the volume as read only.", "schema": { "type": "boolean", "default": false } }, { "variable": "mountPath", "label": "Mount Path", "description": "The path inside the container to mount the storage.", "schema": { "type": "path", "required": true } }, { "variable": "hostPathConfig", "label": "Host Path Configuration", "schema": { "type": "dict", "show_if": [ [ "type", "=", "hostPath" ] ], "attrs": [ { "variable": "aclEnable", "label": "Enable ACL", "description": "Enable ACL for the dataset.", "schema": { "type": "boolean", "default": false } }, { "variable": "acl", "label": "ACL Configuration", "schema": { "type": "dict", "show_if": [ [ "aclEnable", "=", true ] ], "attrs": [ { "variable": "path", "label": "Host Path", "description": "Host Path to perform ACL", "schema": { "type": "hostpath", "required": true, "empty": false } }, { "variable": "entries", "label": "ACL Entries", "description": "ACL Entries", "schema": { "type": "list", "items": [ { "variable": "aclEntry", "label": "ACL Entry", "schema": { "type": "dict", "attrs": [ { "variable": "id_type", "label": "ID Type", "schema": { "type": "string", "enum": [ { "value": "USER", "description": "Entry is for a USER" }, { "value": "GROUP", "description": "Entry is for a GROUP" } ], "default": "USER" } }, { "variable": "id", "label": "ID", "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application", "schema": { "type": "int", "required": true, "min": 0 } }, { "variable": "access", "label": "Access", "schema": { "type": "string", "enum": [ { "value": "READ", "description": "Read Access" }, { "value": "MODIFY", "description": "Modify Access" }, { "value": "FULL_CONTROL", "description": "FULL_CONTROL Access" } ] } } ] } } ] } }, { "variable": "options", "label": "ACL Options", "schema": { "type": "dict", "attrs": [ { "variable": "force", "label": "Force Flag", "description": "Enabling `Force` applies ACL even if the path has existing data", "schema": { "type": "boolean", "default": false } } ] } } ], "$ref": [ "normalize/acl" ] } }, { "variable": "hostPath", "label": "Host Path", "description": "The host path to use for storage.", "schema": { "type": "hostpath", "show_if": [ [ "aclEnable", "=", false ] ], "required": true } } ] } }, { "variable": "ixVolumeConfig", "label": "ixVolume Configuration", "description": "The configuration for the ixVolume dataset.", "schema": { "type": "dict", "show_if": [ [ "type", "=", "ixVolume" ] ], "$ref": [ "normalize/ixVolume" ], "attrs": [ { "variable": "aclEnable", "label": "Enable ACL", "description": "Enable ACL for the dataset.", "schema": { "type": "boolean", "default": false } }, { "variable": "datasetName", "label": "Dataset Name", "description": "The name of the dataset to use for storage.", "schema": { "type": "string", "required": true, "immutable": true, "default": "storage_entry" } }, { "variable": "aclEntries", "label": "ACL Configuration", "schema": { "type": "dict", "show_if": [ [ "aclEnable", "=", true ] ], "attrs": [ { "variable": "path", "label": "Path", "description": "Path to perform ACL", "schema": { "type": "string", "hidden": true } }, { "variable": "entries", "label": "ACL Entries", "description": "ACL Entries", "schema": { "type": "list", "items": [ { "variable": "aclEntry", "label": "ACL Entry", "schema": { "type": "dict", "attrs": [ { "variable": "id_type", "label": "ID Type", "schema": { "type": "string", "enum": [ { "value": "USER", "description": "Entry is for a USER" }, { "value": "GROUP", "description": "Entry is for a GROUP" } ], "default": "USER" } }, { "variable": "id", "label": "ID", "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application", "schema": { "type": "int", "required": true, "min": 0 } }, { "variable": "access", "label": "Access", "schema": { "type": "string", "enum": [ { "value": "READ", "description": "Read Access" }, { "value": "MODIFY", "description": "Modify Access" }, { "value": "FULL_CONTROL", "description": "FULL_CONTROL Access" } ] } } ] } } ] } } ] } } ] } }, { "variable": "smbConfig", "label": "SMB Share Configuration", "description": "The configuration for the SMB Share.", "schema": { "type": "dict", "show_if": [ [ "type", "=", "smb-pv-pvc" ] ], "attrs": [ { "variable": "server", "label": "Server", "description": "The server for the SMB share.", "schema": { "type": "string", "required": true } }, { "variable": "share", "label": "Share", "description": "The share name for the SMB share.", "schema": { "type": "string", "required": true } }, { "variable": "domain", "label": "Domain (Optional)", "description": "The domain for the SMB share.", "schema": { "type": "string" } }, { "variable": "username", "label": "Username", "description": "The username for the SMB share.", "schema": { "type": "string", "required": true } }, { "variable": "password", "label": "Password", "description": "The password for the SMB share.", "schema": { "type": "string", "required": true, "private": true } }, { "variable": "size", "label": "Size (in Gi)", "description": "The size of the volume quota.", "schema": { "type": "int", "required": true, "min": 1, "default": 1 } } ] } } ] } } ] } } ] } }, { "variable": "resources", "label": "Resources Configuration", "group": "Resources Configuration", "schema": { "type": "dict", "attrs": [ { "variable": "limits", "label": "Limits", "schema": { "type": "dict", "attrs": [ { "variable": "cpu", "label": "CPU", "description": "CPU limit for Plex.", "schema": { "type": "string", "max_length": 6, "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$", "valid_chars_error": "Valid CPU limit formats are
\n- Plain Integer - eg. 1
\n- Float - eg. 0.5
\n- Milicpu - eg. 500m\n", "default": "4000m", "required": true } }, { "variable": "memory", "label": "Memory", "description": "Memory limit for Plex.", "schema": { "type": "string", "max_length": 12, "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$", "valid_chars_error": "Valid Memory limit formats are
\n- Suffixed with E/P/T/G/M/K - eg. 1G
\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
\n- Plain Integer in bytes - eg. 1024
\n- Exponent - eg. 134e6\n", "default": "8Gi", "required": true } } ] } } ] } }, { "variable": "plexGPU", "group": "Resources Configuration", "label": "GPU Configuration", "schema": { "type": "dict", "$ref": [ "definitions/gpuConfiguration" ], "attrs": [] } } ] }, "app_readme": "

Plex

\n

Plex is a media server that allows you to stream your media to any Plex client.

", "detailed_readme": "

Plex

\n

Plex is a media server that allows you to stream your media to any Plex client.

", "changelog": null }, "1.7.60": { "healthy": true, "supported": true, "healthy_error": null, "location": "/__w/charts/charts/charts/plex/1.7.60", "last_update": "2025-03-05 14:27:33", "required_features": [ "normalize/ixVolume", "definitions/timezone", "validations/lockedHostPath", "definitions/gpuConfiguration" ], "human_version": "1.32.8.7639_1.7.60", "version": "1.7.60", "chart_metadata": { "name": "plex", "description": "Plex Media Server", "annotations": { "title": "Plex" }, "type": "application", "version": "1.7.60", "apiVersion": "v2", "appVersion": "1.32.8.7639", "kubeVersion": ">=1.16.0-0", "maintainers": [ { "name": "truenas", "url": "https://www.truenas.com/", "email": "dev@ixsystems.com" } ], "dependencies": [ { "name": "common", "repository": "file://../../../common/2304.0.1", "version": "2304.0.1" } ], "home": "https://plex.tv/", "icon": "https://media.sys.truenas.net/apps/plex/icons/icon.png", "sources": [ "https://hub.docker.com/r/plexinc/pms-docker/", "https://github.com/k8s-at-home/charts/tree/master/charts/plex" ], "keywords": [ "plex" ] }, "app_metadata": { "runAsContext": [ { "userName": "root", "groupName": "root", "gid": 0, "uid": 0, "description": "Plex runs as root user." } ], "capabilities": [ { "name": "CHOWN", "description": "Plex is able to chown files." }, { "name": "FOWNER", "description": "Plex is able to bypass permission checks for it's sub-processes." }, { "name": "SYS_CHROOT", "description": "Plex is able to use chroot." }, { "name": "MKNOD", "description": "Plex is able to create device nodes." }, { "name": "DAC_OVERRIDE", "description": "Plex is able to bypass permission checks." }, { "name": "FSETID", "description": "Plex is able to set file capabilities." }, { "name": "KILL", "description": "Plex is able to kill processes." }, { "name": "SETGID", "description": "Plex is able to set group ID for it's sub-processes." }, { "name": "SETUID", "description": "Plex is able to set user ID for it's sub-processes." }, { "name": "SETPCAP", "description": "Plex is able to set process capabilities." }, { "name": "NET_BIND_SERVICE", "description": "Plex is able to bind to privileged ports." }, { "name": "SETFCAP", "description": "Plex is able to set file capabilities." }, { "name": "NET_RAW", "description": "Plex is able to use raw sockets." }, { "name": "AUDIT_WRITE", "description": "Plex is able to write to audit log." } ], "hostMounts": [] }, "schema": { "groups": [ { "name": "Plex Configuration", "description": "Configure plex deployment" }, { "name": "Networking", "description": "Configure networking for container" }, { "name": "Storage", "description": "Persist and share data that is separate from the lifecycle of the container" }, { "name": "Workload Details", "description": "Configure how workload should be deployed" }, { "name": "Scaling/Upgrade Policy", "description": "Configure how pods are replaced when configuration is upgraded" }, { "name": "Restart Policy", "description": "Configure when pod should be restarted in case of failure" }, { "name": "Resource Reservation", "description": "Specify resources to be allocated to workload" }, { "name": "Advanced DNS Settings", "description": "Configure DNS settings" }, { "name": "Resource Limits", "description": "Set CPU/memory limits for Kubernetes Pod" } ], "portals": { "web_portal": { "protocols": [ "http" ], "host": [ "$node_ip" ], "ports": [ "$variable-plexServiceTCP.port" ], "path": "/web" } }, "questions": [ { "variable": "enablePlexPass", "label": "Use PlexPass", "group": "Plex Configuration", "schema": { "type": "boolean", "default": false } }, { "variable": "dnsConfig", "label": "DNS Configuration", "group": "Advanced DNS Settings", "schema": { "type": "dict", "attrs": [ { "variable": "options", "label": "DNS Options", "schema": { "type": "list", "items": [ { "variable": "optionsEntry", "label": "Option Entry Configuration", "schema": { "type": "dict", "attrs": [ { "variable": "name", "label": "Option Name", "schema": { "type": "string", "required": true } }, { "variable": "value", "label": "Option Value", "schema": { "type": "string", "required": true } } ] } } ] } } ] } }, { "variable": "claimToken", "label": "Plex Claim Token", "group": "Plex Configuration", "description": "The claim token for the server to obtain a real server token. If not provided, server is will not be automatically logged in. If server is already logged in, this parameter is ignored. You can obtain a claim token to login your server to your plex account by visiting https://www.plex.tv/claim.", "schema": { "type": "string", "default": "" } }, { "variable": "hostNetwork", "label": "Configure Host Network", "group": "Networking", "schema": { "type": "boolean", "default": false } }, { "variable": "environmentVariables", "label": "Environment Variables for Plex", "group": "Plex Configuration", "schema": { "type": "list", "default": [], "items": [ { "variable": "environmentVariable", "label": "Environment Variable", "schema": { "type": "dict", "attrs": [ { "variable": "name", "label": "Name", "schema": { "type": "string" } }, { "variable": "value", "label": "Value", "schema": { "type": "string" } } ] } } ] } }, { "variable": "timezone", "label": "Plex container timezone", "group": "Plex Configuration", "schema": { "type": "string", "default": "America/Los_Angeles", "$ref": [ "definitions/timezone" ], "enum": [ { "value": "Asia/Damascus", "description": "'Asia/Damascus' timezone" }, { "value": "Asia/Saigon", "description": "'Asia/Saigon' timezone" } ] } }, { "variable": "updateStrategy", "description": "Upgrade Policy", "label": "Update Strategy", "group": "Scaling/Upgrade Policy", "schema": { "type": "string", "default": "Recreate", "enum": [ { "value": "RollingUpdate", "description": "Create new pods and then kill old ones" }, { "value": "Recreate", "description": "Kill existing pods before creating new ones" } ] } }, { "variable": "plexServiceTCP", "label": "Configure Plex TCP Service", "group": "Networking", "schema": { "type": "dict", "attrs": [ { "variable": "port", "label": "Port to expose for Plex UI", "schema": { "type": "int", "min": 9000, "max": 65535, "default": 32400 } } ] } }, { "variable": "gpuConfiguration", "label": "GPU Configuration", "group": "Resource Reservation", "schema": { "type": "dict", "$ref": [ "definitions/gpuConfiguration" ], "attrs": [] } }, { "variable": "appVolumeMounts", "label": "Plex Storage", "group": "Storage", "schema": { "type": "dict", "attrs": [ { "variable": "transcode", "label": "Transcode Volume", "schema": { "type": "dict", "attrs": [ { "variable": "datasetName", "label": "Plex Transcode Volume Name", "schema": { "type": "string", "$ref": [ "normalize/ixVolume" ], "show_if": [ [ "hostPathEnabled", "=", false ] ], "default": "ix-plex_transcode", "hidden": true, "editable": false } }, { "variable": "mountPath", "label": "Plex Transcode Mount Path", "description": "Path where the volume will be mounted inside the pod", "schema": { "type": "path", "hidden": true, "editable": false, "default": "/transcode" } }, { "variable": "hostPathEnabled", "label": "Enable Host Path for Plex Transcode Volume", "schema": { "type": "boolean", "default": false, "show_subquestions_if": true, "subquestions": [ { "variable": "hostPath", "label": "Host Path for Plex Transcode Volume", "schema": { "type": "hostpath", "required": true, "$ref": [ "validations/lockedHostPath" ] } } ] } } ] } }, { "variable": "data", "label": "Data Volume", "schema": { "type": "dict", "attrs": [ { "variable": "datasetName", "label": "Plex Data Volume Name", "schema": { "type": "string", "$ref": [ "normalize/ixVolume" ], "show_if": [ [ "hostPathEnabled", "=", false ] ], "default": "ix-plex_data", "editable": false, "hidden": true } }, { "variable": "mountPath", "label": "Plex Data Mount Path", "description": "Path where the volume will be mounted inside the pod", "schema": { "type": "path", "hidden": true, "editable": false, "default": "/data" } }, { "variable": "hostPathEnabled", "label": "Enable Host Path for Plex Data Volume", "schema": { "type": "boolean", "default": false, "show_subquestions_if": true, "subquestions": [ { "variable": "hostPath", "label": "Host Path for Plex Data Volume", "schema": { "type": "hostpath", "required": true, "$ref": [ "validations/lockedHostPath" ] } } ] } } ] } }, { "variable": "config", "label": "Config Volume", "schema": { "type": "dict", "attrs": [ { "variable": "datasetName", "label": "Plex Config Volume Name", "schema": { "type": "string", "$ref": [ "normalize/ixVolume" ], "show_if": [ [ "hostPathEnabled", "=", false ] ], "default": "ix-plex_config", "editable": false, "hidden": true } }, { "variable": "mountPath", "label": "Plex Config Mount Path", "description": "Path where the volume will be mounted inside the pod", "schema": { "type": "path", "editable": false, "hidden": true, "default": "/config" } }, { "variable": "hostPathEnabled", "label": "Enable Host Path for Plex Config Volume", "schema": { "type": "boolean", "default": false, "show_subquestions_if": true, "subquestions": [ { "variable": "hostPath", "label": "Host Path for Plex Config Volume", "schema": { "type": "hostpath", "required": true, "$ref": [ "validations/lockedHostPath" ] } } ] } } ] } }, { "variable": "shared", "label": "Shared Volume", "schema": { "type": "dict", "hidden": true, "attrs": [ { "variable": "emptyDir", "label": "Temporary Volume", "schema": { "type": "boolean", "default": true, "editable": false } }, { "variable": "mountPath", "label": "Plex Shared Mount Path", "description": "Path where the volume will be mounted inside the pod", "schema": { "type": "path", "editable": false, "default": "/shared" } } ] } }, { "variable": "shared-logs", "label": "Shared Logs Volume", "schema": { "type": "dict", "hidden": true, "attrs": [ { "variable": "emptyDir", "label": "Temporary Volume", "schema": { "type": "boolean", "default": true, "editable": false } }, { "variable": "mountPath", "label": "Plex Shared Logs Mount Path", "description": "Path where the volume will be mounted inside the pod", "schema": { "type": "path", "editable": false, "default": "/config/Library/Application Support/Plex Media Server/Logs" } } ] } } ] } }, { "variable": "extraAppVolumeMounts", "label": "Plex Extra Host Path Volumes", "group": "Storage", "schema": { "type": "list", "items": [ { "variable": "extraAppVolume", "label": "Plex Host Path Volume", "description": "Add an extra host path volume for plex application", "schema": { "type": "dict", "attrs": [ { "variable": "mountPath", "label": "Mount Path in Pod", "description": "Path where the volume will be mounted inside the pod", "schema": { "type": "path", "required": true } }, { "variable": "hostPath", "label": "Host Path", "description": "Host path", "schema": { "type": "hostpath", "required": true, "$ref": [ "validations/lockedHostPath" ] } }, { "variable": "readOnly", "label": "Read Only", "description": "Mount hostpath in read-only mode", "schema": { "type": "boolean", "default": false } } ] } } ] } }, { "variable": "enableResourceLimits", "label": "Enable Pod resource limits", "group": "Resource Limits", "schema": { "type": "boolean", "default": false } }, { "variable": "cpuLimit", "label": "CPU Limit", "description": "CPU resource limit allow plain integer values with suffix m(milli) e.g 1000m, 100.", "group": "Resource Limits", "schema": { "type": "string", "show_if": [ [ "enableResourceLimits", "=", true ] ], "valid_chars": "^\\d+(?:\\.\\d+(?!.*m$)|m?$)", "default": "4000m" } }, { "variable": "memLimit", "label": "Memory Limit", "group": "Resource Limits", "description": "Memory limits is specified by number of bytes. Followed by quantity suffix like E,P,T,G,M,k and Ei,Pi,Ti,Mi,Gi,Ki can also be used. e.g 129e6, 129M, 128974848000m, 123Mi", "schema": { "type": "string", "show_if": [ [ "enableResourceLimits", "=", true ] ], "valid_chars": "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$", "default": "8Gi" } } ] }, "app_readme": "

Plex

\n

Plex chart is a chart designed to deploy plex in a TrueNAS SCALE kubernetes cluster.

", "detailed_readme": "

Plex Media Server helm chart

\n

Configuration

\n

Please refer to questions.yaml for a detailed overview on supported configurable items.

", "changelog": null } }