Files
note_sync/自建服务/Silverbullet部署指南.md

220 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```yaml
services:
silverbullet:
image: ghcr.io/silverbulletmd/silverbullet:latest
container_name: silverbullet
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- ./space:/space # 笔记存储目录,备份就是复制这个文件夹
environment:
- SB_USER=admin:改成你的强密码 # 登录认证,必填!
```
### 启动
```bash
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 一次性传到服务器:
```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 网络,容器间用服务名互相访问:
```yaml
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`(纯文本,无后缀):
```caddyfile
# 基础版:自动 HTTPS + 反向代理
notes.yourdomain.com {
reverse_proxy silverbullet:3000
}
```
**常用增强配置**:
```caddyfile
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
}
}
```
### 启动与验证
```bash
# 启动
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 → 备份 = 压缩目录:
```bash
# 手动备份
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*