📦 常青云备份系统

部署与使用手册 | 版本 1.1 | 2026年4月

1 部署手册

1.1 系统要求

项目要求
操作系统Linux(CentOS 7+、Ubuntu 18+、Debian 10+)
Python3.6 及以上(脚本自动检测)
磁盘空间取决于备份数据量,建议独立挂载备份存储盘
网络管理端需能 SSH 访问所有被备份服务器
权限需要 root 权限执行部署脚本

1.2 一键部署

🚀 上传安装包后,执行一条命令即可完成部署

bash deploy.sh [端口号]

默认端口 8091,可自定义,如 bash deploy.sh 9090

部署脚本自动完成以下操作

  1. 上传安装包
    backup-system/ 目录上传到服务器,如 /tmp/backup-system/
  2. 执行部署脚本
    cd /tmp/backup-system
    bash deploy.sh
  3. 自动安装依赖
    脚本自动检测系统(yum/apt),安装 sshpass、rsync、python3
  4. 自动部署程序
    程序文件复制到 /opt/backup-system/,创建数据目录
  5. 自动注册服务
    创建 systemd 服务 backup-system.service,设置开机自启
  6. 自动配置防火墙
    自动放行服务端口(firewalld / iptables)
  7. 启动并验证
    启动服务,输出访问地址和默认密码

部署成功输出示例

============================================
  ✅ 常青云备份系统 部署完成!
============================================

  🌐 访问地址: http://192.168.1.100:8091
  🔑 默认密码: admin123

  📋 常用命令:
     查看状态: systemctl status backup-system
     重启服务: systemctl restart backup-system
     停止服务: systemctl stop backup-system
     查看日志: journalctl -u backup-system -f

  ⚠️  请登录后立即修改默认密码!
部署脚本需要 root 权限执行。如使用非 root 用户,请 sudo bash deploy.sh

1.3 目录结构

/opt/backup-system/
├── app.py                  # 后端主程序
├── backup_engine.py        # 备份引擎
├── deploy.sh              # 一键部署脚本
├── uninstall.sh           # 卸载脚本
├── data/
│   ├── db.json             # 数据库文件
│   └── backups/            # 备份文件存储目录
│       └── 服务器名/任务名/
│           ├── *_full.tar.gz        # 全量备份归档
│           └── rsync_incremental/    # 增量备份镜像
└── templates/
    └── index.html          # 前端页面

2 使用手册

2.1 登录

浏览器访问 http://服务器IP:8091/,输入密码登录。默认密码 admin123,请首次登录后立即修改。

2.2 仪表盘

登录后默认进入仪表盘,展示:

2.3 服务器管理 更新

服务器仅管理 SSH 连接信息,不再包含备份目录配置:

字段说明示例
名称服务器标识名生产Web服务器
IP地址/主机名SSH连接地址192.168.1.100
SSH端口默认2222
用户名SSH登录用户root
密码SSH密码(密钥认证可留空)******
💡 备份目录已从服务器级别移至任务级别,一个服务器可关联多个任务,每个任务配置不同的备份目录。

2.4 备份任务管理 更新

任务字段说明

字段说明
任务名称任务标识,如"每日网站备份"
关联服务器选择已添加的服务器
备份目录 支持配置多个目录,可动态增删
备份类型全量备份(tar归档)或增量备份(rsync同步)
备份周期每天 / 每周 / 每月 / 自定义Cron
执行时间每天几点执行,如 02:00
保留天数超过天数的备份自动清理,1-365天
启用状态启用/禁用

多目录备份机制

ℹ️ v1.1 起,备份目录从服务器级别移至任务级别,支持一个任务备份多个目录。
💡 示例:任务配置备份 /var/www/html/etc/nginx,全量备份会打包成一个 tar.gz;增量备份会分别同步到 rsync_incremental/html/rsync_incremental/nginx/

兼容旧数据

从旧版升级时,若任务没有 backup_paths 字段,系统会自动从关联服务器的 backup_path 回退读取,无需手动迁移。

2.5 手动执行与调度

2.6 备份历史

字段说明
状态成功 / 失败 / 进行中
大小全量:tar.gz 文件大小;增量:rsync 目录总大小
下载全量备份可直接下载 .tar.gz;增量备份显示"同步目录"标签
日志查看备份执行的详细日志

2.7 备份文件浏览

备份根目录 服务器名 任务名 备份文件(可下载)

2.8 系统设置 更新

① 备份存储根目录

设置备份文件的存储路径,默认为 data/backups/。建议挂载独立磁盘。

② SMTP发件配置

字段说明
SMTP服务器如 smtp.qq.com、smtp.163.com
SMTP端口SSL通常465,TLS通常587
使用SSL465端口选"是",587端口选"否"(使用STARTTLS)
发件人邮箱SMTP登录账号
邮箱密码/授权码QQ邮箱等需使用授权码而非登录密码

③ 告警通知配置

字段说明
告警收件人邮箱备份失败时接收告警的邮箱,多个用逗号分隔
💡 配置好 SMTP 和收件人后,点击「发送测试邮件」验证配置是否正确。

2.9 告警通知机制

备份执行完成 判断执行结果 失败 → 发送告警邮件
⚠️ 告警前提:必须正确配置 SMTP 发件信息和告警收件人邮箱,否则告警不会发出。

