多合一网络分析平台Matomo

什么是 Matomo ?

Matomo(以前称为 Piwik)是领先的开源分析平台,可以让您轻松地从访问者那里获得您想要的信息。例如查看您的网站访问者来自何处、正在查看哪些页面、单击了哪些链接以及其他各种有用的信息。

Umami 时,网友 Juijote 留言推荐过 Matomo,所以我们今天来折腾看看

文章传送门:网站分析软件Umami

前言

开始之前需要先说明两个问题:

  1. 官方的版本,在低版本内核( Linux kernel < 3.16)的群晖上,会出现下面的错误
1
2
[Tue Nov 01 05:44:11.089128 2022] [:crit] [pid 268] (38)Function not implemented: AH00141: Could not initialize random number generator
Action '-D FOREGROUND' failed.

这个 AH00141 错误除了换机器折腾外,老苏也没有更好的办法

你可以在 SSH 客户端,输入 uname -a 查看内核版本

  1. 尝试过用群晖自带的数据库,但是连不上,没找到原因;

命令行安装

docker cli

SSH 客户端中依次执行下面的命令

从安全角度,涉及到 password 的地方,最好都改一下;

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
# 新建文件夹 matomo 和 子目录
mkdir -p /volume1/docker/matomo/{data,web}

# 进入 matomo 目录
cd /volume1/docker/matomo

# 运行 mariadb 容器
docker run -d \
--restart unless-stopped \
--name matomo_db \
-v $(pwd)/data:/var/lib/mysql \
-e MARIADB_ROOT_PASSWORD=123456 \
-e MARIADB_DATABASE=matomo \
-e MARIADB_USER=matomo \
-e MARIADB_PASSWORD=123456 \
mariadb:10.6

# 运行 matomo 容器
docker run -d \
--restart unless-stopped \
--name matomo_web \
--link matomo_db:mariadb \
-p 7880:80 \
-v $(pwd)/web:/var/www/html \
-e MATOMO_DATABASE_HOST=mariadb \
-e MATOMO_DATABASE_ADAPTER=mysql \
-e MATOMO_DATABASE_TABLES_PREFIX=ma_ \
-e MATOMO_DATABASE_USERNAME=matomo \
-e MATOMO_DATABASE_PASSWORD=123456 \
-e MATOMO_DATABASE_DBNAME=matomo \
matomo:4.13

docker compose

将下面的内容保存为 docker-compose.yml 文件

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
version: '3'

services:
mariadb:
image: mariadb:10.6
container_name: matomo_db
restart: unless-stopped
volumes:
- ./data:/var/lib/mysql
environment:
- MARIADB_ROOT_PASSWORD=123456
- MARIADB_DATABASE=matomo
- MARIADB_USER=matomo
- MARIADB_PASSWORD=123456

matomo:
image: matomo:4.13
container_name: matomo_web
restart: unless-stopped
ports:
- 7880:80
volumes:
- ./web:/var/www/html
environment:
- MATOMO_DATABASE_HOST=mariadb
- MATOMO_DATABASE_ADAPTER=mysql
- MATOMO_DATABASE_TABLES_PREFIX=ma_
- MATOMO_DATABASE_USERNAME=matomo
- MATOMO_DATABASE_PASSWORD=123456
- MATOMO_DATABASE_DBNAME=matomo
depends_on:
- mariadb

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
# 新建文件夹 matomo 和 子目录
mkdir -p /volume1/docker/matomo/{data,web}

# 进入 matomo 目录
cd /volume1/docker/matomo

# 修改目录权限
chmod 777 web

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:7880 就能看到主界面

选择 简体中文

设置完成就是中文了,不需要刷新

下一步,进行运行环境检测

继续 下一步,进行数据库设置

因为我们已经在环境变量中进行了设置,所以这里只要继续点 下一步 即可

一般来说如果设置没问题的话,会成功建立数据表,继续 下一步,创建系统的超级用户

设置完成后还是点 下一步,对要跟踪的网站进行设置,当然还是以老苏的博客为例

接下来会生成 JavaScript 跟踪代码

其中 var u="//172.22.0.3/"; 这是容器内部的 IP,后面用域名访问后会发生变化;

最后一步完成后,会收到安全警告

需要修改 /docker/matomo/web/config 目录中的 config.ini.php 文件

【注意】直接修改后保存,会显示权限不足,需要我们将 config.ini.php 文件先下载到本地,修改后再覆盖上传

找到 trusted_hosts[] = "192.168.0.199" ,增加端口,改为 trusted_hosts[] = "192.168.0.199:7880"

另外还需要再增加一行 enable_trusted_host_check=0,用于跳过受信任检测,否则反代之后登录可能会失败

刷新页面,就会显示登录界面

登录成功后的主界面

反向代理

原来老苏准备用 https://matomo.laosu.ml:444 来访问,但经老苏测试,带端口的域名不管用,也就是说收集不到信息,这一点上和 Umami 是一样的

【备注】:

  • 用 Nginx Proxy Manager 反代,因为老苏的域名没备案,所以带端口,似乎不起作用;
  • 用 Cloudflared 反代,域名不带端口,是 OK 的;

按我们预设置的域名、局域网 IP 和端口进行设置

SSL 设置

网页访问存在截端口的情况,所以还需要在 Advanced 中加入下面的代码

1
2
3
4
5
6
7
8
location / {  
proxy_set_header Host $host:444;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_pass http://192.168.0.199:7880;
proxy_redirect http:// https://;
}

跟踪代码

前面我们已经讲了,带端口的域名会收集不到信息,所以如果你跟老苏一样没备案,还是用 Cloudflared 做反代吧

假设用 Cloudflared 反代的域名是https://matomo.xiaosu.ml,就不会有什么问题了,跟踪代码中会自动变成访问的域名地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//matomo.xiaosu.ml/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->

Tracking Code放到老苏博客网站的 <head> 部分,如果正好有人访问的话,很快就会有数据

可以查看访客更详细的访问页面和停留时间

参考文档

matomo-org/matomo: Liberating Web Analytics. Star us on Github? +1. Matomo is the leading open alternative to Google Analytics that gives you full control over your data. Matomo lets you easily collect data from websites & apps and visualise this data and extract insights. Privacy is built-in. We love Pull Requests!
地址:https://github.com/matomo-org/matomo

Matomo Analytics - The Google Analytics alternative that protects your data
地址:https://matomo.org/

matomo-org/docker: Official Docker project for Matomo Analytics
地址:https://github.com/matomo-org/docker