Notarium文档
文档版本: latest

环境变量

Notarium 通过环境变量进行配置。默认值开箱即用——本地运行无需填写任何内容:把 .env.example 复制成 .env,只改你确实需要的那几行即可。Docker 栈会把 .env 原样传入容器(值不会被固化进镜像),因此同一个文件既描述你的本地实例,也描述你的生产实例。

cp .env.example .env      # 默认值即可用——只改你需要的

下面是完整参考。部分变量直接写在 .env.example 里;另一部分(搜索的精细调优)在代码中带有默认值,并未在示例文件中列出——这些会单独标注。

核心

基础项:端口、认证模式,以及元数据库和空间的位置。

变量用途默认值示例
DATA_DIR唯一的数据旋钮:其余一切都由这个根目录派生而来——元数据库、索引、笔记、产物。未设置 → 采用一个合理的默认值。/data(Docker);~/.local/share/notarium(宿主机)DATA_DIR=/srv/notarium
PORT后端监听的端口;单个 Fastify 监听器同时服务 /api/mcp 和 SPA 的静态资源。3000PORT=3000
AUTH_MODE认证模式:password(登录加上首次运行的设置界面,需要元数据库)或 none(面向桌面/开发/可信内网的单一全权限主体,无登录界面)。passwordAUTH_MODE=none
META_DB_URL元数据库:身份、修订日志、空间注册表、认证、项目。默认是 DATA_DIR 下的 sqlite,因此 password 模式无需配置即可工作。可选:仅当你要把元数据状态迁移到外部 Postgres(共享状态、HA)时才设置。sqlite:<DATA_DIR>/meta.dbMETA_DB_URL=postgres://user:pass@db:5432/notarium
SPACES_ROOT每个空间即一个文件夹的根目录;设置后即可在运行时从 UI 创建空间。可选:默认为 <DATA_DIR>/spaces,仅当你的笔记位于数据根目录之外时才设置。<DATA_DIR>/spacesSPACES_ROOT=/mnt/notes
SPACES_CONFIG显式的空间拓扑:内联 JSON 或指向某个 JSON 文件的路径。会覆盖单空间相关变量。未设置SPACES_CONFIG=/data/spaces.json
ENGINE_DATA_DIR引擎存放派生索引的位置——每个空间一个文件。文件名沿用空间的文件夹名,空间改名时也不会跟着变。删除该目录 → 启动时重建索引;索引是可恢复的。可选:默认为 <DATA_DIR>/engine,设置它可把索引挪到另一块磁盘。<DATA_DIR>/engineENGINE_DATA_DIR=/mnt/ssd/engine
JOBS_DATA_DIR任务目录:异步导出的产物(派生数据,按 TTL 清理)以及未完成导入所上传的文件——后者与自己的任务同生共死,因此需要纳入备份。可选:默认为 <DATA_DIR>/jobs,设置它可挪到另一块磁盘。<DATA_DIR>/jobsJOBS_DATA_DIR=/mnt/ssd/jobs
SPACE_IDLE_EVICT_SECONDS逐出空闲空间的读模型。设为 0 表示保持热态;拥有活跃 SSE 连接的空间永不被逐出。0SPACE_IDLE_EVICT_SECONDS=900
SYNC_POLL_SECONDS轮询磁盘上外部改动的间隔(每次轮询都是一次完整的空间重扫)。设为 0 关闭轮询。对于无法监听的挂载(网络卷、内存盘),实际间隔上限为 60 秒。120SYNC_POLL_SECONDS=0
PUBLIC_BASE_URL实例在反向代理之后的规范外部地址——用于 MCP 连接器的 OAuth 元数据。不设置时,地址将从代理转发的请求头推导。未设置PUBLIC_BASE_URL=https://notes.example.com
TRUST_PROXY以逗号分隔的紧邻的上游代理 IP/CIDR 列表——据此推导出真实的客户端 IP,用于登录限流和放行新的 OAuth 客户端。不设置即采用安全默认:X-Forwarded-For 不影响限流。布尔值、跳数、具名网段以及全地址网段(/0)会在启动时被拒绝。未设置TRUST_PROXY=172.18.0.0/16
元数据库 vs. 文件

磁盘上存放着两种不同的东西。SPACES_ROOTMarkdown 事实来源(你的笔记,每个空间一个文件夹)。META_DB_URL 是元数据库:无法从文件派生出来的部分(用户、访问权限、版本历史)。详见自托管一节。

单空间(裸宿主机,无 Docker)

用于在不使用 SPACES_CONFIG 且不使用 SPACES_ROOT 的情况下运行单个空间(例如无 Docker 的本地裸运行)。

变量用途默认值示例
ENGINE单空间的引擎。唯一取值是 notarium;可以不设置。notariumENGINE=notarium
NOTES_DIR单空间笔记文件夹的绝对路径(单空间模式)。未设置NOTES_DIR=/home/me/notes

