Files
MoviePilot/docs/secrets.md

61 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 使用 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 示例
```yaml
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 挂载并重启。