数据备份与恢复
本地备份定时与保留策略、加密备份、远程同步(S3/R2/FTP/SFTP/SSH/WebDAV)、备份日志,以及在服务器上手动恢复的步骤。
数据备份用于在误操作、服务器故障、磁盘损坏或迁移时能找回数据。后台「数据备份」下有三个页面:
| 页面 | 路由 | 用途 |
|---|---|---|
| 本地备份 | /dataBackup/localBackup |
在当前服务器生成备份:定时、保留策略、加密、立即备份 |
| 远程备份 | /dataBackup/remoteBackup |
把已生成的本地备份同步到外部存储做异地保存 |
| 备份日志 | /dataBackup/backupLog |
查看备份与同步的结果、耗时、大小、失败原因 |
建议把它理解成两层保护:先在本机生成备份文件(快),再同步到异地(防止服务器整体损坏时备份一起丢失)。远程同步不能替代本地备份,因为它同步的就是本地备份目录里的文件。
后台没有「一键恢复」
当前后台只提供备份和同步,没有在界面里恢复数据的按钮。恢复需要在服务器上手动操作,见本页数据恢复。
订阅功能
「数据备份、远程同步」属于订阅能力(见订阅与高级功能一览),未获得授权时部分配置不可用。
使用前准备
| 准备项 | 说明 |
|---|---|
| 服务器空间 | 本地备份占磁盘,预留足够容量并设置保留策略 |
| 保存目录 | 使用专门的备份目录,不要和上传资源目录、程序目录混在一起 |
pg_dump |
数据库备份由服务器调用 PostgreSQL 的 pg_dump 导出,服务器上需要能执行该命令(安装 PostgreSQL 客户端工具) |
| 远程账号 | 需要远程同步时提前准备对象存储、FTP、SFTP、SSH 或 WebDAV 账号 |
本地备份

基本配置
| 配置项 | 说明 |
|---|---|
| 启用本地备份 | 开启后按周期自动备份;关闭则定时备份不执行,仍可手动「立即备份」 |
| 备份周期 | 每天 / 每周 / 每月 |
| 备份时区 | 判断任务按哪个地区时间执行;默认 Asia/Shanghai |
| 备份时间 | 默认 03:30,建议选访问低峰 |
| 每周执行日 / 每月执行日 | 周期为每周/每月时出现;每月选 29/30/31 号遇到没有该日期的月份,按当月最后一天处理 |
改完后必须点击「保存配置」才生效。
本地保存目录
默认值为 /data/backups/facai-cms。保存配置或立即备份时系统会检查目录:不存在会尝试创建,不可写会提示错误。不要填上传资源目录或临时目录。
保留策略
| 策略 | 需要填写 | 默认值 |
|---|---|---|
| 按备份数保留 | 最大保留份数 | 14 |
| 按天数保留 | 最大保留天数 | 30 |
| 按空间上限保留 | 最大存储空间(GB) | 120 |
普通站点用「按备份数保留」保留 7–14 份;内容更新频繁、文件大的站点用「按空间上限」。有远程同步时也不要关闭本地保留策略:本地旧文件被清理时,远程端同名旧文件也会按当前远程配置处理。
加密备份
开启「启用加密备份」并填写加密密码后,备份文件为 .tar.gz.enc。密码要妥善保存(忘记就无法使用),不要和后台登录密码相同;改密码只影响之后新生成的备份,旧备份仍要用当时的密码。需要把备份同步到第三方存储时强烈建议启用。
备份内容
| 内容 | 能否取消 | 说明 |
|---|---|---|
| 数据库 | 不可取消 | 核心业务数据 |
| 上传资源 | 可选 | 图片、封面、附件;资源多时备份文件会很大 |
| 系统配置 | 可选 | 运行相关配置,迁移、恢复、排障时有用 |
日常完整备份三项都选。
立即备份
点击「立即备份」会弹窗确认,可临时调整本次的保存目录、是否包含上传资源/系统配置;这些修改只对本次生效,不改写配置。启用了加密但没填密码时会被拦截;已有备份或同步在执行时需等待完成。
远程同步

