Skip to content

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 一般是「用户文件根路径」,常见示例:

text
https://cloud.example.com/remote.php/dav/files/<你的用户名>
字段说明
WebDAV URL见上,须为 http/https
用户名WebDAV 账号
密码首次必填;之后留空表示「不修改已保存密码」
远端目录相对路径,默认 tg-signpulse-backups;支持多级如 backups/tg

密码与 Bot Token 在设置页 不会回显明文(仅提示「已保存」)。换浏览器/清缓存后重新打开设置,密码框为空是正常的。


2. 面板里怎么配

  1. 登录面板 → 设置
  2. 找到 完整备份(数据管理区域)
  3. 填写 URL / 用户名 / 密码 / 远端目录
  4. 建议先点 测试连接
  5. 可选:开启 自动备份,设置间隔(小时)与保留份数,再点 保存备份设置

上传备份到 WebDAV测试连接 / 列出远端备份 时,面板会先保存当前表单再请求服务端,避免「填了但没保存导致仍用旧配置」。


3. 手动上传备份

  1. 确认 WebDAV 已填且测试通过
  2. 点击 上传备份到 WebDAV
  3. 成功后会提示远端文件名

服务端会打包数据目录中的关键路径(数据库、会话、.signer 任务配置、全局/AI/Telegram API 配置等),再上传到远端目录。

未配置 WebDAV 时,API 仍可能回退为浏览器下载;当前面板完整备份流程要求先填 WebDAV URL


4. 自动备份

在完整备份区域打开 自动备份 并保存:

选项含义
间隔(小时)调度执行周期,1–168
保留份数同时用于本地WebDAV 远端 的轮转(默认 3,最大 30)

行为要点:

  1. 到点后打包 auto-YYYYMMDD-HHMMSS.tar.gz
  2. 若已配置 WebDAV:上传成功 → 删除本地该副本,并按保留份数清理远端更旧的 .tar.gz
  3. 上传失败:保留本地文件便于补传,并尽量发 Telegram Bot 通知
  4. 未配置 WebDAV:仅在本地 data/backups/ 轮转保留

备份失败通知

需同时满足:

  • 系统设置里 Bot 通知总开关 已开
  • 已配置 Bot Token 与 Chat ID

与「任务失败通知」开关相互独立:关掉任务失败通知不会关掉备份失败通知。静默时段内仍会跳过。


5. 列出与下载远端备份

  1. 配置好 WebDAV 后点 列出远端备份
  2. 列表展示远端目录中的 .tar.gz(名称、大小、修改时间)
  3. 点某一行的 下载,文件会流式下载到你的浏览器

下载只是把包拿到本机,不会在面板内自动恢复数据。


6. 如何恢复(重要)

面板不做在线热恢复(运行中覆盖 db / sessions 极易损坏)。请按下面做。

步骤

  1. 在面板下载目标备份,或从网盘/WebDAV 客户端直接取文件
  2. 停止 TG-SignPulse(Docker 示例):
bash
docker compose stop app
# 或
docker stop tg-signpulse
  1. 确认数据目录(Compose 常见为 ./data,容器内为 /data
  2. 解压覆盖(按你的实际路径调整):
bash
# 备份文件在当前目录,数据目录为 ./data
tar -xzf tg-signpulse-backup-YYYYMMDD-HHMMSS.tar.gz -C ./data
# 或自动备份命名:
# tar -xzf auto-YYYYMMDD-HHMMSS.tar.gz -C ./data
  1. 确认目录权限可写后 启动 服务
  2. 打开面板,检查账号会话是否有效;必要时重新登录个别账号

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/ 是否在数据目录内,并按 账号管理 重新登录。


相关文档

基于 VitePress 构建 · 默认 SQLite,可选 PostgreSQL