最近看到 Umami 提示更新,想了想自己好像也很久没更新了, 这一更新不要紧,带来了两个问题:
1、服务器所带来的构建问题
我的 Umami 服务部署于阿里云的轻量服务器。阿里云的轻量,官方说是无性能限制,但在我构建 Umami 时,服务器整体“死机”了两次。而且每次编译的时间较长,所以需要使用 Docker 部署 Umami。
2、官方数据库版本升级带来的问题
由于 Umami 官方自 V2.3.0 版本,开始逐步弃用 MySQL5.7,也由此带来了我之前提到的那个问题:《Umami 构建 2.3.0 版本时 “✗ Command failed: prisma migrate deploy Error: P3009”》。但 MySQL 8.0最少需要4G内存,我的服务器只有 2C2G,所以需要将数据从 MySQL 转移 PgSQL,起初自己折腾到了半夜也没解决数据库迁移的问题,但在 Shell 的帮助下,完成了此次数据迁移,再次表示感谢!!
Docker 部署 Umami
如果你需要抛弃数据重新使用或没使用过 Umami ,可以查看此节。但如果你像我一样需要将数据从 MySQL 转移至 PgSQL,可以查看下一节。
将下列配置保存为 docker-compose.yaml 文件。
请注意删除注释以及修改相关配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| version: '3' services: umami: image: ghcr.io/umami-software/umami:postgresql-latest //如果你在使用国内服务器部署 Umami,可以使用南京大的ghcr镜像:ghcr.nju.edu.cn //image: ghcr.nju.edu.cn/umami-software/umami:postgresql-latest ports: - "3000:3000" environment: DATABASE_URL: postgresql://umami:umami@db:5432/umami //Umami数据库设置,可修改,但也请修改 PgSQL 镜像中的配置信息 DATABASE_TYPE: postgresql APP_SECRET: replace-me-with-a-random-string depends_on: db: condition: service_healthy restart: always healthcheck: test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"] interval: 5s timeout: 5s retries: 5 db: image: postgres:15-alpine environment: POSTGRES_DB: umami POSTGRES_USER: umami POSTGRES_PASSWORD: umami // PgSQL 数据信息 volumes: - /www/wwwroot/umami:/var/lib/postgresql/data //PgSQL数据库镜像数据存储的路径,请酌情修改 restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 5
|
用 cd 命令打开 docker-compose.yaml 的目录,运行下列命令:
构建容器完成后,打开 http://ip:3000 即可进行使用。
默认账号:admin
默认密码:umami
使用 nginx 进行反代操作此处不再赘述。
数据迁移至 PgSQL
需要注意几点:
1、在数据迁移前,需要使用与自编译版本相同的 Umami Docker 镜像,当数据迁移完成后,运行访问服务测试没有问题,再进行升级操作。此处使用的是 v2.9.0。
2、需要开放 服务器的 3306 以及 5432 端口。
3、数据迁移后可能会出现一些 BUG,不过我暂时没有碰到(免责声明)。
部署与自编译版本相同的 Umami
将下列配置保存为 docker-compose.yaml 文件,数据库信息的修改请看上一节文件中的注释。
请注意删除注释以及修改相关配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| version: '3' services: umami: image: ghcr.io/umami-software/umami:postgresql-v2.9.0 //如果你在使用国内服务器部署 Umami,可以使用南京大的ghcr镜像:ghcr.nju.edu.cn //修改为对应的 Umami 版本 //image: ghcr.nju.edu.cn/umami-software/umami:postgresql-latest ports: - "3000:3000" environment: DATABASE_URL: postgresql://umami:umami@db:5432/umami DATABASE_TYPE: postgresql APP_SECRET: replace-me-with-a-random-string depends_on: db: condition: service_healthy restart: always healthcheck: test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"] interval: 5s timeout: 5s retries: 5 db: image: postgres:15-alpine ports: - "5432:5432" environment: POSTGRES_DB: umami POSTGRES_USER: umami POSTGRES_PASSWORD: umami volumes: - /www/wwwroot/umami/PgSQL:/var/lib/postgresql/data //PgSQL数据库镜像数据存储的路径,请酌情修改 restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 5
|
用 cd 命令打开 docker-compose.yaml 的目录,运行下列命令:
构建容器启动后,可以进行下一步。
使用 Navicat Premium 迁移数据
再此再次感谢 Shell !!!!!
容器启动后,打开 Navicat Premium ,新建 MySQL 与 PgSQL 数据库的链接。
点击导航栏中:工具 —> 数据传输,左侧 MySQL,右侧 PgSQL,具体配置如图:

点击下方导航栏的选项,具体配置如图:

点击下一步,此处需要传输的表仅四个:session、user、website、website_event

点击下一步,然后开始,此步骤根据服务器配置以及带宽和数据量的不同,所需时间不同。
最后一行显示 Finished with error 则为数据迁移完成。
重启 Umami 以及 PgSQL 容器:
1 2 3
| docker restart umami-db-1 docker restart umami-umami-1 //具体容器名称可以使用 docker ps 命令查看
|
访问 http://ip:3000 使用原用户名、密码登录,测试数据是否正确,以及是否有什么 BUG。
在此需要注意:请删除原有的 admin 账户。
如无问题,可进行下一步。
升级 Umami
编辑 docker-compose.yaml 替换为以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| version: '3' services: umami: image: ghcr.io/umami-software/umami:postgresql-latest //如果你在使用国内服务器部署 Umami,可以使用南京大的ghcr镜像:ghcr.nju.edu.cn //image: ghcr.nju.edu.cn/umami-software/umami:postgresql-latest ports: - "3000:3000" environment: DATABASE_URL: postgresql://umami:umami@db:5432/umami //Umami数据库设置,可修改,但也请修改 PgSQL 镜像中的配置信息 DATABASE_TYPE: postgresql APP_SECRET: replace-me-with-a-random-string depends_on: db: condition: service_healthy restart: always healthcheck: test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"] interval: 5s timeout: 5s retries: 5 db: image: postgres:15-alpine environment: POSTGRES_DB: umami POSTGRES_USER: umami POSTGRES_PASSWORD: umami // PgSQL 数据信息 volumes: - /www/wwwroot/umami:/var/lib/postgresql/data //PgSQL数据库镜像数据存储的路径,请酌情修改 restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 5
|
运行下列命令:
此时,因为需要升级程序数据库,所以根据服务器性能不同所需时间不同。
升级数据库完成后,打开 http://ip:3000 即可进行使用。
使用 nginx 进行反代操作此处不再赘述。
再次强调:请删除原有的 admin 账户。
至此 Umami 数据迁移基本完成~