Obsidian - 使用 Share Note 分享笔记并自部署
# 一、前言
最近在整理 Obsidian 笔记时,经常会遇到一个小需求:想把某一篇笔记快速分享给别人,但又不想为了它单独搭建博客、导出 PDF 或复制到其它平台。
如果只是分享纯文本,复制粘贴当然可以。但 Obsidian 笔记里往往会有这些内容:
- 图片附件
- 代码块
- Callout 提示块
- 标签、任务列表
Dataview查询结果- 当前主题样式和自定义 CSS
- 笔记之间的内部链接
这时候手动搬运就有点麻烦了,格式容易丢,图片也要重新处理。这里介绍一个插件:Share Note (opens new window)。
它的目标很直接:在 Obsidian 里一键把当前笔记发布成网页,并尽量保持和本地笔记一致的显示效果。
本文主要介绍两部分:
Share Note的基础使用- 为什么以及如何使用 note-sx/server (opens new window) 自部署分享服务
# 二、Share Note 能做什么
Share Note 是一个 Obsidian 插件,官方仓库地址如下:
- GitHub:https://github.com/alangrainger/share-note (opens new window)
- 默认分享服务:https://share.note.sx (opens new window)
- 故障排查文档:https://docs.note.sx (opens new window)
- 服务状态:https://status.note.sx (opens new window)
它比较吸引我的点主要有几个:
- 一键分享: 在命令面板执行命令即可发布当前笔记
- 主题支持: 会上传当前主题、主题配置以及自定义 CSS 片段
- 内容支持比较完整: 图片、代码块、Callout、任务列表、标签等都能正常展示
- 支持笔记链接: 如果两个笔记都已经分享,分享页面里的内部链接也可以跳转
- 默认加密: 笔记正文默认加密,解密密钥放在分享链接的
#后面
当然,这里也要提前说明一点:Share Note 适合分享笔记,不适合当成网盘使用。官方也说明了,加密只作用于笔记正文,附件并不会加密存储。
# 三、基础使用
# 1、安装插件
在 Obsidian 中进入:
设置 -> 第三方插件 -> 社区插件市场
搜索 Share Note 并安装启用即可。
如果你习惯手动安装,也可以从 GitHub 仓库下载插件文件放到:
<VAULT_DIR>/.obsidian/plugins/share-note
这里的
<VAULT_DIR>指的是你的Obsidian仓库根目录,也就是存放笔记文件的那个文件夹,默认在文稿目录下,如:
/Users/lxf/Documents/Obsidian\ Vault
安装完成后重启 Obsidian 或重新加载插件。
# 2、分享当前笔记
打开任意一篇笔记,然后通过命令面板(快捷键 Cmd + P)输入:
Share Note
选择 Share Note: Share current note 命令。
也可以点击笔记右上角的 ⋮ 菜单,选择:
Share note on the web
首次分享时,插件会上传当前主题相关资源。后续再分享其它笔记时,会复用之前上传过的主题文件,所以速度会更快一些。
如果你修改了主题、CSS 片段,或者发现网页展示效果没有同步,可以执行:
Force re-upload of all data for this note
这个命令会强制重新上传当前笔记相关数据。
# 3、复制分享链接
分享成功后,插件会生成一个网页链接。你可以把这个链接发给其他人,对方打开后就能看到这篇笔记。
如果需要重新复制已经分享过的笔记链接,可以执行:
Copy shared note link
需要注意的是,插件会把分享链接写入系统剪贴板,但不会读取剪贴板内容。
# 四、关于加密
Share Note 默认会对笔记正文进行加密。官方示例里,一个加密分享链接大概长这样:
https://share.note.sx/4earajc8#PtC3oQDjDQK9VP7fljmQkLBA/rIMb2tbFsGoG44VdFY
它可以拆成两部分来看:
https://share.note.sx/4earajc8
这是笔记页面地址。
#PtC3oQDjDQK9VP7fljmQkLBA/rIMb2tbFsGoG44VdFY
这是解密密钥。
也就是说,如果只有前半段地址,服务端或访问者都无法直接看到笔记正文。只有拿到完整链接的人,浏览器才能在本地完成解密并展示内容。
这里有几个常用控制方式:
- 默认情况:笔记正文加密分享
- 单篇不加密:在
frontmatter里添加share_unencrypted并勾选 - 默认不加密时,单篇加密:在
frontmatter里添加share_encrypted并勾选
这里的 frontmatter 指的是笔记最开头用 --- 包起来的元信息区域,也就是给这篇笔记添加一些属性。比如想让某一篇笔记不加密分享,可以在笔记最上方添加:
---
share_unencrypted: true
---
如果你使用的是 Obsidian 的属性面板,也可以在笔记顶部添加一个名为 share_unencrypted 的复选框属性,然后把它勾选上。
不过再强调一下:附件不在正文加密范围内。如果笔记里包含敏感图片、文件、截图,请不要直接分享,或者先自行脱敏。
# 五、为什么要自部署
默认情况下,Share Note 会使用官方服务:
https://api.note.sx
对于普通分享来说,这已经足够方便。但如果使用频率比较高,或者笔记内容对可控性要求更高,我会更倾向于自部署一份服务。
主要原因有几个:
- 域名可控: 分享链接可以使用自己的域名,长期维护更稳定
- 数据可控: 笔记页面、附件和数据库都落在自己的服务器上
- 权限可控: 可以关闭新用户注册,只给自己生成 API Key 使用
- 容量可控: 可以根据自己的服务器和存储情况调整上传大小限制
- 服务可控: 不依赖公共服务状态,后续迁移、备份也更主动
当然,自部署也不是没有成本。你需要自己准备服务器、域名、HTTPS、备份和安全策略。如果只是偶尔分享几篇公开笔记,直接使用官方服务会更省心。
# 六、自部署 note-sx/server
Share Note 的后端服务也开源了,仓库地址如下:
官方提供了 Docker 部署方式,整体流程比较简单。
# 1、准备目录
先在服务器上准备一个目录:
mkdir -p ~/notesx-server
cd ~/notesx-server
目录里后续会放三个核心内容:
notesx-server
├── docker-compose.yml
├── .env
├── db
└── userfiles
docker-compose.yml:服务编排配置.env:服务运行参数db:服务数据库目录userfiles:用户上传文件目录
# 2、编写 docker-compose.yml
创建 docker-compose.yml:
services:
notesx-server:
image: ghcr.io/note-sx/server:latest
container_name: notesx-server
restart: always
ports:
- "3000:3000"
env_file:
- ".env"
volumes:
- ./db:/notesx/db:Z
- ./userfiles:/notesx/userfiles:Z
healthcheck:
test: (wget -qO - http://localhost:3000/v1/ping | grep -q ok) || exit 1
interval: 30s
timeout: 5s
retries: 2
start_period: 10s
服务默认会监听容器内的 3000 端口,这里映射到宿主机的 3000 端口。
如果你的服务器前面还有 Nginx、Caddy 或其它反向代理,只要把外部域名代理到:
http://127.0.0.1:3000
即可。
# 3、编写 .env
创建 .env:
BASE_WEB_URL=https://note.example.com
CLOUDFLARE_TURNSTILE_KEY=
CLOUDFLARE_TURNSTILE_SECRET=
CLOUDFLARE_ZONE_ID=
CLOUDFLARE_API_KEY=
HASH_SALT=please-change-this-to-a-random-string
FOLDER_PREFIX=0
MAXIMUM_UPLOAD_SIZE_MB=5
ALLOW_NEW_USERS=true
几个需要重点关注的配置如下:
| 配置 | 说明 |
|---|---|
BASE_WEB_URL | 对外访问的服务地址,比如 https://note.example.com |
HASH_SALT | 随机字符串,建议使用足够长的随机值 |
MAXIMUM_UPLOAD_SIZE_MB | 单次上传大小限制,默认示例是 5 |
FOLDER_PREFIX | 是否按文件名前 N 位拆分目录,可选 0、1、2 |
ALLOW_NEW_USERS | 是否允许新用户注册 |
CLOUDFLARE_TURNSTILE_KEY | 如需注册验证码,可配置 Cloudflare Turnstile |
CLOUDFLARE_ZONE_ID | 如前面接入 Cloudflare,可按需配置 |
如果只是自己使用,建议首次完成账号/API Key 准备后,把:
ALLOW_NEW_USERS=false
这样可以避免其它人注册新用户。已有用户仍然可以生成新的 API Key。
这里需要注意:ALLOW_NEW_USERS 是通过 .env 注入到容器里的环境变量,修改 .env 后需要让容器重新创建,配置才会真正生效。可以执行:
docker-compose up -d --force-recreate
如果你使用的是新版 Docker Compose 命令,也可以写成:
docker compose up -d --force-recreate
不建议只执行 docker-compose restart,因为它通常只是重启已有容器,不会重新读取并应用新的环境变量。上面的命令会复用 db 和 userfiles 挂载目录,不会清空已分享的数据。
# 4、启动服务
执行:
docker-compose up -d
启动后可以查看容器状态:
docker-compose ps
也可以访问健康检查接口:
curl http://127.0.0.1:3000/v1/ping
正常情况下会返回包含 ok 的结果。
# 5、配置反向代理
如果使用 Nginx,可以参考下面的配置:
server {
listen 80;
server_name note.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
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_set_header X-Forwarded-Proto $scheme;
}
}
生产环境建议再配上 HTTPS。如果你使用的是 Caddy,配置会更简单:
note.example.com {
reverse_proxy 127.0.0.1:3000
}
# 七、让 Obsidian 使用自部署服务
服务部署完成后,还需要让 Share Note 插件请求自己的服务。
根据 note-sx/server 的说明,需要修改当前仓库里的插件配置文件:
<VAULT_DIR>/.obsidian/plugins/share-note/data.json
打开后找到默认服务地址相关字段,通常能看到类似下面这样的地址:
https://api.note.sx
把它改成自己的服务器地址即可:
https://note.example.com
实际字段名请以你本地 data.json 里的已有内容为准,不要把其它配置删掉,只替换服务地址即可。
当然,也可以在设置页中找到第三方插件
Share Note,打开Show advanced options, 修改Server URL
修改完成后,重新加载插件或重启 Obsidian,让配置生效。
这里还有一个小细节:这个 data.json 位于 .obsidian 目录下,如果你使用 Obsidian Sync、Git 或其它同步方案,它会跟随你的普通同步流程同步到其它设备。也就是说,多设备场景下不需要每台机器都手动配置一遍。
# 八、验证流程
最后可以按下面这个流程验证一下:
- 在
Obsidian新建一篇测试笔记 - 插入一张图片、一个代码块
- 执行命令
Share Note: Share current note - 打开生成的分享链接
- 确认页面域名是自己的
BASE_WEB_URL - 确认图片、代码块、主题样式都能正常展示
- 修改笔记内容后重新分享,确认页面内容会更新
如果访问失败,可以优先检查这几个地方:
docker-compose ps中容器是否正常运行curl http://127.0.0.1:3000/v1/ping是否返回ok- 反向代理是否正确转发到
3000端口 BASE_WEB_URL是否和外部访问域名一致data.json中插件服务地址是否已经改成自部署地址- 修改配置后是否已经重启
Obsidian或重新加载插件
# 九、最后
整体体验下来,Share Note 比较适合这类场景:
- 临时分享一篇格式完整的
Obsidian笔记 - 给同事或朋友发一份技术记录、排查过程、会议纪要
- 不想为单篇内容单独搭建博客,但又希望展示效果比纯文本更好
- 对分享域名、数据落点、注册权限有要求,所以选择自部署
如果你只是偶尔分享公开内容,直接使用官方服务就很方便;如果你和我一样,更在意长期可控、域名统一和数据落点,那就可以考虑把 note-sx/server (opens new window) 部署到自己的服务器上。
本篇到此结束,希望对你有帮助~

- 01
- AI - Antigravity 不认全局 skills 怎么办?03-02
- 02
- AI - 通过 Docker 来安装与访问 OpenClaw02-02
- 03
- FlutterEye - 发现你手机里的 Flutter 应用01-18