Appearance
升级与备份恢复
部署目录中的 backup.sh、restore.sh 负责备份与恢复数据库、对象存储与应用数据。升级前务必先备份。 以下命令都在部署目录中执行;安装时用了 --project <名称> 的,给脚本加 --project <名称>、给 docker compose 加 -p <名称>。
备份
bash
./backup.sh # 停机备份到 ./backups/geobridge-backup-YYYYmmdd-HHMMSS/
./backup.sh /data/backups # 指定输出的父目录
./backup.sh --online # 不停机(不保证一致)
./backup.sh --project <名称> # 非默认项目名- 默认停机备份:备份期间停止 app 与 worker(此时访问平台返回 502),数据库、对象存储与应用数据处于同一时刻;完成后自动启动并等待服务健康。耗时取决于数据量。
--online不停机,但三部分数据不在同一时刻,备份期间的上传与处理任务可能只出现在其中一部分。- 备份目录包含:数据库导出
db.dump、对象存储的全部对象minio/、应用数据geobridge-data.tar.gz(字体、驱动、上传与处理任务目录等,不含临时文件与瓦片缓存)、.env(全部密钥)与校验文件SHA256SUMS。 - 备份目录权限为 700、文件为 600,只有执行备份的用户可读。备份含
.env,请复制到其他机器妥善保管;.env中的主密钥GEOBRIDGE_SECRET_KEY最好再单独保存一份。
定时备份示例(每天 3 点,保留 7 天):
cron
0 3 * * * cd /opt/geobridge && ./backup.sh /data/backups >>/var/log/geobridge-backup.log 2>&1 && find /data/backups -maxdepth 1 -name 'geobridge-backup-*' -mtime +7 -exec rm -rf {} +在本机恢复
bash
./restore.sh backups/geobridge-backup-20261020-030000 # 需要输入 yes 确认
./restore.sh --yes backups/geobridge-backup-20261020-030000 # 不询问恢复依次:校验 SHA256SUMS → 确认 → 停止 app 与 worker → 重建数据库并导入 → 清空 Redis(用户需要重新登录)→ 对象存储同步为备份内容(备份之后新增的对象被删除)→ 清空应用数据并解压 → 启动全部服务并等待健康 → 打印「恢复完成」。
- 恢复会覆盖当前的全部数据,包括备份之后新增的服务、上传的文件与用户。
- 恢复同时清空瓦片缓存,恢复后的数据不会被旧瓦片遮住。
- 恢复不修改当前的
.env。备份中的主密钥、数据库密码、对象存储账号与当前.env不同时中止,见在新机器上恢复。 - 任一步失败时提示「恢复在「{步骤}」失败,服务保持停止」。每一步都可以重新执行,修复原因后重新运行
restore.sh即可。
在新机器上恢复
原服务器损毁时,顺序不能反:
- 在新机器上解压同一版本的离线包(或复制部署目录),把备份中的
.env复制到部署目录,执行chmod 600 .env。 - 运行
./install.sh(离线包加--offline)。.env中的密钥与密码保持不变,数据库按同一密码初始化。新机器的 IP 或域名不同时,先按修改访问地址改GEOBRIDGE_WEB_BASE_URL。 - 运行
./restore.sh <备份目录>。
如果先运行了 install.sh(生成了新的 .env 与密码)再恢复,restore.sh 会中止并提示。此时先执行 docker compose -p <项目名> down -v 删除新建的空数据(这会删除该项目的全部数据卷,确认里面没有需要保留的数据),再按上面的顺序重来。
升级
新版本的数据库迁移在新版本 app 启动时自动执行。升级不能滚动进行:所有节点停止后再启动新版本。
- 先备份:
./backup.sh。 - 取得新版本:
- 离线包:把新版本的离线包解压到新目录,把旧目录的
.env(以及改过的nginx/geobridge.conf、证书目录certs/)复制过去,把.env中的GEOBRIDGE_VERSION改为新版本号,然后在新目录运行./install.sh --offline。项目名不变时沿用原来的数据卷。 - 私有仓库:把
.env中的GEOBRIDGE_VERSION改为新版本号,执行docker compose pull,再docker compose up -d。
- 离线包:把新版本的离线包解压到新目录,把旧目录的
- 等待服务健康:
docker compose ps中全部为healthy,或curl http://<主机>/geobridge-mapserver/health返回的version为新版本。
注意事项:
- 不要跳过备份:新版本启动时会迁移数据库,升级出问题需要回到旧版本时,在旧版本的部署目录中用升级前的备份按在本机恢复操作。
.env中的GEOBRIDGE_SECRET_KEY与GEOBRIDGE_DB_PASSWORD必须沿用旧值,不能重新生成。- 改过
nginx/geobridge.conf的,升级后对照新版本的同名文件合并改动。