Note Mark 配置参数详解(基于 1.1.1 实测)
Note Mark 1.1.1 全部环境变量配置项逐项详解:监听与 Unix Socket、认证密钥与有效期、访问控制开关、文件上传限制、OIDC 单点登录、日志与运行模式,附组合配置示例与启动校验排障实录。
Note Mark 配置参数详解(基于 1.1.1 实测)
Note Mark 全部行为通过环境变量配置,无配置文件。本文基于 1.1.1 源码配置定义逐项核对,并在 Ubuntu 22.04 服务器实测关键项。阅读前置:完成《Note Mark Docker Compose 部署指南》中的基础部署。
一、配置模型总览
Note Mark 在启动时解析环境变量并做严格校验,任一必填项缺失或校验失败都会直接拒绝启动,错误信息打印在标准输出的 JSON 日志中。配置命名有两个规则:
- 嵌套分组用双下划线:如
BIND__HOST表示 Bind 分组下的 Host,AUTH_TOKEN__SECRET表示 AuthToken 分组下的 Secret; - 绝大多数项有默认值:真正必填的只有
AUTH_TOKEN__SECRET、DATA_PATH、PUBLIC_URL三项(官方发行版内已预置BIND__HOST=0.0.0.0、BIND__PORT=8080、DATA_PATH=/data、STATIC_PATH=/static,因此 compose 里只需补业务项)。
二、服务监听(BIND__ 分组)
| 环境变量 | 默认值 | 说明 |
|---|---|---|
BIND__HOST | 127.0.0.1 | TCP 监听地址。裸进程运行时默认只听本机回环,对外提供服务必须显式设为 0.0.0.0;官方发行版内已预置。 |
BIND__PORT | 8080 | TCP 监听端口,1~65535。 |
BIND__UNIX_SOCKET | 空(不启用) | Unix Socket 文件路径。实测设置后服务转为只监听 Socket,覆盖 TCP 监听(启动日志输出 Serving on /data/nm.sock,8080 不再被占用)。路径所在目录需对运行账号可写,官方场景一般指向数据目录内。 |
Socket 模式典型用途:与 Nginx/Caddy 同机反向代理时免去 TCP 端口暴露,代理侧以 unix: 方式上游对接。Socket 文件随服务停止自动清理。
三、认证与令牌(AUTH_TOKEN__ 分组)
| 环境变量 | 默认值 | 说明 |
|---|---|---|
AUTH_TOKEN__SECRET | 必填 | JWT 签名密钥,值需 Base64 编码,解码后长度不足 32 字节启动失败。推荐 openssl rand -base64 96 生成。所有登录态(Bearer 令牌与会话 Cookie)都由它签名。 |
AUTH_TOKEN__EXPIRY | 259200 | 访问令牌有效期,单位秒,默认 259200 即 3 天。实测登录接口返回 expires_in: 259200 与此对应。 |
密钥泄露等同于全部用户凭证泄露,轮换密钥会使所有在线会话失效,可在安全事件中作为强制登出手段。
四、路径与前端资源
| 环境变量 | 默认值 | 说明 |
|---|---|---|
DATA_PATH | 必填 | 数据根目录,SQLite 数据库与全部笔记文件落在这里。官方发行版内预置 /data,配合命名卷挂载。 |
STATIC_PATH | 空 | 前端静态资源目录。官方发行版内预置 /static,自编译部署时指向构建产物目录;留空则不托管前端页面(纯 API 模式)。 |
CUSTOM_CSS_PATH | 空 | 自定义 CSS 文件路径,必须指向存在的文件(校验 file 类型)。设置后前端界面加载 /api/static/custom.css 时返回该文件内容。 |
CUSTOM_CSS_PATH 实测记录:挂载一个内容为 body{font-family:sans-serif} 的 custom.css 并配置路径后,请求 /api/static/custom.css 原样返回文件内容;未配置该项时同接口返回 HTTP 200 空响应体,前端样式不受影响,可放心留空。
五、站点身份与访问控制开关
| 环境变量 | 默认值 | 说明 |
|---|---|---|
PUBLIC_URL | 必填 | 对外访问基地址,如 http://192.168.1.200:8136。校验为合法 URL 且末尾不能带斜杠(实测带斜杠启动失败)。它同时是 CORS 允许来源与 OIDC 回跳地址的组成部分。 |
ENABLE_INTERNAL_SIGNUP | true | 是否开放站内注册。实测该值反映在 /api/info 的 allowInternalSignup 字段。纯私有部署建议关闭,用户改由 CLI 创建。 |
ENABLE_INTERNAL_LOGIN | true | 是否允许站内账号密码登录。接入 OIDC 后可关闭,强制走单点登录。 |
ENABLE_ANONYMOUS_USER_SEARCH | true | 未登录用户是否可用用户搜索接口。实测开启时匿名请求 /api/users/search?username=adm 返回 ["admin"]。介意用户名枚举的公开实例建议关闭。 |
六、上传与资源限制
| 环境变量 | 默认值 | 说明 |
|---|---|---|
FILE_SIZE_LIMIT | 12M | 单个笔记/附件内容上限,支持 K/M/G 后缀。上传超过限制的附件会被拒绝。 |
Note Mark 无独立数据库服务、无后台任务队列,内存占用主要来自笔记树缓存,小实例几百 MB 内存即可稳定运行。
七、OIDC 单点登录(OIDC__ 分组)
| 环境变量 | 默认值 | 说明 |
|---|---|---|
OIDC__DISPLAY_NAME | 分组启用时必填 | 登录页显示的提供商名称。 |
OIDC__PROVIDER_NAME | 分组启用时必填 | 提供商内部标识。 |
OIDC__ISSUER_URL | 分组启用时必填 | OIDC Issuer 地址(合法 URL 校验)。 |
OIDC__CLIENT_ID | 分组启用时必填 | 客户端 ID。 |
OIDC__ENABLE_USER_CREATION | true | OIDC 首次登录是否自动建号。关闭后需 CLI 预建账号并绑定映射。 |
五个 OIDC 变量是一个联动分组:配置组内任一项即视为启用 OIDC,组内必填项需全部给出,否则启动校验失败。已存在用户可通过 user add-oidc-mapping 子命令绑定外部身份。
八、日志与运行模式(LOGGING__ 分组及其他)
| 环境变量 | 默认值 | 说明 |
|---|---|---|
LOGGING__LEVEL | info | 日志级别,可选 debug/info/warn/warning/error,其余值启动失败。 |
LOGGING__ENABLE_JSON | true | 结构化 JSON 日志开关。实测默认输出 {"@timestamp":"...","log.level":"INFO","message":"..."} 格式,便于日志系统采集;设为 false 切换人类可读文本格式。 |
ENV_MODE | production | 运行模式,可选 production/development。development 模式日志会附带来源位置,便于排障。 |
九、组合配置示例
9.1 反向代理 + Unix Socket(推荐生产形态)
environment:
BIND__UNIX_SOCKET: "/data/nm.sock"
AUTH_TOKEN__SECRET: "<openssl rand -base64 96 生成>"
PUBLIC_URL: "https://notes.example.com"
ENABLE_INTERNAL_SIGNUP: "false"
LOGGING__LEVEL: "info"
Nginx 上游写法:
location / {
proxy_pass http://unix:/var/lib/docker/volumes/notemask_data/_data/nm.sock;
proxy_set_header Host $host;
}
9.2 纯内网小团队
environment:
BIND__HOST: "0.0.0.0"
BIND__PORT: "8080"
AUTH_TOKEN__SECRET: "<密钥>"
PUBLIC_URL: "http://192.168.1.200:8136"
ENABLE_ANONYMOUS_USER_SEARCH: "false"
FILE_SIZE_LIMIT: "50M"
9.3 接入 OIDC 强制单点登录
environment:
AUTH_TOKEN__SECRET: "<密钥>"
PUBLIC_URL: "https://notes.example.com"
ENABLE_INTERNAL_SIGNUP: "false"
ENABLE_INTERNAL_LOGIN: "false"
OIDC__DISPLAY_NAME: "公司统一登录"
OIDC__PROVIDER_NAME: "corp-sso"
OIDC__ISSUER_URL: "https://sso.example.com/realms/corp"
OIDC__CLIENT_ID: "note-mark"
十、排障实录
- 启动即退出,日志提示 validation failed:逐项核对必填三件套(SECRET/DATA_PATH/PUBLIC_URL)。实测最常见的两个坑是
PUBLIC_URL尾部带/、AUTH_TOKEN__SECRET解码后不足 32 字节。 - 服务正常但局域网其他机器访问不通:自编排环境漏设
BIND__HOST=0.0.0.0,默认回环监听导致,宿主机本机 curl 正常、外部超时。 - 改了笔记文件但页面树不更新:树缓存机制所致,执行
clear-cache(详见部署篇排障章节)。 - custom.css 不生效:确认
CUSTOM_CSS_PATH指向的文件在服务进程视角真实存在(校验规则是 file),并确认通过/api/static/custom.css访问返回的是文件内容而非空体;空体说明路径未生效。 - OIDC 配置后启动失败:检查 OIDC 分组是否只写了一半变量——启用分组后 DISPLAY_NAME/PROVIDER_NAME/ISSUER_URL/CLIENT_ID 四项缺一不可。
十一、下一篇
配置就绪后,可将空间、笔记与分享控制全部脚本化,详见《Note Mark REST API 使用详解》;组件背景回顾《Note Mark 介绍与选型指南:轻量级自托管 Markdown 笔记与分享服务》。