部署Umami监测网站访问情况

使用docker部署Umami,数据库使用MariaDB,MariaDB是用1Panel安装的。

在1panel中也可以使用应用商店安装Umami,到那时数据库只能选择Mysql和PG,因为Mysql太占内存了,带不动,所以我这选择用MariaDB。

注意!!!原 Umami v1.x 系列基于 Next.js 构建,继承了 Next.js 对应版本的安全漏洞。所以请务必安装V2.0.0及以上版本

环境准备

1Panel应用商店安装MariaDB

应用商店直接默认安装就行

image

创建数据库和用户

image

image

解决MariaDB缺少BIN_TO_UUID函数的问题

Umami 迁移脚本依赖 MySQL 的 BIN_TO_UUID 函数,但 MariaDB 中默认没有这个函数,所以需要手动在 MariaDB 中创建该函数。

需要连接数据库,并在数据库中添加函数.

可以通过在1panel中安装phpMyAdmin来操作,也可以通过命令行来操作,这里只介绍用命令行操作.(服务器带不动太多应用了)

先ssh连接到服务器,然后连接到刚才创建的数据库

# 登录数据库(注意将umami_user修改为刚才创建的用户名称)
mariadb -u umami_user -h 127.0.0.1 -p
# 也可以使用
mysql -u umami_user -h 127.0.0.1 -p

如果提示没有找到命令,那么需要安装一下maria客户端,注意,只需要安装客户端

apt install mariadb-client-core-10.6

image

安装过程如果弹出这样的提示,直接回车就行

image

安装完成后登录到MariaDB数据库

# 登录
mariadb -u umami_user -h 127.0.0.1 -p

# 进入到数据库(将umami_db替换为刚才创建的数据库名称)
use umami_db;

image

执行下面这段命令

DELIMITER //
CREATE FUNCTION BIN_TO_UUID(bin_uuid BINARY(16)) 
RETURNS CHAR(36)
DETERMINISTIC
BEGIN
  DECLARE hex_str CHAR(32);
  SET hex_str = HEX(bin_uuid);
  RETURN LOWER(CONCAT(
    SUBSTR(hex_str, 1, 8), '-',
    SUBSTR(hex_str, 9, 4), '-',
    SUBSTR(hex_str, 13, 4), '-',
    SUBSTR(hex_str, 17, 4), '-',
    SUBSTR(hex_str, 21, 12)
  ));
END //
DELIMITER ;

image

安装Umami

确认MariaDB所在的容器网络

可以直接通过命令查看

# 末尾的mariadb需替换为实际的容器名称
docker inspect --format='{{range $key, $value :=.NetworkSettings.Networks}}{{$key}}{{end}}' mariadb

image

也可以根据mariadb的IP地址,确认mariadb连接的网络名称为1panel-network

mariadbIP地址为172.19.0.2,属于172.19.0.0/16网段,所以连接的网络名称为1panel-network

image

image

使用1Panel创建编排

当然,除了通过1Panel创建编排,也可以直接在命令行手动创建编排
手动创建docker-compose.yaml​编排文件,填写内容
通过docker-compose up -d命令来启动构建
这里只演示使用1Panel的方法

image

根据情况修改编排文件内容,粘贴

修改时需要特别注意缩进问题,最好直接给AI检查一遍,并格式化

version: '3'

services:
  # 仅保留 Umami 服务,连接到已有的 1Panel MariaDB
  umami:
    # 下载最新稳定版镜像(兼容 MySQL/MariaDB)
    image: ghcr.io/umami-software/umami:mysql-latest
    # 容器名称,便于管理和识别
    container_name: umami-app
    # 容器异常退出时自动重启
    restart: always
    environment:
      # 关键:连接 1Panel 中的 MariaDB(需替换为你的实际配置信息)
      - DATABASE_URL=mysql://数据库用户:数据库密码@MariaDB的容器名称:3306/数据表名称
      - DATABASE_TYPE=mysql  # 必须指定为 mysql(完全兼容 MariaDB)
      - HASH_SALT=随机字符串  # 推荐用 openssl rand -hex 32 生成安全随机字符串
    # 端口映射:宿主机端口:容器内端口(宿主机端口可自定义,如 8080:3000)
    ports:
      - "3000:3000"
    # 加入 MariaDB 所在的已有网络
    networks:
      - 1panel-network

# 网络配置:复用 1Panel 中 MariaDB 已存在的外部网络
networks:
  1panel-network:
    external: true  # 声明为外部网络(已提前创建,无需重新生成)

