GEOFlow 的生产环境备份需要覆盖三个核心持久化组件:PostgreSQL 数据库、用户上传文件以及 .env 配置文件。只要定期导出数据库、同步文件目录并安全保存环境变量,就能在服务器故障后快速恢复系统功能。下文基于 GEOFlow 官方部署指南中提到的典型架构,给出具体的备份恢复操作步骤。
生产环境需要备份哪些数据?
根据 GEOFlow 官方部署运维文档,生产环境由多个 Docker 服务组成,其中 PostgreSQL 负责存储所有业务数据(知识库、用户、内容记录),文件存储 用于保存上传的图片和附件,而 .env 和 .env.prod 中保存了数据库密码、APP_KEY 等核心密钥。因此,备份对象必须包括:
- PostgreSQL 数据库文件或逻辑导出
PostgreSQL 数据库备份方法
GEOFlow 的数据库完全由 PostgreSQL 承载。无论使用容器内的数据库还是云数据库,都建议使用 pg_dump 做逻辑备份。若使用 docker-compose.prod.yml 部署,可在宿主机执行:
docker compose -f docker-compose.prod.yml exec -T postgres pg_dump -U $POSTGRES_USER $POSTGRES_DB > geoflow-backup.sql
上传文件与密钥的备份
上传文件默认存储在 storage/app/public 下。如果 GEOFlow 已配置为使用对象存储(如 S3、OSS),则文件已由对象存储自身冗余机制保护,无需本地备份;否则需要定期同步该目录。示例同步命令:
rsync -avz ./storage/app/public/ backup-server:/geoflow-data/
完整恢复流程
- 在新的服务器上执行一键部署脚本或按官方指南克隆仓库,准备全新 GEOFlow 环境。
- 暂停新环境的
app与队列容器,避免未恢复完毕时产生脏数据。 - 将备份的数据库 SQL 文件导入 PostgreSQL 容器或云数据库实例。
- 恢复上传文件至
storage/app/public,若使用对象存储则直接挂载相同的 bucket。
检查清单
- 是否每日自动导出 PostgreSQL 并回传异地?
- 是否定期同步上传文件目录(未使用对象存储时)?
- 是否将
.env.prod与密钥文件纳入备份范围? - 是否至少执行过一次完整恢复演练?
- 数据库备份密码是否与
.env.prod内配置一致?