语义搜索

词法全文搜索(FTS)始终可用,无需任何配置。语义(向量)搜索和混合搜索需自行开启:一套沉重的原生栈(onnxruntime + sqlite-vec,磁盘占用约 660 MB)外加 bge-m3 嵌入模型(磁盘占用约 600 MB,内存数百 MB)。下面这些变量在代码中带有默认值,并未写入 .env.example

变量用途默认值示例
VECTOR_SEARCHon/off——开启语义搜索和混合融合。原生栈缺失时,on 会回退到全文搜索——不报错。on(代码),off(发布镜像)VECTOR_SEARCH=on
EMBED_MODEL嵌入模型的 id(transformers.js/ONNX)。需与 EMBED_DIMENSIONS 一起设置。Xenova/bge-m3EMBED_MODEL=Xenova/multilingual-e5-small
EMBED_DIMENSIONS向量维度;必须与模型匹配(bge-m3 为 1024,e5-small 为 384)。不匹配时直接失败(fail closed):该笔记仍仅用 FTS。1024EMBED_DIMENSIONS=384
EMBED_DTYPE模型量化:fp32 / fp16 / q8 / q4q8EMBED_DTYPE=fp16
EMBED_THREADS每个后台索引工作线程的 ONNX intra-op 线程数(一个由 EMBED_WORKERS 个工作线程组成的池)。每个工作线程 1(无池回退时——核数的一半)EMBED_THREADS=2
EMBED_WORKERS嵌入 worker_threads 池的大小 = 后台索引在多核上的并行度。每个工作线程各持有一份模型副本(这会影响内存)。max(1, min(核数−2, 4))EMBED_WORKERS=8
EMBED_QUERY_PREFIX / EMBED_PASSAGE_PREFIX非对称模型(e5)的前缀。对于对称的 bge-m3 请保持不设置——否则质量会以你察觉不到的方式下降。未设置EMBED_QUERY_PREFIX="query: "
EMBED_CPU_MEM_ARENAon/offoff 将 bge-m3 的占用稳定压在约 1.9 GB 内存——用于在内存紧张、无 swap 的机器上防 OOM(设为 on 时 arena 可能悄悄涨到数 GB)。onEMBED_CPU_MEM_ARENA=off
GRAPH_BOOSTon/off——第三条 RRF 通道(沿链接的图谱加权,1 跳维基链接)。当 VECTOR_SEARCH=off 时不生效。offGRAPH_BOOST=on
两个相互独立的开关

要让语义在本地生效,你需要两者都满足:原生栈已安装make deps-vector;默认的 make deps 不安装它,发布镜像则始终带上它) VECTOR_SEARCH=on。若原生栈缺失,on 会回退到词法全文搜索——不报错。详见搜索搜索设置两节。

备份与恢复

内置的 backupbackup verifyrestore 命令无需任何配置即可使用。下面这些变量只在容器根目录以只读方式挂载、或数据量明显超出常规时才用得上。详见备份与恢复

变量用途默认值示例
NOTARIUM_BACKUP_TMPDIR存放备份、校验与恢复过程中间文件的目录。若容器根目录是只读的,或 /tmp 空间吃紧,就设置它:流式备份可能临时需要放下归档本身,外加两份展开的中间产物。/tmpNOTARIUM_BACKUP_TMPDIR=/mnt/scratch
NOTARIUM_BACKUP_MAX_BYTES体积上限——压缩后的输入和展开后的有效载荷都受它约束。用于防 zip 炸弹;只有受信任的大型部署才会调高。64 GiBNOTARIUM_BACKUP_MAX_BYTES=137438953472
NOTARIUM_BACKUP_MAX_ENTRIES归档中条目数量的上限。1000000NOTARIUM_BACKUP_MAX_ENTRIES=2000000
NOTARIUM_BACKUP_MAX_METADATA_BYTES针对文件名、ZIP 内部结构和 manifest.json 的单独内存上限。32 MiBNOTARIUM_BACKUP_MAX_METADATA_BYTES=67108864

Docker 与构建

变量用途默认值示例
IMAGE / TAGdocker compose / make up 使用的镜像引用。主要安装路径是公共镜像 docouno/notarium:latest;覆盖该坐标即可使用你自己的镜像仓库或某个特定标签。docouno/notarium:latestIMAGE=docouno/notarium TAG=latest
GIT_SHA / BUILD_TIME构建参数;会内联进 GET /api/aboutSettings → About 标签页。不提供时——nullGIT_SHA=$(git rev-parse --short HEAD)
镜像与从源码构建

docouno/notarium:latest 是公共镜像和主要安装路径;IMAGE / TAG 决定 docker compose / make up 会拉取哪个镜像。如果镜像尚未从镜像仓库拉取——就从主代码仓库的源码构建:make up(行为完全一致)。

另见