升级 Utterlog
两种方式:管理后台「版本」页一键升级,或 SSH 到服务器跑一条命令。任一方式都不会丢数据、配置或用户上传内容。
方式 A — 后台一键(推荐)
登录你的 Utterlog 后台 /admin,侧边栏进入「版本」页。
- 显示当前运行版本(如
sha-ac5f491) - 实时比对 GitHub 最新发布
- 可展开 changelog 看改动详情
- 有新版时按钮变蓝「一键升级到 vX.X.X」
点击后,Utterlog 会在容器内 detach 一个子进程,调用宿主的 docker socket:
docker compose -f docker-compose.prod.yml -f docker-compose.pull.yml pull docker compose -f docker-compose.prod.yml -f docker-compose.pull.yml up -d --remove-orphansapi 容器自我替换,web 容器同样。约 15–30 秒后后台自动恢复,「版本」页会轮询 API 恢复后显示新版本号。
后台升级要求docker-compose.prod.yml已挂载/var/run/docker.sock到 api 容器(默认已挂)。 升级到的镜像地址由UTTERLOG_IMAGE_PREFIX决定:registry.utterlog.io/utterlog(默认)或ghcr.io/utterlog。
方式 B — 命令行
cd /path/to/utterlog && curl -fsSL https://utterlog.io/update.sh | bash等同于方式 A,但适合 cron、脚本化、或者后台出问题时的兜底方式。
升级会保留什么?
| 内容 | 位置 | 升级后 |
|---|---|---|
| PostgreSQL 数据 | ./pgdata/ 或 volume pgdata | ✓ 完整保留,schema 迁移由 API 启动时自动跑 |
| Redis 缓存 | ./redisdata/ 或 volume | ✓ 保留(即使清了也只是丢缓存,无伤) |
| 用户上传的图片 / 附件 | volume uploads | ✓ 保留 |
| 用户自定义主题 / 插件 | uploads/themes/ | ✓ 保留(不在镜像里) |
配置文件 .env | 宿主机安装目录 | ✓ 保留(镜像不动) |
| 系统自带主题 (azure / flux 等) | 镜像内 /app/public/themes/ | ↻ 自动替换为最新版本 |
| API 二进制 + admin SPA | 镜像内 | ↻ 更新到最新 commit |
回滚
如果新版本有严重问题,指定 UTTERLOG_IMAGE_TAG 回到已知好的版本:
# .env 里改
UTTERLOG_IMAGE_TAG=sha-61f8b60 # 或任何历史 commit 短 SHA
# 重启
docker compose -f docker-compose.prod.yml -f docker-compose.pull.yml up -d所有历史镜像都在 registry 里,回滚到任意版本都可以。
数据库 schema 迁移
Utterlog 的 API 启动时会自动检查 schema 并在需要时执行 ALTER TABLE ... ADD COLUMN IF NOT EXISTS等安全语句。升级不需要手动跑迁移脚本,也不会破坏旧数据。
遇到问题?
- 看
docker compose logs api --tail=100 - 看升级日志:
cat ./uploads/upgrade.log(后台升级时的输出) - 在 GitHub Issues 反馈