给备份脚本接上 Apprise 通知
几个备份脚本共用一套通知配置,换渠道时不用逐个修改。Apprise API 留在本机端口,由脚本提交消息。
文章目录
几个备份脚本各自写一份发送邮件或消息的代码,换渠道时就得改好几个位置。Apprise API 可以把渠道配置集中保存,脚本只提交标题和内容。
本文让 API 仅供同机脚本调用,管理界面通过 SSH 隧道访问。通知接口不是一个可以随意公开的留言箱;被滥用后可能连续向自己的邮箱或聊天账号发消息。
让通知接口只供本机调用
Apprise API 保存通知配置,购买服务器时先确认管理入口能保持私有。没有可用 VPS 的话,可以从 雨云云服务器 查看 Linux 实例,通知令牌按敏感配置保存。 优惠码 KuZhuJi。如有消费返利,以购买页所选规格显示的金额为准。
以下命令在 Linux VPS 上执行,需要有 Docker 操作权限。先运行 docker version 和 docker compose version,确认引擎与 Compose v2 都能工作。没有安装 Docker 时,按 Docker 官方安装说明选择对应发行版;不要把其他发行版的仓库配置直接复制过来。
示例工作目录为 /opt/apprise,所有相对路径都以这个目录为基准。VPS_IP、SSH 用户和示例域名需要换成自己的值。端口 8001 若已被占用,只改映射左侧的宿主机端口,并同步修改访问地址。
sudo install -d -m 0750 -o "$(id -u)" -g "$(id -g)" /opt/apprise
cd /opt/apprise
umask 077
创建 config 目录保存状态。官方默认运行用户为 1000,先给这个专用目录正确的权限;不要把整个宿主机配置目录挂进去。
sudo install -d -m 0750 -o 1000 -g 1000 config
在配置前先选一个自己有权限使用的通知渠道,从 Apprise 官方渠道文档取得 URL 格式。URL 里可能含邮箱密码或机器人令牌,应保存在私有配置中,不能出现在公开日志和截图。
将下面内容保存为 compose.yaml:
services:
apprise:
image: caronc/apprise:latest
restart: unless-stopped
environment:
APPRISE_STATEFUL_MODE: simple
APPRISE_WORKER_COUNT: 1
ports:
- "127.0.0.1:8001:8000"
volumes:
- ./config:/config
在工作目录启动并检查日志:
docker compose config --quiet
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=80
启动后按下面的步骤试用。遇到目录不可写的报错,先核对 UID 和挂载路径,不要直接改成 chmod 777。
用 SSH 隧道打开界面
示例仅把应用端口发布到 VPS 的 127.0.0.1。在自己的电脑上运行以下命令,保留终端窗口,再打开 http://127.0.0.1:8001:
ssh -N -L 8001:127.0.0.1:8001 your_ssh_user@VPS_IP
浏览器里的回环地址是自己的电脑,SSH 把请求转到 VPS。若本地同号端口被占用,可换隧道左侧端口;涉及应用外部 URL 的项目也要一起调整。管理界面无需因此开放公网端口。
创建一个通知键,实际收一条消息
通过隧道打开界面,保存一个名为 backup-alerts 的配置,填入通知渠道 URL。也可以从 VPS 调用 API;下面的值要换成自己渠道的实际格式:
curl -fsS -X POST http://127.0.0.1:8001/add/backup-alerts --data-urlencode 'urls=REPLACE_WITH_CHANNEL_URL'
curl -fsS -X POST http://127.0.0.1:8001/notify/backup-alerts --data-urlencode 'title=备份通知测试' --data-urlencode 'body=这是一条测试消息,请核对接收时间。'
含凭据的实际注册命令应从权限受限的文件或管理界面提交,避免留在共享 shell 历史里。API 返回成功后,继续确认接收端真的收到消息;用户阅读与否也不是 HTTP 状态码能证明的。
把通知放到备份完成检查之后,消息附服务器名、任务名和结果即可,不要把完整环境变量、访问密钥或数据库连接串发送出去。失败通知也应有超时,避免网络故障把主任务一直卡住。
其他机器需要调用时优先走 VPN 或经过认证的反向代理。不要因为同机测试成功就将 8001 绑定到所有公网接口。
备份通知配置,保护渠道令牌
config 可能含渠道令牌,备份按秘密保存。恢复后用测试通知键检查发送,不要直接触发全部生产渠道。状态目录恢复不代表第三方令牌仍有效,渠道端也要核对。
在工作目录执行下面的停机备份,压缩包保存在应用目录之外。停止全部服务会带来短暂不可用;确认停止成功后再打包。
docker compose stop
sudo install -d -m 0700 /var/backups/docker-apps
backup_file="/var/backups/docker-apps/$(basename "$PWD")-$(date +%Y%m%d-%H%M%S).tar.gz"
sudo tar -czpf "$backup_file" compose.yaml config
sudo chmod 0600 "$backup_file"
sudo tar -tzf "$backup_file" | head
docker compose start
将压缩包复制到 VPS 之外。恢复时,在另一台测试机器的空目录解包,保留文件所有者和相对路径,用原镜像版本启动,检查前面提到的数据。不要直接覆盖正在使用的原数据目录。
升级前先记录镜像 ID 或摘要,并保存这份备份。阅读项目更新说明后再拉取镜像;涉及数据库迁移时,回滚需要恢复旧数据与旧镜像,不能只把标签改回去。
安装参数和数据路径可对照Apprise API 项目说明。