跳转到内容
AsterDrive
安全更新:Docker 镜像从 v0.4.0-rc.1 起已修复 FFmpeg MagicYUV 解码器漏洞 CVE-2026-8461(高危),使用旧镜像的实例请立即升级。查看 CVE 公告
安全更新:v0.4.0-beta.3 已修复 WebDAV 请求可导致服务进程终止的问题,旧版本实例请尽快升级。查看安全公告

升级与版本迁移

这一篇覆盖 AsterDrive 的版本升级流程:升级前要备份什么、二进制和 Docker 各自怎么升、升级后怎么验证、出问题怎么回滚。 按你部署方式往下找对应章节即可。

不管你用哪种部署方式,升级前都该做:

  1. 更新日志 对应版本段 —— 重点看 Changed / Removed / Deprecated 三节
  2. 完整备份一次 —— 至少包括 data/config.toml、数据库、所有本地存储目录;config.toml 里的登录签名密钥和 MFA 加密密钥都要保留,详见 备份与恢复
  3. 确认数据库账号有 DDL 权限 —— 启动时会自动跑 migration,账号没 CREATE / ALTER 权限会失败
  4. 预估停机窗口 —— 小型部署几十秒;如果数据库已有大量数据,看下文 MySQL 章节

如果你管理的是生产环境,建议先在测试环境完整跑一遍升级流程,再正式升级。

最常见也最简单的场景。

Terminal window
# 拉最新镜像
docker pull ghcr.io/astercommunity/asterdrive:latest
# 重启容器
docker compose down
docker compose up -d
# 看启动日志,确认 migration 跑完
docker compose logs -f asterdrive

启动日志里会看到 migration 阶段输出。看到 application started 之类的提示即可。

如果你用 docker run 而不是 compose,记得保持挂载卷不变(asterdrive-data 卷 + config.toml 挂载点)。

升级后的验证按 启动后马上检查这些项 走一遍。

Terminal window
# 1. 停服务
sudo systemctl stop asterdrive
# 2. 备份当前二进制(万一要回滚)
sudo cp /usr/local/bin/aster_drive /usr/local/bin/aster_drive.bak
# 3. 替换二进制
sudo install -m 755 ./aster_drive /usr/local/bin/aster_drive
# 4. 启动
sudo systemctl start asterdrive
# 5. 看日志
sudo journalctl -u asterdrive -f

启动时 migration 自动跑。看到服务正常监听端口即可。

如果你想在启动前先单独跑一次 migration(比如想把 migration 报错和服务启动报错分开看),可以用:

Terminal window
sudo -u asterdrive ./aster_drive database-migrate

详见 运维 CLI

如果你的 MySQL 部署数据量较大:

  1. 预留维护窗口 —— 停服务、跑 migration、确认完成、启动服务
  2. 或者用 online schema change 工具 —— gh-ostpt-online-schema-change 等先跑 ALTER,再启动新版本服务

PostgreSQL 和 SQLite 不受这个限制。

后续版本如果再有类似 migration,会在 更新日志 里明确标注。

升级完成后按这个清单走一遍:

  1. /health 返回 200
  2. /health/ready 返回 200(DB 和默认存储后端都通)
  3. 管理后台能正常打开
  4. 用真实账号登录、上传一个文件、下载、分享、恢复一次回收站项目
  5. 跑一次 aster_drive doctor

如果你启用了 WebDAV / WOPI,再分别验证:

  • WebDAV 客户端能挂载、能读写
  • WOPI 客户端能打开 Office 文件

这些验证不是流程,是给自己的安心检查——确认升级没把哪个边角功能弄坏。

按失败阶段分:

看日志里的具体报错。常见原因:

  • 数据库账号没 DDL 权限 → 给账号加权限再启动
  • 之前升级中断、migration 表状态不一致 → 联系开发者前先备份现状(重要)

如果你急需服务恢复,可以先回滚到旧版本(前提是 migration 没有真的成功执行任何 DDL)。如果 migration 已经部分执行,回滚旧版本可能因为 schema 不匹配启动失败,必须从备份恢复。

通常不是消失,是位置或名字改了。先看 更新日志 对应版本段。如果 changelog 里没有提到,开 issue。

故障排查 处理。

回滚步骤:

  1. 停服务
  2. 从备份恢复 config.toml、数据库、本地存储目录到升级前的时间点
  3. 替换回旧二进制
  4. 启动
  5. aster_drive doctor 确认状态

详见 备份与恢复

当前版本的正式升级路径以 v0.1.0 及之后的 migration 历史为准。也就是说,数据库的 seaql_migrations 表中应当包含当前基线迁移记录:

m20260512_000001_baseline_schema

如果你从 v0.1.0 或之后的版本升级,按本文前面的 Docker / systemd 步骤执行即可;服务启动时会自动应用后续 migration。

早期 alpha / beta / rc 预发布构建使用过已经重排的历史 migration。当前版本不再内置这些 rebase 兼容分支,也不会把旧的 migration 记录自动改写成当前 baseline。仍停留在早期预发布历史上的实例,需要先升级到能完成当时 rebase 的中间版本并确认迁移完成,再继续升级;或者从已经完成当前 baseline 后的备份恢复。

不要手工修改 seaql_migrations,也不要为了绕过 migration 报错去清空业务表。迁移元数据和真实业务表结构不一致时,直接启动新版本可能造成更难恢复的数据问题。