下面是 **Trilium 自动备份部署文档(Markdown 版)**,可直接保存到你的知识库中(Obsidian / Astro / Nextra 均可)。
---
# Trilium 自动备份部署文档
本文档记录了在服务器上为 **TriliumNext** 配置自动备份、远端同步(Synology NAS)以及保留策略的完整过程。
## 📌 目标
- 每次执行时将 Trilium 数据目录打包 (`.tar.gz`)
- 本地保留 **1 份最新备份**
- Synology 远端 `/volume1/nfs/backup/trilium-backup/` 保留 **最新 7 份**
- 自动通过 `scp` 上传(已配置好 SSH key、host alias `syno`)
- 定期通过 `cron` 自动执行
---
# 1. 环境说明
|项目|值|
|---|---|
|本地服务器路径|`/opt/backup/trilium/`|
|脚本路径|`/opt/scripts/trilium_backup.sh`|
|Trilium 数据目录|`/home/node/trilium-data`(根据实际情况自改)|
|Synology 目标机路径|`syno:/volume1/nfs/backup/trilium-backup/`|
|Synology SSH 已配置|key、host、user 均已配置|
---
# 2. 创建备份脚本
创建目录:
```bash
mkdir -p /opt/scripts /opt/backup/trilium
```
创建脚本 `/opt/scripts/trilium_backup.sh`:
```bash
#!/bin/bash
# ========== 配置区域 ==========
TRILIUM_DATA="/home/node/trilium-data"
LOCAL_BACKUP_DIR="/opt/backup/trilium"
REMOTE_TARGET="syno:/volume1/nfs/backup/trilium-backup"
LOCAL_KEEP=1
REMOTE_KEEP=7
# =============================
timestamp=$(date +"%Y-%m-%d_%H-%M-%S")
backup_name="trilium_${timestamp}.tar.gz"
echo "==> 打包 Trilium 备份:$backup_name"
tar -czf "${LOCAL_BACKUP_DIR}/${backup_name}" -C "$(dirname "$TRILIUM_DATA")" "$(basename "$TRILIUM_DATA")"
echo "==> 本地备份完成:${LOCAL_BACKUP_DIR}/${backup_name}"
echo "==> 清理本地旧备份,只保留最新 ${LOCAL_KEEP} 个"
ls -1t ${LOCAL_BACKUP_DIR}/trilium_*.tar.gz | tail -n +$((LOCAL_KEEP+1)) | xargs -r rm -f
echo "==> 上传至 Synology:$REMOTE_TARGET/"
scp "${LOCAL_BACKUP_DIR}/${backup_name}" "${REMOTE_TARGET}/"
if [ $? -eq 0 ]; then
echo "==> 上传成功!"
else
echo "==> 上传失败!退出"
exit 1
fi
echo "==> 清理 Synology 远端旧备份,保留最新 ${REMOTE_KEEP} 个"
ssh syno "ls -1t ${REMOTE_TARGET}/trilium_*.tar.gz | tail -n +$((REMOTE_KEEP+1)) | xargs -r rm -f"
echo "==> 完成!"
```
添加执行权限:
```bash
chmod +x /opt/scripts/trilium_backup.sh
```
---
# 3. 手动测试脚本
```bash
/opt/scripts/trilium_backup.sh
```
典型输出如下:
```
==> 打包 Trilium 备份:trilium_2025-11-20_00-35-03.tar.gz
==> 本地备份完成
==> 清理本地旧备份,只保留 1 个
==> 上传至 Synology
==> 上传成功!
==> 清理远端旧备份,保留 7 个
==> 完成!
```
检查本地:
```bash
ls -lh /opt/backup/trilium/
```
检查目标机:
```bash
ssh syno "ls -lh /volume1/nfs/backup/trilium-backup/"
```
---
# 4. 配置 Cron 自动备份
编辑 root 的 cron:
```bash
crontab -e
```
加入每日凌晨 3 点自动备份:
```cron
0 3 * * * /opt/scripts/trilium_backup.sh >/dev/null 2>&1
```
查看当前 crontab:
```bash
crontab -l
```
---
# 5. 恢复方案(重要)
恢复时操作如下:
```bash
# 解压备份文件
tar -xzf trilium_YYYY-MM-DD_HH-MM-SS.tar.gz -C /
# 权限修复(如需要)
chown -R node:node /home/node/trilium-data
```
重启 Trilium 服务:
- Docker 用户:
```
docker restart
- systemd 用户:
```
systemctl restart trilium
```
---
# 6. 可选增强功能
如需要,我可帮你继续扩展脚本:
- 写入 `/var/log/trilium_backup.log`
- 增加 Telegram/钉钉/微信机器人失败通知
- 自动检测 Synology 是否在线再决定是否上传
- Systemd timer 替代 cron(更可靠)
- 加密备份(GPG)
- 完整适配群晖 NFS / SMB / SSH 方式
---
如果你需要,我可以再生成一个 **适用于你的 Obsidian + Astro 知识库目录结构 的文件名**,例如:
```
2025-11-20-trilium-backup-deploy.md
```
要我帮你一起生成吗?