6.0 KiB
Silverbullet 部署指南
2026-08-05 记录。目标:在远程 Linux 服务器上用 Docker 部署自托管笔记服务,实现"随时随地在任意设备用浏览器查看编辑笔记"。
背景与选型
需求:远程服务器部署,随时随地任意设备查看、编辑笔记。
选型结论:Silverbullet(浏览器直接编辑 + Linux/Docker)。
为什么选 Silverbullet
- 任何设备浏览器打开网址即可查看 + 编辑,无需安装 App
- 支持
[[]]双链、反向链接(与 Obsidian 语法兼容,现有笔记可直接用) - 笔记是纯 Markdown 文件,存在服务器目录,备份 = 复制文件夹
- PWA 支持,手机浏览器可离线编辑
- Docker 一条命令部署,开源
备选:code-server(VS Code Web)
如果更想要完整 VS Code 体验,用 codercom/code-server。缺点:移动端体验差、无双链支持。先用 Silverbullet,不够再补。
一、服务器部署
创建 docker-compose.yml
services:
silverbullet:
image: ghcr.io/silverbulletmd/silverbullet:latest
container_name: silverbullet
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- ./space:/space # 笔记存储目录,备份就是复制这个文件夹
environment:
- SB_USER=admin:改成你的强密码 # 登录认证,必填!
启动
docker compose up -d
访问 http://服务器IP:3000 → 输入 admin/密码 → 完成。
常用环境变量
| 变量 | 说明 | 默认 |
|---|---|---|
SB_FOLDER |
Markdown 文件目录 | /space |
SB_PORT |
内部端口 | 3000 |
SB_USER |
Basic auth(user:pass) |
无认证 |
SB_AUTH_TOKEN |
Bearer token API 访问 | 无 |
SB_READ_ONLY |
只读模式 | 0 |
二、迁移现有笔记
本机笔记在 d:\onedrive\note(Windows),用 Git Bash 一次性传到服务器:
# 服务器上先建目录
ssh user@server "mkdir -p /path/to/space"
# rsync 上传(排除 Obsidian 配置目录,Silverbullet 用不上)
rsync -avP --exclude ".obsidian" "/d/onedrive/note/" user@server:/path/to/space/
三、HTTPS + 域名(强烈建议)
裸 HTTP 下密码明文传输,不安全。用 Caddy 做反向代理 + 自动 TLS 证书(Let's Encrypt)。
前提条件
- 一个已备案/可用的域名,如
notes.yourdomain.com - 域名 A 记录已指向服务器公网 IP
- 服务器 80 和 443 端口未被占用(云服务器需在安全组放行这两个端口)
整合后的 docker-compose.yml
将 Caddy 和 Silverbullet 放在同一个 compose 文件中,让它们共享同一个 Docker 网络,容器间用服务名互相访问:
services:
silverbullet:
image: ghcr.io/silverbulletmd/silverbullet:latest
container_name: silverbullet
restart: unless-stopped
volumes:
- ./space:/space
environment:
- SB_USER=admin:改成你的强密码
# 不暴露 ports,只允许 Caddy 通过内部网络访问
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data # 证书和密钥持久化,避免重启重新申请
- caddy_config:/config # Caddy 自身配置
volumes:
caddy_data:
caddy_config:
关键:
caddy_data和caddy_config用 named volume 而非 bind mount,避免权限问题,且证书重启不丢失。
Caddyfile 配置
在 docker-compose.yml 同级目录创建 Caddyfile(纯文本,无后缀):
# 基础版:自动 HTTPS + 反向代理
notes.yourdomain.com {
reverse_proxy silverbullet:3000
}
常用增强配置:
notes.yourdomain.com {
# 反向代理
reverse_proxy silverbullet:3000
# 访问日志(排查问题时打开)
log {
output file /var/log/caddy/access.log
}
# 限制请求体大小(上传大文件时调大)
request_body {
max_size 50MB
}
# 安全头(可选)
header {
X-Content-Type-Options nosniff
X-Frame-Options DENY
-Server
}
}
启动与验证
# 启动
docker compose up -d
# 查看 Caddy 日志(确认证书申请是否成功)
docker compose logs caddy -f
正常日志中应能看到类似 certificate obtained successfully 的输出。然后浏览器访问 https://notes.yourdomain.com 即可。
排错
| 问题 | 检查项 |
|---|---|
| 证书申请失败 | 确认域名 A 记录已生效(dig notes.yourdomain.com 或 nslookup),且 80 端口能从公网访问 |
| 502 Bad Gateway | docker compose ps 确认 silverbullet 容器在运行;确认 Caddyfile 中 reverse_proxy 的目标容器名与 compose 中 service 名一致 |
| 端口被占用 | 如果服务器已有 nginx/apache,先停掉再启 Caddy,或让 Caddy 监听其他端口 |
| 国内服务器 | 80/443 端口需备案;若无备案可用非标端口 + DNS 验证,但 Caddy 默认 HTTP-01 验证仍需 80 端口可达 |
无域名临时方案:frp / 路由侠等内网穿透工具把 3000 端口暴露出去。
四、数据备份
笔记是纯 Markdown → 备份 = 压缩目录:
# 手动备份
tar czf notes-backup-$(date +%F).tar.gz /path/to/space/
# cron 定时备份 + 保留最近 7 份
0 3 * * * tar czf /backup/notes-$(date +%F).tar.gz /path/to/space/ && ls -t /backup/notes-*.tar.gz | tail -n +8 | xargs rm -f
五、使用方式转变(关键)
选浏览器编辑 → 服务器目录成为唯一权威版本,本地 OneDrive 降级为离线备份:
| 场景 | 操作 |
|---|---|
| 日常编辑 | 浏览器打开 Silverbullet,直接改服务器文件 |
| 本地离线备份 | rsync user@server:/path/to/space/ /d/onedrive/note/ |
| 多设备 | 全部走浏览器,无需装任何东西 |
相关链接
- 大模型架构基础 — 本笔记库的正式学习内容
- AI编译器现状与前景 — 技术趋势分析
最后更新:2026-08-05