Skip to content

升级与备份恢复 ​

部署目录中的 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 即可。

在新机器上恢复 ​

原服务器损毁时,顺序不能反:

  1. 在新机器上解压同一版本的离线包(或复制部署目录),把备份中的 .env 复制到部署目录,执行 chmod 600 .env。
  2. 运行 ./install.sh(离线包加 --offline)。.env 中的密钥与密码保持不变,数据库按同一密码初始化。新机器的 IP 或域名不同时,先按修改访问地址改 GEOBRIDGE_WEB_BASE_URL。
  3. 运行 ./restore.sh <备份目录>。

如果先运行了 install.sh(生成了新的 .env 与密码)再恢复,restore.sh 会中止并提示。此时先执行 docker compose -p <项目名> down -v 删除新建的空数据(这会删除该项目的全部数据卷,确认里面没有需要保留的数据),再按上面的顺序重来。

升级 ​

新版本的数据库迁移在新版本 app 启动时自动执行。升级不能滚动进行:所有节点停止后再启动新版本。

  1. 先备份:./backup.sh。
  2. 取得新版本:
    • 离线包:把新版本的离线包解压到新目录,把旧目录的 .env(以及改过的 nginx/geobridge.conf、证书目录 certs/)复制过去,把 .env 中的 GEOBRIDGE_VERSION 改为新版本号,然后在新目录运行 ./install.sh --offline。项目名不变时沿用原来的数据卷。
    • 私有仓库:把 .env 中的 GEOBRIDGE_VERSION 改为新版本号,执行 docker compose pull,再 docker compose up -d。
  3. 等待服务健康:docker compose ps 中全部为 healthy,或 curl http://<主机>/geobridge-mapserver/health 返回的 version 为新版本。

注意事项:

  • 不要跳过备份:新版本启动时会迁移数据库,升级出问题需要回到旧版本时,在旧版本的部署目录中用升级前的备份按在本机恢复操作。
  • .env 中的 GEOBRIDGE_SECRET_KEY 与 GEOBRIDGE_DB_PASSWORD 必须沿用旧值,不能重新生成。
  • 改过 nginx/geobridge.conf 的,升级后对照新版本的同名文件合并改动。