最近看到 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 文件。
请注意删除注释以及修改相关配置。
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 的目录,运行下列命令:
docker-compose up -d
构建容器完成后,打开 http://ip:3000 即可进行使用。
默认账号:admin
默认密码:umami
使用 nginx 进行反代操作此处不再赘述。
数据迁移至 PgSQL
需要注意几点:
1、在数据迁移前,需要使用与自编译版本相同的 Umami Docker 镜像,当数据迁移完成后,运行访问服务测试没有问题,再进行升级操作。此处使用的是 v2.9.0。
2、需要开放 服务器的 3306 以及 5432 端口。
3、数据迁移后可能会出现一些 BUG,不过我暂时没有碰到(免责声明)。
部署与自编译版本相同的 Umami
将下列配置保存为 docker-compose.yaml 文件,数据库信息的修改请看上一节文件中的注释。
请注意删除注释以及修改相关配置。
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 的目录,运行下列命令:
docker-compose up -d
构建容器启动后,可以进行下一步。
使用 Navicat Premium 迁移数据
再此再次感谢 Shell !!!!!
容器启动后,打开 Navicat Premium ,新建 MySQL 与 PgSQL 数据库的链接。
点击导航栏中:工具 —> 数据传输,左侧 MySQL,右侧 PgSQL,具体配置如图:
点击下方导航栏的选项,具体配置如图:
点击下一步,此处需要传输的表仅四个:session、user、website、website_event
点击下一步,然后开始,此步骤根据服务器配置以及带宽和数据量的不同,所需时间不同。
最后一行显示 Finished with error 则为数据迁移完成。
重启 Umami 以及 PgSQL 容器:
docker restart umami-db-1
docker restart umami-umami-1
//具体容器名称可以使用 docker ps 命令查看
访问 http://ip:3000 使用原用户名、密码登录,测试数据是否正确,以及是否有什么 BUG。
在此需要注意:请删除原有的 admin 账户。
如无问题,可进行下一步。
升级 Umami
编辑 docker-compose.yaml 替换为以下内容:
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
运行下列命令:
docker-compose up -d
此时,因为需要升级程序数据库,所以根据服务器性能不同所需时间不同。
升级数据库完成后,打开 http://ip:3000 即可进行使用。
使用 nginx 进行反代操作此处不再赘述。
再次强调:请删除原有的 admin 账户。