Umami 升级提醒:尽快更新以修复 Next.js CVE-2025-66478 漏洞

最近 Next.js 官方发布了 CVE-2025-66478 安全公告(详情可见官方链接)。由于 Umami 采用 Next.js 构建,因此同样受到本次漏洞影响
好消息是:Umami 官方已经发布新版本修复漏洞
同时需要注意:Umami 从 v3 起彻底移除 MySQL 支持,统一切换为 PostgreSQL
如果你仍在使用 MySQL 版本,强烈建议你尽快升级并迁移数据,避免暴露在风险中
v2 升级到最新版本
我已经同步好了官方镜像, 替换直接升级,由于 v2 版本没有打 patch 只能升级到 v3 才能解决
- ghcr.io/umami-software/umami:mysql-latest
- ccr.ccs.tencentyun.com/k7scn/umami:mysql-latest
将 MySQL 迁移到 PostgreSQL
Umami v3 确保数据的一致性,废弃了对 mysql 的支持,统一采用 PostgreSQL。本步骤参考官方文档 install-umami-with-a-postgresql-database 实践。
升级真是一件糟糕的体验,如果你之前是使用 MySQL,不建议升级,直接重装 v3
环境要求
官方要求迁移前 MySQL 结构必须达到 v2.19.0,否则执行迁移脚本会失败
你可以通过升级镜像确保数据库 schema 是最新的
- 两个数据库的登录凭证:
MySQL: mysql://user:password@host:port/dbname
PostgreSQL: postgresql://user:password@host:port/dbname
PG 数据库
bitnami 操作也很蜜汁。如下示例,对应 ip 密码自行修改
services:
postgresql:
image: h.ysicing.net/bitnami/postgresql
container_name: postgresql
ports:
- '100.90.80.10:5432:5432'
volumes:
- '/data/postgresql:/bitnami/postgresql'
environment:
- POSTGRESQL_DATABASE=umami
- POSTGRESQL_USERNAME=user
- POSTGRESQL_PASSWORD=password
- POSTGRESQL_POSTGRES_PASSWORD=password_root
restart: always
导出 mysql 数据
mysqldump --no-create-info --default-character-set=utf8mb4 --quick --skip-add-locks -uroot -h100.90.80.10 -poAkahz4ahvei1oReing6oh5ubaen1veV umami > umami.sql
部署 pg 版 Umami v2
具体参考流程可以参考 部署轻量数据统计分析 umami
官方镜像 ghcr.io/umami-software/umami:postgresql-v2
国内镜像 ccr.ccs.tencentyun.com/k7scn/umami:postgresql-v2
替换一下镜像地址和环境变量
mysql 环境变量为
- env:
- name: DATABASE_URL
value: mysql://root:oAkahz4ahvei1oReing6oh5ubaen1veV@100.90.80.10:3306/umami
- name: HASH_SALT
value: ezee4eGhalaishiphese8yaiphomon
- name: DATABASE_TYPE
value: mysql
image: ccr.ccs.tencentyun.com/k7scn/umami:mysql-latest
pg 环境变量为
- env:
- name: DATABASE_URL
value: postgresql://ysicing:oAkahz4ahvei1oReing6oh5ubaen1veV@100.90.80.10:5432/umami
- name: HASH_SALT
value: ezee4eGhalaishiphese8yaiphomon
image: ccr.ccs.tencentyun.com/k7scn/umami:postgresql-v2
- 去掉了 DATABASE_TYPE, 修改了 DATABASE_URL 值
- 镜像换成了 pg v2 版本镜像
等初始化完成,关闭服务,避免重复初始化数据库(避免影响下面流程)
修改 pg 数据库
使用 DataGrip 连接 umami 数据库,执行下面的 sql,这两个表数据将从 mysql 的数据中获取
truncate table "_prisma_migrations";
truncate table "user";
效果如下
[2025-12-05 22:24:47] 已连接到 umami
[2025-12-05 22:24:47] umami> truncate table "_prisma_migrations"
[2025-12-05 22:24:47] 在 10 ms 内完成
[2025-12-05 22:24:47] umami> truncate table "user"
[2025-12-05 22:24:47] 在 11 ms 内完成
导入数据
使用上面的备份数据 umami.sql
22:22 ➜ ~ ls -alh umami.sql
-rw-r--r-- 1 ysicing staff 99M 12 5 22:09 umami.sql
将反引号替换为双引号,使其与 PostgreSQL 兼容, 如果 macOS 执行有问题,在 Linux 搞下。操作前可以备份一下,避免搞坏了
sed -i 's/`/"/g' umami.sql
macOS
sed -i '' 's/`//g' umami.sql
sed -i '' 's/\\"/"/g' umami.sql
sed -i '' "s/\\\\'/'/g" umami.sql
sed -i '' "s/Xi'an/Xi''an/g" umami.sql
sed -i '' "s/Lu'an/Lu''an/g" umami.sql
sed -i '' "s/Ma'anshan/Ma''anshan/g" umami.sql
sed -i '' "s/Rui'an/Rui''an/g" umami.sql
sed -i '' "s/Yu'an/Yu''an/g" umami.sql
sed -i '' "s/Bo'an/Bo''an/g" umami.sql
sed -i '' "s/Tai'an/Tai''an/g" umami.sql
sed -i '' "s/Cao'an/Cao''an/g" umami.sql
sed -i '' "s/Chang'an/Chang''an/g" umami.sql
sed -i '' 's/ENGINE=[^ ]*//g' umami.sql
sed -i '' 's/AUTO_INCREMENT/[generated always as identity]/g' umami.sql
sed -i '' 's/unsigned//g' umami.sql
sed -i '' '/_prisma_migrations/d' umami.sql
可以手搓如下,我这里直接使用 DataGrip
psql -U username -d mydb < umami.sql
由于 MySQL → PostgreSQL 差异巨大,需要执行大量替换操作。报错太多,决定放弃升级改成使用 v3 版本, 还是重装方便
v3 版本镜像
由于兼容性问题太多,我最终选择放弃 v2 的 MySQL → PostgreSQL 迁移,转而直接部署 全新的 Umami v3。
v3 镜像地址:
官方:ghcr.io/umami-software/umami:postgresql-latest
国内同步:ccr.ccs.tencentyun.com/k7scn/umami:postgresql-latest
v3 使用体验更流畅、性能也更好,而且完全修复了此次 Next.js 漏洞。
总结:请大家尽快升级,避免被入侵
Umami 因 Next.js 漏洞受到影响
- v3 已发布修复版本
- 强烈建议优先考虑升级至 v3
- MySQL 用户请务必注意:v3 不再支持 MySQL
如果你还在运行旧版本,请尽快升级,避免站点暴露在风险中!我今天至少已经看到 10+ 站点被入侵挂马了。
