一、前言
作为一个长期和数据打交道的人,我对各类数据指标有着近乎本能的关注。在维护自己的这个小网站时,很自然地就想到了要引入一套用户行为分析工具。它不仅能满足我个人的好奇心,了解一下都有谁、在什么时间、通过什么方式访问了这里,长期来看,这些数据的沉淀也能为网站内容的优化方向提供一些客观的参考。
市面上的选择很多,比如强大的 Google Analytics。但在当前环境下,我更倾向于一个能将数据完全保留在自己服务器上的解决方案。这不仅是为了彻底的“数据私有”,也是出于一种技术上的“掌控感”。经过一番调研,开源的 Matomo 进入了我的视野。它功能全面,社区活跃,最关键的是,它支持完全本地化部署。
为什么是 Matomo?
在正式开始部署前,简单梳理一下选择 Matomo 的几个核心理由:
数据所有权: 这是最重要的一点。所有访客数据都存储在自己的数据库里,不必担心隐私泄露或数据被用于其他目的。对于一些只在内网访问的政务系统,这种方案更是刚需。
功能完备: 从实时访客、行为路径,到流量来源、设备统计,乃至转化漏斗分析,社区版的功能已经足够强大,完全可以满足个人网站和中小型项目的分析需求。
开源免费: 无需承担额外的服务费用,只需要投入服务器资源和一些折腾的时间。
良好的兼容性: 除了常规的网站,它同样支持对 APP、小程序甚至 IoT 设备的数据进行追踪,扩展性很好。
二、部署体验
1.平台部署
和现在大多数应用一样,Matomo 的部署首选方案自然是 Docker。官方提供了相当完善的 Docker 镜像和部署指南,这让初始启动变得非常简单。我个人习惯使用 docker-compose 来编排容器,这样能更清晰地管理服务和数据卷。 一个基础的 docker-compose.yml 文件大概是下面这样,包含 Matomo 应用本身和一个独立的数据库服务。
详细配置参考:
启动命令:
docker run --rm --volumes-from="matomo-app-1" --link matomo-app-1 python:3-alpine python /var/www/html/misc/log-analytics/import_logs.py --url=http://ip.of.your.matomo.example --login=yourlogin --password=yourpassword --idsite=1 --recorders=4 /var/www/html/logs/access.log2.踩坑
看似简单的部署,很快就遇到了第一个门槛:SSL 配置。
Matomo 在初始化安装完成后,会强制要求使用 HTTPS 访问。这本身是一个非常合理的安全设定,但问题在于,官方的 Docker 镜像中,默认的 Apache 服务并未开启 SSL 模块。这就导致了一个矛盾:如果我在 docker-compose 里直接将容器的 443 端口映射出来并配置好域名,Matomo 在首次启动时会因为自身 Apache 不支持 SSL 而启动失败。这是一个典型的“先有鸡还是先有蛋”的问题。
正确的解决思路是分两步走:
1. 先以 HTTP 方式完成 Matomo 的初始化安装。
2. 进入容器内部,手动为 Apache 配置 SSL,然后再将服务切换到 HTTPS。
具体的步骤记录如下:
#第一步:进入正在运行的 Matomo 容器。
bash docker exec -it matomo bash
#第二步:在容器内为 Apache 启用 SSL 模块并重启服务。
a2enmod ssl
service apache2 restart
#第三步:修改 Matomo 的站点配置文件,添加 HTTPS 监听和证书配置。
nano matomo:/var/www/html/config/config.ini.php
#添加https监听
<VirtualHost *:443>
ServerName your.domain.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/fullchain.pem
SSLCertificateKeyFile /etc/ssl/certs/privkey.pem
</VirtualHost>
#第四步:再次重启容器中的apache
docker exec -it matomo service apache2 restart
每次容器升级时(apache爆出的漏洞有点多,不升级不放心),证书问题都要重新处理一遍。

3.网站接入
部署完成后,剩下的工作就简单了。Matomo 会提供一段 JavaScript 追踪代码,只需要将它嵌入到网站所有页面的 <head> 标签里即可,比如说Halo的代码注入全局标签:

对于使用 Vue 这类前端框架构建的单页面应用(SPA),虽然直接添加到index.html就能够实现访客IP时间等记录,但是无法区分出来用户具体访问了哪些页面,如果想详细的页面浏览情况分析,就需要额外配置路由切换时的页面追踪,官方文档中也有相应的说明:
4.查看效果
数据开始汇入后,Matomo 的仪表盘就变得鲜活起来。
默认的仪表盘提供了丰富的信息模块,可以直观地看到实时的访客数量、访客的地理位置分布、访问趋势图、流量来源渠道、用户使用的操作系统和浏览器等。默认情况下,为了保护访客隐私,IP 地址是做了脱敏处理的,当然这个也可以根据需要进行修改。 通过这些数据,我可以清晰地看到哪些文章更受欢迎,访客是通过搜索引擎还是直接链接访问过来的。这些看似简单的信息,背后却能反映出很多问题,对于后续内容的调整和网站的优化,无疑是很有价值的。

如果vue项目不针对性设置的话就会出现图里这种所有人只访问了/index的情况 ↑
可以查看详细日志,默认是IP脱敏的,可以配置取消掉。

总的来说,Matomo 的部署虽然比使用第三方 SaaS 服务要复杂一些,但整个过程完全在可控范围内。它最终交付给我的是一个完全私有、功能强大的网站分析平台,这种“拥有感”是任何第三方服务都无法替代的。 对于注重数据隐私的个人站长,或是需要对内部系统进行用户行为追踪的中小型项目来说,Matomo 无疑是一个值得投入时间去配置和使用的工具。它不仅是一个工具,其部署和配置的过程,本身也是一次不错的技术实践。
评论区