为什么要自建
重要说明:Cognote 是本地优先的笔记应用,不提供、也不运营任何官方云服务。 本地功能(检索 / 编辑 / 公式 / 主题 / 分享 / PDF)无需任何服务器即可完整使用。 只有当你需要「多设备同步」时,才需要自己部署下述同步服务端——你的笔记只会保存在你自己的服务器上。
- 数据主权:同步数据存放在你的 VPS / 内网机器 / NAS,任何人(包括作者)都无法访问;
- 零成本:服务端只用 Node.js 内置模块,无需数据库、无需 npm install,1核512M 的小机器即可跑;
- 可迁移:
data/目录就是全部状态——就是普通文件,随时备份、换机器、用文件管理器查看。
架构一览
1. 准备
- 一台服务器:公网 VPS(推荐)或内网机器/NAS;需已安装 Node.js ≥ 16(推荐 18/20/22)。
- 验证:
node -v输出版本号即可。没有 Node 的话,CentOS/宝塔可用「Node 版本管理器」安装,Ubuntu 可用apt install nodejs npm或 nvm。 - 下载同步服务端包:Cognote-Sync-Server-v1.0.0.zip(18 KB,含
server.js/share-viewer.html/ 部署 README);也可从 GitHub 仓库 的sync-server/目录获取源码。
2. 安装与配置
① 上传并解压
mkdir -p /www/wwwroot/cognote-sync
# 将压缩包解压到该目录(server.js、share-viewer.html、package.json 等应在本层)
cd /www/wwwroot/cognote-sync
unzip Cognote-Sync-Server-v1.0.0.zip -d .
② 生成配置
复制示例配置为 config.json,并生成一个随机 Token(Token 相当于密码,务必保密):
cp config.example.json config.json
# 生成随机 Token(32 位十六进制)
TOKEN=$(node -e "console.log(require('crypto').randomBytes(24).toString('hex'))")
echo $TOKEN
# 编辑 config.json,至少填入 token;其余按需
cat > config.json <
| 配置项 | 说明 |
|---|---|
token | 客户端访问凭证,泄露即等于泄露全部笔记,可随时改掉并重启 |
port / host | 建议保持 127.0.0.1:8600 只监听本机,由 nginx 对外(见第 4 步) |
dataDir | 可选,数据目录;默认为程序目录下的 data/ |
maxFileMb | 单文件大小上限(默认 20 MB),附件/图片同步受此限制 |
③ 前台试运行
node server.js
# [sync] 数据目录: /www/wwwroot/cognote-sync/data
# [sync] 已同步文件数: 0, 版本: 1
另一个终端验证连通性(替换成你的 Token):
curl "http://127.0.0.1:8600/api/ping?token=你的TOKEN"
# {"ok":true,"serverTime":...,"version":1,"fileCount":0}
看到 "ok":true 即成功,Ctrl+C 停止,进入下一步。
3. systemd 守护(开机自启 + 崩溃自动重启)
cat > /etc/systemd/system/cognote-sync.service <<'UNIT'
[Unit]
Description=Cognote Cloud Sync Server
After=network.target
[Service]
Type=simple
WorkingDirectory=/www/wwwroot/cognote-sync
ExecStart=/usr/bin/node /www/wwwroot/cognote-sync/server.js
Restart=always
RestartSec=3
User=www
Group=www
[Install]
WantedBy=multi-user.target
UNIT
systemctl daemon-reload
systemctl enable --now cognote-sync
systemctl status cognote-sync # 应显示 active (running)
说明:ExecStart 中的 node 路径用 which node 查询后填入(宝塔 Node 版本管理器通常为
/www/server/nodejs/vXX/bin/node);用 node 直接运行而非 systemd 托管也可以,
但不保证断线重连与开机自启。
4. nginx 反向代理(走 80 端口)
推荐通过 nginx 把同步服务挂到 /knowledge-sync/ 子路径,客户端只填一个 HTTP 地址,后续加 HTTPS 也只需改这一处:
cat > /www/server/panel/vhost/nginx/cognote-sync.conf <<'NGINX'
server {
listen 80;
server_name 你的服务器IP或域名;
client_max_body_size 100m; # 同步与附件上传大小
location = /knowledge-sync { return 301 /knowledge-sync/; }
location /knowledge-sync/ {
proxy_pass http://127.0.0.1:8600/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30s;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
NGINX
nginx -t && nginx -s reload # 宝塔: /www/server/nginx/sbin/nginx -t && ... -s reload
若不想用 nginx,也可把 config.json 的 host 改为 0.0.0.0 直接开放 8600 端口,
客户端地址填 http://你的服务器IP:8600——但这样是明文裸奔且无 HTTPS 可能,推荐还是走 nginx。
5. 客户端配置(Cognote 应用内)
启动 Cognote → 右上角「⚙️ 设置」→「☁️ 云端同步」:
| 配置项 | 填写内容 |
|---|---|
| 启用云端同步 | 勾选 |
| 云端服务器地址 | http://你的服务器IP/knowledge-sync(注意结尾不要带斜杠) |
| 云端访问 Token | 第 2 步 config.json 里的 token |
| 本地云端同步目录 | 留空 = 程序目录下的 云端同步/;也可指定任意本地目录 |
| 自动同步间隔 | 默认 60 秒 |
保存后目录树会出现「☁️ 云端同步」根分类:在它下面新建的分类与笔记会自动上传; 其它电脑用相同地址 + Token、相同的本地同步目录,即可同步同一份云端笔记。
6. 验证
- 设备 A:在「☁️ 云端同步」下新建一条笔记,等待一个同步周期(或手动点同步);
- 打开服务器数据目录确认文件已落盘:
ls -R /www/wwwroot/cognote-sync/data/files/; - 设备 B:配置相同地址与 Token → 目录树应出现同一条笔记;
- 断网/冲突场景:双方同时修改同一笔记时,修改时间新者胜出,落败方自动保存为「冲突副本」,数据不丢。
笔记分享
同步服务端同时承担分享能力(依赖云端目录中的笔记)。在 Cognote 中右键笔记或目录 → 分享:
- 生成「链接 + 查看密码」的公开阅读页,无需账号即可在手机浏览器打开;
- 有效期可选 1 / 7 / 30 天或长期,可随时停用(410)、恢复或删除;
- 密码错误 10 次锁定同 IP 10 分钟;附带浏览统计(打开次数、按天、每篇笔记阅读数);
- 分享链接格式:
http://你的服务器IP/knowledge-sync/s/viewer?id=<分享id>
分享页依赖 nginx 的 client_max_body_size(建议 ≥ 100m)与 proxy_read_timeout(建议 ≥ 300s),
见第 4 步配置;笔记中的相对路径图片会随分享一并打包,分享页可正常显示。
安全建议
- Token 即密码:不要提交到公开仓库、不要写进截图;泄露后改
config.json的token并systemctl restart cognote-sync; - 建议 HTTPS:公网上 HTTP 传输可被窃听。宝塔可一键申请证书,启用后客户端地址改为
https://域名/knowledge-sync; - 防火墙 / 安全组:只需放行 80(或你选择的端口),保持
host: 127.0.0.1不直接暴露 8600; - 备份:定期打包
data/目录即完成全部备份; - 系统与 Node.js 保持更新;不要把服务端目录放进 nginx 可直接下载的静态站点根(本部署为反代,不涉及)。
常见问题
客户端提示 401 / 同步失败
Token 不匹配:核对客户端填写的 Token 与服务器 config.json 完全一致(无空格、无引号);改完需重启服务。也检查地址结尾不要多带 /。
客户端提示 404 / 连接失败
① 地址是否少了 /knowledge-sync;② curl "http://127.0.0.1:8600/api/ping?token=…" 在服务器本机是否通;③ nginx 是否 reload、防火墙/云安全组是否放行 80。
两台设备内容不一样 / 出现「冲突副本」
这是保护机制:双方同时改同一笔记时保留两份——新版本生效,旧版本存为「冲突副本」文件,打开对比后手动合并、删除副本即可。
可以同步图片 / 附件吗?
可以。png/jpg/gif/webp/svg 等图片与常见文档类型都在同步范围内,受 maxFileMb(默认 20MB)限制。笔记中 figures/… 相对路径图片会随笔记一起同步。
不用公网服务器,能在家里内网自建吗?
可以。在内网一台常开机器(含 NAS、树莓派)部署,设备在同一局域网即可同步;出门在外则需配合内网穿透(如 Tailscale / frp)或端口映射,方式与本文相同。
同步服务端要收流量费吗?
服务端程序免费(MIT)。它跑在你自己的服务器上,产生的流量与磁盘占用就是你服务器本身的资源,与作者无关,也不存在任何订阅费。
部署完成 🎉 回到 Cognote 首页 · 或 下载客户端