安装
Notarium 以单个自包含镜像的形式交付:一个 Node 进程在同一端口(默认 3000)上同时提供 REST API、面向智能体的 MCP 端点和编译好的 Web 界面。无需任何外部服务——不用数据库、不用消息代理、也不用独立的搜索引擎:知识引擎就跑在同一个进程里。全部状态都存放在单个 /data 数据卷中:元数据库、派生索引、你的 Markdown 文件(唯一可信来源)以及导出产物。
只要 Docker(或 Docker Desktop)和一个空闲端口即可。无需单独安装 Node、数据库或向量索引——一切都在镜像里。
运行镜像
最快的方式是用预构建镜像启动一个容器:
docker run -d --name notarium \
-p 3000:3000 \
-v notarium-data:/data \
docouno/notarium:latest
单个 /data 数据卷承载全部状态:元数据库、索引、你的笔记以及导出产物。没有别的要配置的——端口 3000 和数据路径 /data 都已内置在镜像中。重新创建容器后,数据卷依然保留;:3000 左侧的端口可以改成任意一个空闲端口。
docker run 后面不用再追加命令:镜像的入口点就是内置的 notarium CLI,默认执行 start。运维用的命令也都在这套 CLI 里——backup、restore、admin、healthcheck、version。见镜像 CLI。
使用 Docker Compose
如果这个实例你打算长期留用,写成 compose 文件会更省事:改起来方便,也便于纳入版本控制,而 restart 会在宿主机重启后把容器自动拉起来。
services:
notarium:
image: docouno/notarium:latest
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- notarium-data:/data
volumes:
notarium-data:
把它保存为 compose.yaml,用 docker compose up -d 启动。命名数据卷 notarium-data 独立于容器存在:docker compose down 不会动它,只有显式执行 docker volume rm 才会把它删掉。
环境变量写在服务的 environment: 块里。如果你更愿意单独用一个文件放它们,就在同一个服务块里再加一行 env_file: .env——光把 .env 放在 compose 文件旁边,它并不会自己进到容器里:Docker Compose 只会把它代入 compose 文件本身的文本。完整清单见环境变量。
首次运行
打开 http://localhost:3000,迎接你的是首次运行的设置界面。实例默认运行在 password 模式,第一位访客会创建所有者——唯一拥有管理员权限、并对其所创建空间拥有所有权的账户。没有预置密码;所有者注册完成后,设置流程就此永久关闭。关于各模式的更多说明,见身份认证。
数据卷
| 数据卷 | 存放内容 | 性质 |
|---|---|---|
/data | 你的 Markdown 文件(/data/spaces,每个空间一个文件夹)、元数据库(/data/meta.db——标识符、版本历史、用户、访问权限)、引擎的派生索引(/data/engine)以及导出产物。 | 文件是唯一可信来源(file-first 原则);元数据库无法从文件推导得出;索引是派生物,重建一次即可恢复。 |
务必守护好这个数据卷本身:它一旦丢失,你的数据也随之而去。/data/engine 里的索引丢了可以从文件重建,但元数据库(/data/meta.db——历史、用户、访问权限)和笔记本身(/data/spaces)则无处可恢复——给它们做备份是必须的。如何在不停服的前提下取得一份经过校验的备份,见备份与恢复。
从源码构建
如果你在使用 Notarium 仓库,Docker 的统一入口是 make:
cp .env.example .env # 默认值即可用——无需填写任何内容
make up # 本地运行生产镜像 → http://localhost:3000
make dev # 带热重载(HMR)的开发栈
常用命令:make logs(日志)、make ps(状态)、make down(停止并移除)、make sh(进入容器 shell)。
无镜像仓库安装(离线隔离环境)
要部署到隔离环境,可以把镜像当作文件搬过去,无需访问镜像仓库:
make image # 构建镜像
make save # 导出为 notarium-<version>.tar.gz
# 将归档文件转移到目标主机,然后:
docker load < notarium-<version>.tar.gz # 加载镜像
之后用你自己的 compose/.env 把它跑起来——镜像仓库坐标并未固化在镜像里。
下一步是按你的需要调整实例:见配置。