升级 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-orphans

api 容器自我替换,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 反馈

在 GitHub 上编辑此页© Utterlog Project