最近看到 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 账户。

至此 Umami 数据迁移基本完成~


《Docker 部署 Umami,切换数据库至 PgSQL》