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

使用 chatgpt 生成

最近 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+ 站点被入侵挂马了。

Sponsor

Like this article? $1 reward

Comments