Umami升级V3踩坑指南
最近有注意到关于 react和next.js 高危漏洞 CVE-2025-55182 引发的一些麻烦,多数表现是VPS被攻击者改成了挖矿肉鸡。
博客群里的 @veryjack 就因为安装了Umami v2 也成了受害者之一。
我也安装了Umami v2,所以第一时间上VPS后台检查了一下,幸运的是目前应该还没遭受到攻击。为了避免也中招,所以我先第一时间关闭了Umami 的统计服务。
因为这个漏洞是框架带来的,使用这两个框架的相关项目也在第一时间对漏洞进行了修复,所以Umami也很快带来了v3版本,我需要做的就是尽快升级。
我一直用的v2的mysql版本,但是v3开始官方开始只支持PostgreSQL,所以我需要先对数据进行迁移后再升级到v3版本,官方也提供了升级指南 Migrate MySQL to PostgreSQL ,同时其他一些博主也出了一些迁移教程 Umami v3 正式发布:告别 MySQL,全面拥抱 PostgreSQL —— 升级与迁移指南。
一、创建你当前版本的PostgreSQL版Umami
- 先停掉原来的Umami容器,修改compose文件为PostgreSQL版本。
- 因为我这里的PostgreSQL使用的是miniFlux上创建的,所以我指定使用了一个flux的内部网络。
version: '3.8'
services:
umami:
container_name: umami
image: ghcr.io/umami-software/umami:postgresql-v2.19.0
restart: always
ports:
- "3000:3000"
environment:
TZ: Asia/Shanghai
DATABASE_TYPE: postgresql
DATABASE_URL: postgresql://umami:password@postgres:5432/umami
HASH_SALT: "SALT"
networks:
- flux-data_flux-network # 关键:加入外部网络
networks:
flux-data_flux-network:
external: true # 告诉 Compose 这个网络已经存在 v2版umami PostgreSQL的compose
二、在PostgreSQL中创建Umami数据库
用miniflux的数据库账号创建一个Umami的数据库
docker exec -i postgres psql -U miniflux -c \
"CREATE USER umami WITH PASSWORD 'password';"
docker exec -i postgres psql -U miniflux -c \
"CREATE DATABASE umami OWNER umami;" 手动创建用户和数据库
按照官方指南清空 user 和 _prisma_migrations 表的数据
docker exec -i postgres psql -U umami -d umami <<EOF
TRUNCATE TABLE "user" CASCADE;
TRUNCATE TABLE "_prisma_migrations";
EOF 按官方要求清空数据
三、导出mysql版数据
通过以下命令导出mysql内的Umami数据到 mydbdump.sql 文件内。
docker exec -i mysql mysqldump --no-create-info --default-character-set=utf8mb4 --quick --skip-add-locks -u umami -p umami > mydbdump.sql 导出mysql的dump文件
因为两个数据库特性、语法要求的不同,我们在导出mysql的数据后需要对sql语句做特殊处理后才能正确导入到PostgreSQL。
首先用双引号替换反勾号,使其兼容PostgreSQL。
sed -i 's/`/"/g' mydbdump.sql 处理引号
其次,因为存在如 Xi\'an 、@1900\'blog 这种在PostgreSQL中被认为是转义语句的内容,所以还需要做特殊处理。这部分网上的教程我都试了,对我来说不管用。
这个问题卡了我很久,最后在和AI搏斗了两天后终于得到了一条在替换后至少能正常导入的语句。
sed -i 's/\\'\''/'\'''\''/g' mydbdump.sql 处理转义符
四、导入PostgreSQL
再将修改好后的文件导入Umami的PostgreSQL数据库内。
sudo docker exec -i postgres psql -U umami -d umami < mydbdump.sql 导入PostgreSQL
五、修改镜像为v3
最后修改compose文件中的Umami镜像为最新版后,重新docker-compose up -d 即可。
version: '3.8'
services:
umami:
container_name: umami
image: ghcr.io/umami-software/umami:postgresql-latest
restart: always
ports:
- "3000:3000"
environment:
TZ: Asia/Shanghai
DATABASE_TYPE: postgresql
DATABASE_URL: postgresql://umami:password@postgres:5432/umami
HASH_SALT: "SALT"
networks:
- flux-data_flux-network # 关键:加入外部网络
networks:
flux-data_flux-network:
external: true # 告诉 Compose 这个网络已经存在 升级镜像版本
重新访问网站后你就能得到一个最新版的Umami了,不过v3版本的首页好像默认不再直接显示各个网站的概览信息了,需要手动点击网站进入详情页面才能看到数据,略微有点不适应。

其实,在因为数据导入失败期间我一度想放弃之前的数据,尝试过其他统计工具,如 Tianji ,但是都觉得太臃肿了,最后还是选择继续攻克导入问题。
因为我只需要一个简单管用的访问统计工具,这也是当时我选择Umami的原因。
END。
加入评论