文档配置

Rust · 0.1.0

部署管理的配置

在启动时从挂载文件载入权威配置。

文件发现

服务在启动时读取 /etc/secrets 下支持的直接子文件。身份提供方文件命名为 memos-idp-<label>.json;实例设置文件命名为 memos-instance-setting-<label>.json。标签使用小写短横线格式。每个文件只包含一个 protobuf JSON 资源,不使用外层包装或列表。未知字段、无效资源或重复稳定标识可能导致启动失败。

运行期配置归属

部署文件在进程生命周期内覆盖相同标识的数据库资源,不会作为设置导入数据库。界面和 API 对部署管理资源的写入会被拒绝。修改文件需要重启进程;删除文件后重启会重新使用数据库中的设置,而不是删除该设置。

保护并验证

使用只读挂载和严格权限。文件可能包含提供方凭据,不要把内容放入公开文档或日志。支持的设置组包括 ACCESS、GENERAL、STORAGE、MEMO_RELATED、NOTIFICATION 和 AI。应依据源码中对应的 store protobuf 定义验证;公开 API 的响应结构并不自动等同于部署文件结构。

从一个不含密钥的 ACCESS 文件开始

先准备部署文件目录,把以下 JSON 保存为 memos-instance-setting-access.json。它是 store protobuf 资源:key 指定配置组,accessSetting 提供匹配的内容。本例明确启用私人实例访问,但不会创建用户、撤销已有分享令牌,也不会逐字段合并数据库中的 ACCESS 配置。

{
  "key": "ACCESS",
  "accessSetting": {
    "accessMode": "INSTANCE_ACCESS_MODE_PRIVATE"
  }
}

挂载、重启并验证实际行为

把目录以只读方式挂到 /etc/secrets。沿用 Docker Compose 起步模板时,在现有数据卷旁加入下面的绑定挂载,然后运行 docker compose up -d 重建服务,保留数据卷。文件必须能被运行 UID/GID 读取;主机权限过严而导致无法读取,也会阻止启动。JSON 语法正确不等于 protobuf 字段及跨配置约束已验证。

# Under services.memos in compose.yaml:
volumes:
  - memos-data:/var/opt/memos
  - ./deployment-secrets:/etc/secrets:ro

替换整个配置组,不是局部补丁

文件提供 GENERAL、STORAGE、AI 等配置组时,省略的标量字段会采用 protobuf 默认值,不会保留数据库值;空密钥也不会保留已存密钥。加入覆盖前应审核整个配置组。未知字段、重复 key、key 与内容不匹配或文件超过 1 MiB 都会导致启动失败。重启后检查健康状态及预期的退出登录访问行为;通过应用修改被覆盖的组应收到 FAILED_PRECONDITION。要恢复数据库配置,移除对应文件后重启,并再次检查策略,因为旧数据库值会重新生效。