2.10 自动调度机制

调度器每60秒检查 遍历已启用任务 计算下次执行时间 到达时间则执行备份 更新 last_run 记录

2.11 数据恢复

全量备份恢复

# 1. 从Web界面下载 .tar.gz 文件,或从备份目录直接拷贝
scp /opt/backup-system/data/backups/服务器名/任务名/20260424_020000_full.tar.gz 目标服务器:/tmp/

# 2. 在目标服务器解压恢复
tar xzf /tmp/20260424_020000_full.tar.gz -C /恢复目录/

增量备份恢复

# rsync增量备份的文件直接在镜像目录中,直接复制即可
scp -r /opt/backup-system/data/backups/服务器名/任务名/rsync_incremental/html/* 目标服务器:/var/www/html/
scp -r /opt/backup-system/data/backups/服务器名/任务名/rsync_incremental/nginx/* 目标服务器:/etc/nginx/

2.12 日常运维

# 启动
systemctl start backup-system
# 停止
systemctl stop backup-system
# 重启
systemctl restart backup-system
# 查看状态
systemctl status backup-system
# 查看日志
journalctl -u backup-system -f
# 备份系统自身数据
cp /opt/backup-system/data/db.json /backup/db_$(date +%Y%m%d).json
# 查看备份目录占用
du -sh /opt/backup-system/data/backups/*

2.13 安全建议

3 卸载

3.1 一键卸载

系统内置卸载脚本,交互式操作,安全可控:

cd /opt/backup-system
bash uninstall.sh

3.2 卸载流程

确认卸载 停止服务 移除systemd 选择是否删除数据

3.3 卸载选项

选项说明
仅卸载服务停止服务、移除 systemd、删除程序文件,保留备份数据/opt/backup-system/data/
完全卸载停止服务、移除 systemd、删除全部文件(包括备份数据)
🚫 选择「完全卸载」将不可恢复地删除所有备份数据!请确认已做好数据迁移或不再需要后再选择。

3.4 卸载交互示例

============================================
  🗑️  常青云备份系统 卸载
============================================

确认要卸载 常青云备份系统 吗?备份文件将保留在 /opt/backup-system/data/ (y/N): y
[INFO] 停止服务...
[INFO] 服务已移除

是否同时删除程序文件和备份数据?(/opt/backup-system) (y/N): N
[INFO] 备份数据保留在 /opt/backup-system/data/

✅ 卸载完成
💡 默认选择 N(不删除数据),仅卸载服务。如需彻底删除,输入 y。

3.5 手动卸载

如无法使用卸载脚本,可手动执行以下命令:

# 1. 停止并禁用服务
systemctl stop backup-system
systemctl disable backup-system

# 2. 删除 systemd 服务文件
rm -f /etc/systemd/system/backup-system.service
systemctl daemon-reload

# 3. 删除程序文件(可选,保留数据目录)
rm -rf /opt/backup-system/app.py /opt/backup-system/backup_engine.py
rm -rf /opt/backup-system/deploy.sh /opt/backup-system/uninstall.sh
rm -rf /opt/backup-system/templates

# 4. 彻底删除(含备份数据,谨慎!)
rm -rf /opt/backup-system

4 附录

4.1 技术架构

项目技术
后端Python 3 标准库(http.server + socketserver),无第三方依赖
前端原生 HTML/CSS/JS,无框架依赖
数据库JSON 文件(db.json),轻量无需数据库服务
全量备份SSH + tar 远程打包(多目录 → 单个 tar.gz)
增量备份SSH + rsync 远程同步(每目录独立镜像)
调度器内置线程,60秒轮询
并发ThreadingMixIn 多线程处理请求
认证Cookie Token + SHA256 密码哈希
邮件告警smtplib + SMTP_SSL/STARTTLS,HTML格式

4.2 API 接口一览

方法路径说明
POST/login登录认证
GET/api/dashboard仪表盘数据
GET/POST/api/servers服务器列表 / 添加
POST/api/servers/{id}更新服务器
POST/api/servers/{id}/delete删除服务器
POST/api/servers/{id}/test测试SSH连接
GET/POST/api/tasks任务列表 / 添加
POST/api/tasks/{id}更新任务
POST/api/tasks/{id}/delete删除任务
POST/api/tasks/{id}/toggle启用/禁用任务
POST/api/tasks/{id}/run手动执行任务
GET/api/backups备份历史列表
GET/api/backups/{id}/download下载备份文件
GET/api/backups/{id}/log获取备份日志
POST/api/backups/{id}/delete删除备份记录
GET/api/backup-files浏览备份文件
GET/api/backup-file-download下载备份文件(按路径)
GET/POST/api/settings获取/保存系统设置
POST/api/test-email发送测试邮件
POST/api/change-password修改登录密码

4.3 更新日志

v1.1(2026-04-24)

v1.0(2026-04-23)

4.4 打包发布

# 清除测试数据后打包(保留空数据目录结构)
cd /opt/backup-system
rm -rf data/backups/* data/db.json
cd ..
tar czf 常青云备份系统-v1.1.tar.gz backup-system/

# 验证打包内容
tar tzf 常青云备份系统-v1.1.tar.gz