# 无需再定义数据库服务、网络和数据卷(复用 1Panel 的 MariaDB)

示例:

version: '3'

services:
  # 仅保留 Umami 服务,连接到已有的 1Panel MariaDB
  umami:
    image: ghcr.io/umami-software/umami:mysql-latest
	# 容器名称
    container_name: umami-app
    restart: always
    environment:
      # 关键:连接 1Panel 中的 MariaDB(替换为你的实际信息)
      - DATABASE_URL=mysql://umami_user:umami_pwd@mariadb:3306/umami_db
      - DATABASE_TYPE=mysql  # 必须指定为 mysql(兼容 MariaDB)
      - HASH_SALT=163abf2f3d34814a8965fa9e54a54b942a998d893179d327eb1035a46069b63e  # 用 openssl rand -hex 32 命令生成
    ports:
      - "3000:3000"  # 宿主机端口可自定义(如 8080:3000)【宿主机端口:容器内端口】
    networks:
	# 根据实际情况修改为MariaDB所连接的网络名称
      - 1panel-network  # 加入 MariaDB 所在的网络

networks:
  # 根据实际情况修改为MariaDB所连接的网络名称
  1panel-network:
    external: true # 声明为外部网络(已存在)

# 无需再定义数据库服务、网络和数据卷(复用 1Panel 的 MariaDB)

文件夹名称随便起

image

点击确定后,会自动切换到日志选项卡,等待一会儿,看到docker-compose up successful!并且没有报错,但是并不代表安装成功了。

image

执行命令查看日志

# 查看日志(注意将umami-app替换为实际的容器名称)
docker logs umami-app

如果有像下面这样的报错,那可能就是没有在mariadb中创建BIN_TO_UUID函数,导致umami迁移数据库失败。

需要按照前面的步骤在mariadb中创建函数,为防止重启报错,最好是在1panel中将刚才创建的数据库删除,然后再重新创建一个一样的.应为这次执行的时候已经再数据库中产生了一些迁移数据,不删除的化会影响到下次执行.

image

删除并重新创建数据库后,重启umami并查看日志(当然,这些操作也是可以在1panel中完成的)

# 重启dockerlogs(注意将umami-app替换为实际的容器名称)
docker restart umami-app

# 查看日志(注意将umami-app替换为实际的容器名称)
docker logs umami-app

日志输出类似这样,说明安装成功

image

配置Umami

浏览器访问http://服务器IP:3000/

如果是云服务器,需要在对应服务提供商上添加防火墙白名单,开放端口3000的访问权限。(以阿里云为例)

image

默认账号为:admin

默认密码为:umami

image

设置中文(右上角)

image

现在可以添加网站并进行监控了,但是由于现在是通过IP加端口访问的umami,使用的协议是http,所以只能监控到http网站的访问情况

如果需要监控的网站时https的,那么需要让umami也使用https。

在设置中添加一个网站

image

点击编辑

image

复制跟踪代码

如果使用的时IP+端口访问的umami后台,那么跟踪代码的src=后面就是http://IP+端口这样的;

如果Umami绑定了域名,并且用HTTPS+域名的方式去访问访问Umami,那么下图中看到的的跟踪代码就是https://域名这样的。

注意,如果需要统计的站点(比如你的博客)使用的时HTTPS访问方式,那么Umami也必须配置HTTPS访问,上述的跟踪代码也得是https://域名这样的,否则Umami无法统计到站点浏览。

这个限制的核心原因是浏览器的混合内容(Mixed Content)安全策略,它会阻止安全上下文(HTTPS 页面)加载不安全的资源(HTTP 资源)。

image

进入到Halo后台,设置->代码注入,将跟踪代码粘贴到全局head标签中,点击保存。(其它博客应该也是类似的)

image

之后访问博客,并到Umami界面查看效果

image

绑定域名并启用HTTPS

既然已经有一个网站时https的了,说明对反向代理并启用HTTPS绑定证书这块应该时没啥问题的,就不多赘述。

通过1panel创建一个网站,选择反向代理,代理地址就填Umami的端口。

之后启用HTTPS并绑定域名,申请ssl证书,上传,启用HTTPS。

新域名的话别忘了添加DNS解析。

image

参考:

搭建umami统计网页流量并集成进halo博客 - MJ的博客

安装 – 文档 - Umami 中文文档

使用Umami为自己的网站统计访问流量并可视化数据 - 雨月空间站

使用Docker部署Umami统计程序 - OriLight的自留地