同步策略
| 配置项 | 说明 |
|---|---|
| 启用远程备份 | 开启后远程配置才生效 |
| 同步方式 | 本地备份完成后同步(自动)或手动同步(点「立即同步」) |
| 连接超时 / 失败重试次数 / 带宽上限 | 网络慢时调大超时;带宽上限避免占满出口影响站点访问 |
「立即同步」只同步本地备份目录中最新的一个备份文件,不会重新生成备份;没有本地备份文件时先去做一次本地备份;它使用已保存的配置,页面上刚改未保存的内容不参与。
远程类型与填写项
| 类型 | 填写项 |
|---|---|
| S3 | Endpoint、Region、Bucket、Access Key ID、Secret Access Key、对象前缀(如 backup/facy,可空)、Path Style 访问(服务商要求时开启) |
| Cloudflare R2 | R2 Endpoint(账户级地址,不含桶名)、Region(通常 auto)、Bucket、Access Key ID、Secret Access Key、对象前缀、Path Style(通常开启);令牌权限给读写对象,并限制到指定桶 |
| FTP | 主机、端口(常见 21)、账号、密码、远程目录 |
| SFTP | 主机、端口(常见 22)、用户名、认证方式(密码/私钥)、密码或私钥+私钥口令、远程目录 |
| SSH | 与 SFTP 相同的字段;服务商明确提供 SFTP 时优先用 SFTP |
| WebDAV | WebDAV 地址、账号、密码(或应用密码)、远程目录;不同服务商地址格式不同,按其说明填写 |
保存前先点「测试连接」,它会检查地址、账号、目录/桶是否可用,以及是否有写入和删除测试文件的权限(不会保存配置)。测试通过只代表当时可用,正式启用后仍要定期看备份日志。
备份日志

可按备份类型(全部/本地备份/远程同步)、执行状态(全部/成功/执行中/失败)、开始时间筛选。字段包括任务编号(向技术支持反馈问题时提供)、类型、状态、文件大小、耗时、开始/完成时间,「查看详情」可看目标位置、文件名和失败原因。「执行中」请稍后刷新。
数据恢复
恢复是高风险操作,请由熟悉服务器的人在命令行执行。
备份包里有什么
本地备份文件名形如 local-YYYYMMDDHHMMSS-随机串.tar.gz(加密后多一个 .enc 后缀)。解压后的目录结构:
| 路径 | 内容 |
|---|---|
database/database.dump |
pg_dump -F c(自定义格式)导出的数据库 |
uploads/ |
上传资源目录(config.yaml 中 static.dir 指向的目录,默认 ./static,即 /usr/local/facy/static)内容 |
config/ |
系统配置:config/config/(原 data/config 目录)、config/system/config.yaml、config/core/security.conf |
恢复前检查
确认备份来源、时间点、文件大小(明显异常不要直接恢复)、是否加密(准备密码)、包含哪些内容。恢复前先额外保存一份当前状态,方便回退;并进入维护模式或停止服务,避免恢复过程中产生新数据。
建议顺序
- 通知相关人员,确认恢复窗口;
- 停止服务:
systemctl stop facy.service(或开启维护模式); - 把备份文件复制到临时目录(远程备份先下载回来);
- 如果是加密备份,先解密(见下);
- 解压:
tar -xzf local-xxxx.tar.gz -C /tmp/restore; - 先恢复数据库:用
pg_restore把database/database.dump导入目标库(库名、账号见facyManager db show),例如pg_restore -h localhost -p 5432 -U 用户名 -d 库名 --clean --if-exists /tmp/restore/database/database.dump; - 再按需把
uploads/内容放回静态资源目录; - 最后按需恢复
config/里的系统配置; systemctl start facy.service(或退出维护模式);- 登录后台和前台检查,成功后立即重新做一次本地备份和远程同步。
解密加密备份
加密文件格式为:前 9 字节固定头 FCCMSBAK1,接着 16 字节 IV,其后是 AES-256-CTR 密文,密钥为密码的 SHA-256。可以在 Linux 上用 openssl 还原(secret 换成你的加密密码,文件名换成实际文件):
f=local-xxxx.tar.gz.enc
K=$(printf %s 'secret' | sha256sum | cut -d' ' -f1)
IV=$(tail -c +10 "$f" | head -c 16 | od -An -tx1 | tr -d ' \n')
tail -c +26 "$f" | openssl enc -d -aes-256-ctr -K "$K" -iv "$IV" > restored.tar.gz
tar -tzf restored.tar.gz | head # 能列出 database/ uploads/ config/ 说明密码正确恢复不可轻率
pg_restore --clean 会覆盖目标库中的同名对象。务必先备份当前数据库,并先在测试环境演练一次完整恢复流程;"有备份"不等于"能恢复",定期演练才可靠。