WebDAV 备份与恢复
本指南面向面板使用者:如何配置 WebDAV、手动/自动完整备份、从远端下载,以及换机恢复。
技术细节与 API 见 运维手册。
两种备份别搞混
| 配置 JSON | 完整备份(WebDAV / tar.gz) | |
|---|---|---|
| 入口 | 设置 → 数据管理 → 导出配置 JSON | 设置 → 完整备份(WebDAV) |
| 任务配置 | ✅ | ✅(在 .signer) |
登录会话 sessions/ | ❌ | ✅ |
数据库 db.sqlite | ❌ | ✅(SQLite 部署) |
| 面板一键导入 | ✅ | ❌(需停服解压) |
| 敏感密钥 | 导出脱敏;导入不覆盖已有密钥 | 随文件原样打包,请妥善保管 |
- 只搬任务流程 → 用配置 JSON
- 换机 / 灾难恢复 → 用完整备份(本页)
完整备份不含 .admin_bootstrap_password(避免初始密码随备份传播)。
1. 准备 WebDAV
任意支持 WebDAV 的网盘/服务端均可,例如 Nextcloud、ownCloud、部分 NAS。
在面板填写的 WebDAV URL 一般是「用户文件根路径」,常见示例:
https://cloud.example.com/remote.php/dav/files/<你的用户名>| 字段 | 说明 |
|---|---|
| WebDAV URL | 见上,须为 http/https |
| 用户名 | WebDAV 账号 |
| 密码 | 首次必填;之后留空表示「不修改已保存密码」 |
| 远端目录 | 相对路径,默认 tg-signpulse-backups;支持多级如 backups/tg |
密码与 Bot Token 在设置页 不会回显明文(仅提示「已保存」)。换浏览器/清缓存后重新打开设置,密码框为空是正常的。
2. 面板里怎么配
- 登录面板 → 设置
- 找到 完整备份(数据管理区域)
- 填写 URL / 用户名 / 密码 / 远端目录
- 建议先点 测试连接
- 可选:开启 自动备份,设置间隔(小时)与保留份数,再点 保存备份设置
点 上传备份到 WebDAV 或 测试连接 / 列出远端备份 时,面板会先保存当前表单再请求服务端,避免「填了但没保存导致仍用旧配置」。
3. 手动上传备份
- 确认 WebDAV 已填且测试通过
- 点击 上传备份到 WebDAV
- 成功后会提示远端文件名
服务端会打包数据目录中的关键路径(数据库、会话、.signer 任务配置、全局/AI/Telegram API 配置等),再上传到远端目录。
未配置 WebDAV 时,API 仍可能回退为浏览器下载;当前面板完整备份流程要求先填 WebDAV URL。
4. 自动备份
在完整备份区域打开 自动备份 并保存:
| 选项 | 含义 |
|---|---|
| 间隔(小时) | 调度执行周期,1–168 |
| 保留份数 | 同时用于本地与 WebDAV 远端 的轮转(默认 3,最大 30) |
行为要点:
- 到点后打包
auto-YYYYMMDD-HHMMSS.tar.gz - 若已配置 WebDAV:上传成功 → 删除本地该副本,并按保留份数清理远端更旧的
.tar.gz - 上传失败:保留本地文件便于补传,并尽量发 Telegram Bot 通知
- 未配置 WebDAV:仅在本地
data/backups/轮转保留
备份失败通知
需同时满足:
- 系统设置里 Bot 通知总开关 已开
- 已配置 Bot Token 与 Chat ID
与「任务失败通知」开关相互独立:关掉任务失败通知不会关掉备份失败通知。静默时段内仍会跳过。
5. 列出与下载远端备份
- 配置好 WebDAV 后点 列出远端备份
- 列表展示远端目录中的
.tar.gz(名称、大小、修改时间) - 点某一行的 下载,文件会流式下载到你的浏览器
下载只是把包拿到本机,不会在面板内自动恢复数据。
6. 如何恢复(重要)
面板不做在线热恢复(运行中覆盖 db / sessions 极易损坏)。请按下面做。
步骤
- 在面板下载目标备份,或从网盘/WebDAV 客户端直接取文件
- 停止 TG-SignPulse(Docker 示例):
docker compose stop app
# 或
docker stop tg-signpulse- 确认数据目录(Compose 常见为
./data,容器内为/data) - 解压覆盖(按你的实际路径调整):
# 备份文件在当前目录,数据目录为 ./data
tar -xzf tg-signpulse-backup-YYYYMMDD-HHMMSS.tar.gz -C ./data
# 或自动备份命名:
# tar -xzf auto-YYYYMMDD-HHMMSS.tar.gz -C ./data- 确认目录权限可写后 启动 服务
- 打开面板,检查账号会话是否有效;必要时重新登录个别账号
Docker 卷注意
- 必须持久化挂载数据目录(如
-v $(pwd)/data:/data),否则重启会丢数据 - 解压目标必须是实际挂载到容器的那份 host 路径
PostgreSQL 部署
若使用 APP_DATABASE_URL 指向 Postgres:
- tar 包里的
db.sqlite不能代替 Postgres 数据 - 请另外做
pg_dump/ 厂商备份 sessions/与.signer仍须从完整备份恢复
7. 日常建议
| 建议 | 说明 |
|---|---|
| 先测连接再开自动备份 | 避免静默失败很久才发现 |
| 保留份数 ≥ 3 | 给误操作留回滚窗口 |
| 密钥单独保管 | 配置 JSON 导出会脱敏 WebDAV 密码;迁机后需重新填写 |
| 敏感备份加密存放 | 完整包含会话与密钥,等同账号权限 |
| 大库备份窗口 | 会话很多时包会较大;自动备份失败看日志/Bot 通知 |
宿主机再加一层 cron 备份整个 data/ 也可以,见 运维手册 · 备份与配置迁移。
8. 常见问题
为什么密码框是空的?
服务端不把 WebDAV 密码回传给前端。只要曾保存过,占位提示为「已保存」;需要改密码时再输入新密码并保存。
测试连接成功但上传失败?
- 用户名/密码是否对应用户空间写权限
- 远端目录是否允许创建(首次上传会尝试建目录)
- URL 是否指到文件根(Nextcloud 需含
/remote.php/dav/files/用户) - 代理/防火墙是否拦截大文件 PUT
自动备份一直没有远端文件?
- 是否打开自动备份并 保存
- WebDAV 是否配置完整(URL + 用户名 + 密码)
- 看
data/backups/是否仍有本地auto-*.tar.gz(失败时会保留) - 是否收到 Bot 失败通知
列出远端为空?
目录尚无上传过,或远端路径与配置不一致。可先手动上传一次再列表。
恢复后账号掉线?
会话可能过期或路径未覆盖完整。检查 sessions/ 是否在数据目录内,并按 账号管理 重新登录。