mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-10-28 19:06:36 +08:00
3.4 KiB
3.4 KiB
使用 Docker / Kubernetes Secrets
MoviePilot V3 支持把部署配置作为 UTF-8 文件挂载到 /run/secrets/,例如
/run/secrets/API_TOKEN、/run/secrets/GITHUB_TOKEN 或
/run/secrets/DB_POSTGRESQL_PASSWORD。文件内容直接进入配置解析,不导出为进程环境变量,
不复制到 app.env。此能力针对主程序的部署配置,不读取插件数据库配置。
配置优先级为:显式构造参数 > 进程环境变量 > <CONFIG_DIR>/app.env > secret 文件 > 字段默认值。
Web 设置通常写入 app.env;环境变量管理的项仍拒绝界面写回。
只要目录中存在同名 secret 项(包括无效文件、目录或被高优先级来源遮蔽的项),
界面与自动修正都不会为它写入 app.env,并提示修改文件后重启。原值不变的提交无需更新。
目录与格式
- 默认读取
/run/secrets,目录不存在时静默使用其他来源与默认值。 - 在进程环境变量中设置
MOVIEPILOT_SECRETS_DIR可更换目录,兼容SECRETS_DIR;前者优先。 显式设为空字符串、false、off或0可关闭 secrets。目录开关在模块导入时确定, 不从app.env或 secret 文件读取。CONFIG_DIR仍应在进程环境中设置。 - 文件名必须与配置项大小写完全一致,例如
API_TOKEN,不能写成api_token。 - 文件写裸值,不要照搬
app.env的外层引号;引号属于文件内容。 - 内容使用 UTF-8,允许 UTF-8 BOM;首尾空白和末尾换行会去除,内部换行保留。
- list / dict 字段使用 JSON,例如
ALLOWED_HOSTS的内容为["https://mp.example.com"],DB_CONNECT_ARGS的内容为{"connect_timeout": 10}。 - 空文件、非法 UTF-8、非法 JSON、类型或字段约束错误、过短的
API_TOKEN会按项跳过, 日志只提示字段名。API_TOKEN需至少 16 个字符;无其他有效来源时保持未配置, 不为无效的外部令牌生成另一份密钥。错误目录或读取权限也会告警,请修正挂载和运行用户权限。 - 支持 K8s 投影文件的符号链接。轮换文件内容后必须重启 MoviePilot;现有进程不会热加载。
- 当前不支持
XXX_FILE约定。单项任意路径可通过挂载到 secrets 目录中的同名文件实现。
Compose 示例
services:
moviepilot:
image: jxxghp/moviepilot-v3:latest
volumes:
- ./config:/config
secrets:
- source: moviepilot_api_token
target: API_TOKEN
- source: moviepilot_github_token
target: GITHUB_TOKEN
secrets:
moviepilot_api_token:
file: ./private/api_token
moviepilot_github_token:
file: ./private/github_token
把实际密钥放到 ./private/ 对应文件并从版本管理中排除;Compose 文件只引用路径。
Docker Swarm 可将顶层声明改为已有的外部 secret;Kubernetes 可把 Secret 的 key 按配置名投影到
/run/secrets。按部署平台提供合适的只读权限,确保 MoviePilot 运行用户能够读取。
从旧配置迁移
先准备 secret 文件,再从编排环境变量和 app.env 中移除同名值,最后重启。
高优先级值仍存在时会继续生效,轮换 secret 无法覆盖它。已经写在 app.env 里的历史值
需要手工删除整行;界面“清空”可能写入字段默认值,不代表删除覆盖项。
外部管理的配置不能通过 Web 或 CLI 改为本地配置;需要先移除 secret 挂载并重启。