1. 备份数据库
- SQLite(Docker 卷)
- SQLite(二进制文件)
- PostgreSQL
- MongoDB
停止网关,以免在复制过程中写入文件,然后归档该卷:请将
gomodel_data 替换为您的卷名称(docker volume ls)。如果您改为绑定挂载主机目录,执行
cp -a ./data ./data.bak-$(date +%F) 即可。2. 升级
Docker Compose
storage configured。
docker run
重新创建容器会丢弃其启动参数,因此请先从正在运行的容器中读取这些参数:/app/data 上没有挂载任何内容,数据库就位于容器文件系统中,docker rm 会将其删除。请在旧容器仍然存在时将数据库复制出来,
并预先填充到您即将挂载的卷中——空卷会遮盖原有的副本,网关启动后将没有任何密钥、用量或日志:
65532 是镜像的非 root 用户 UID——网关无法写入属于其他用户的卷。
然后替换容器,并重新传入相同的挂载和环境变量参数:
二进制文件
重新运行安装程序。它会获取最新发布版本,并原地替换二进制文件:- macOS / Linux
- Windows
3. 验证
GET /version 会报告当前运行的版本、最新发布的版本,以及是否有可用更新:
迁移的作用
迁移会在新版本首次启动时运行。没有单独的迁移命令,升级也永远不会移动或删除您的数据库、配置或缓存。 大多数迁移是增量式的:会创建缺失的表、索引和列,部分应用的 Schema 可以在下次启动时安全地重试。有些版本则会转换存储—— 当预算和速率限制增加作用域时,它们的表被重建,旧表被删除。两种迁移向前执行都是安全的,正因如此,反向操作才需要格外小心。固定版本
默认升级到最新版本。如需停留在某个已知版本,请将其固定:- Docker
- macOS / Linux
- Windows
latest。X.Y.Z 替换为某个已发布的版本。
回滚
安装或拉取上一个版本并重启。只有当期间的每次迁移都是增量式时,这样做才足够;如果跨越了转换式迁移,旧版二进制文件会去查找已被升级重建的存储。 从外部无法区分这两种情况,因此除非确认旧版本能够基于迁移后的数据库启动,否则请恢复第 1 步中的备份。 恢复 SQLite 卷备份会替换卷中的内容,因此请先停止网关——docker compose stop gomodel,独立容器则使用 docker stop gomodel——
然后解压归档并重新启动:
出现问题时
仍未解决?请在 Discord 上提问,或提交 GitHub issue。