网站流量监控-Umami , Plausible , Matomo
步骤/目录:
1.背景介绍
2.Umami
(1)Umami的搭建
(2)Umami的使用
3.Plausible
(1)Plausible的搭建
(2)Plausible的使用
(3)Plausible接入谷歌搜索
a.创建专案
b.启用OAuth
c.创建OAuth
d.域名验证
e.plausible重启与设置
f.在plausible查看GSC数据
4.Matomo
(1)Matomo的搭建
(2)Matomo的使用
本文首发于个人博客https://lisper517.top/index.php/archives/162/
,转载请注明出处。
本文的目的是介绍一些监控个人网站流量的工具。
本文写作日期为2023年12月30日。主要受up主 我不是咕咕鸽 的启发。他还分享了很多其它有趣的内容,讲解也很详细、基础,很适合小白学习。
1.背景介绍
在日常管理服务器的过程中,一些工具能大大减轻工作量。前几天在up主 我不是咕咕鸽 的空间看到了很多有趣的分享,也尝试自己搭建一下。
搭建网站后,有时候希望统计一下有多少人在看,都是用什么设备看,以对网站做针对性的优化,就需要进行流量统计。该up主推荐过3款统计软件,按复杂程度是 Umami ≤ Plausible < Matomo ,当然Matomo的功能也是最全的。原视频在 Umami 、 Plausible 、 Matomo 。如果不想自己搭建,也可以在 Google Analytics 注册账号、使用谷歌统计。实际上,这3者都自称是Google Analytics的替代品,无疑说明了GA的地位。
2.Umami
Umami是其中功能最简单的,但是满足个人需要已经足够。
(1)Umami的搭建
Umami的github项目地址 上演示了如何使用docker-Umami,因为仓库中自带了Dockerfile、docker-compose.yml,所以把项目 git clone 到服务器上后稍微修改一下yml,再 docker compose up -d
就行了。
由于还是比较习惯有详细说明的镜像,笔者接下来选择稍微可靠一点的 elestio版本的Umami镜像 来演示。在服务器上如下操作:
mkdir -p /docker
cd /docker
yum install git -y
git clone https://github.com/elestio-examples/umami.git
#git一直clone不了,就到项目原址下zip包解压到服务器上
cd /docker/umami
cp /docker/umami/tests/.env /docker/umami/.env
vim /docker/umami/.env
该.env内容为:
ADMIN_PASSWORD=test@123
SECRET_KEY_BASE=test-test-test
TEST_URL=http://172.17.0.1:3956
前两行可以稍微改一下(可以用 openssl rand -base64 64 | tr -d '\n' ; echo
生成64位密钥作为SECRET_KEY_BASE,或者自己乱写)。因为要用NPM,把3956改成了3000。
vim docker-compose.yml
yml内容为:
version: '3'
services:
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
ports:
- "172.17.0.1:3956:3000"
environment:
DATABASE_URL: postgresql://umami:${ADMIN_PASSWORD}@db:5432/umami
DATABASE_TYPE: postgresql
APP_SECRET: ${SECRET_KEY_BASE}
depends_on:
- db
restart: always
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: umami
POSTGRES_USER: umami
POSTGRES_PASSWORD: ${ADMIN_PASSWORD}
volumes:
- ./umami-db-data:/var/lib/postgresql/data
restart: always
因为接下来要使用NPM,所以把umami的端口映射注释掉,并在末尾加上了:
networks:
default:
external: true
name: NPM_group
最后运行:
docker-compose pull
docker-compose config
docker-compose up
从ghcr.io拉镜像比较慢,需要等待一会儿。笔者拉了2个小时。等不及的也可以拉 elestio/umami:latest
,记得修改一下yml。
成功运行后,配置一下NPM,从网页访问Umami;不用NPM,则在3956(或者3000)端口访问即可。但是不管怎么样,都要求能通过公开的域名、https访问到umami,最简单的方法是NPM,参考 可视化管理Nginx-Nginx Proxy Manager 。
(2)Umami的使用
.env里面的是postgresql的用户密码,Umami网页默认的则是 admin
和 umami
。登录后,在右上角profile处设置一下语言、密码、用户名。
添加一个网站,然后在 跟踪代码 可看到一段javascript代码。把这段代码复制到网站的php里,要保证每个页面都有这段代码(比如footer.php、header.php,typecho在 typecho/app/usr/themes/default/header.php
),并且加上注释:
<!--umami analytics start-->
<script async src="https://umami域名/script.js" data-website-id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"></script>
<!--umami analytics end-->
修改php后重启一下博客。然后chrome浏览器打开新的页面,按F12出现开发者工具,访问自己的博客, 开发者工具-网络页
中可以看到一个script.js,请求网址是 https://umami域名/script.js
。返回umami,就能看到访问数据了。
在umami中可以添加其它网站,注意在网址中加入js即可。如果多人使用,可以创建umami的其它用户,控制一下用户权限。总的来说是很不错的,唯一缺点大概是不能统计别人是通过什么搜索词点进你的网站。
3.Plausible
github-Plausible 展示了搭建的效果,和Umami差不多。Plausible有官方维护的镜像: docker-Plausible 。Plausible还可以接入谷歌搜索,看看别人都是通过什么关键词来到你的网站,这将在下文详细介绍。
(1)Plausible的搭建
在服务器上如下操作:
mkdir -p /docker
cd /docker
git clone https://github.com/plausible/hosting
mv /docker/hosting /docker/plausible
cd /docker/plausible
vim docker-compose.yml
原yml为:
version: "3.3"
services:
mail:
image: bytemark/smtp
restart: always
plausible_db:
# supported versions are 12, 13, and 14
image: postgres:14-alpine
restart: always
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=postgres
plausible_events_db:
image: clickhouse/clickhouse-server:23.3.7.5-alpine
restart: always
volumes:
- event-data:/var/lib/clickhouse
- ./clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro
- ./clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/logging.xml:ro
ulimits:
nofile:
soft: 262144
hard: 262144
plausible:
image: plausible/analytics:v2.0
restart: always
command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
depends_on:
- plausible_db
- plausible_events_db
- mail
ports:
- 8000:8000
env_file:
- plausible-conf.env
volumes:
db-data:
driver: local
event-data:
driver: local
同样,因为要用NPM,把plausible的 8000->8000 注释掉,在末尾加上:
networks:
default:
external: true
name: NPM_group
并且把volume卷都改成本地目录。最后得到:
version: "3.3"
services:
mail:
image: bytemark/smtp
restart: always
plausible_db:
# supported versions are 12, 13, and 14
image: postgres:14-alpine
restart: always
volumes:
- ./db-data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=postgres
plausible_events_db:
image: clickhouse/clickhouse-server:23.3.7.5-alpine
restart: always
volumes:
- ./event-data:/var/lib/clickhouse
- ./clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro
- ./clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/logging.xml:ro
ulimits:
nofile:
soft: 262144
hard: 262144
plausible:
image: plausible/analytics:v2.0
restart: always
command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
depends_on:
- plausible_db
- plausible_events_db
- mail
#ports:
#- 8000:8000
env_file:
- plausible-conf.env
networks:
default:
external: true
name: NPM_group
在本地创建两个目录,并修改一下配置:
mkdir -p /docker/plausible/db-data
mkdir -p /docker/plausible/event-data
openssl rand -base64 64 | tr -d '\n' ; echo
#生成64位密钥。复制下来
vim plausible-conf.env
原文件内容为:
BASE_URL=replace-me
SECRET_KEY_BASE=replace-me
把BASE_URL换成你打算给Plausible的网址,比如 https://plausible.你的域名
;SECRET_KEY_BASE换成刚才生成的密钥。Plausible也是可以注册的,如果想仅邀请才能注册,就加上一行: DISABLE_REGISTRATION=invite_only
,笔者的建议是最好不要开放注册。
最后运行:
cd /docker/plausible
docker-compose config
docker-compose pull
docker-compose up
(2)Plausible的使用
用NPM反代一下plausible:8000,浏览器访问,第一次登录需要注册,然后按照流程走即可,最后同样在header.php添加js:
<!--plausible analytics start-->
<script defer data-domain="你的域名" src="https://plausible域名/js/script.js"></script>
<!--plausible analytics end-->
同样重启博客,F12-网络,看到有script.js发送请求到plausible域名。
其它使用方面没什么好说的,Plausible界面和Umami差不多,用起来也是很简单。在网站的右上角有一个小齿轮,点进去有一些设置,值得注意的有:
a.可以接受Google Analytics导出的数据;
b.可以与Google Search Console整合(见下文);
c.可以定期发送邮件,或者在大流量冲击时(比如有10个人同时浏览你的网站)发邮件提醒,而且发邮件不需要设置SMTP等。
(3)Plausible接入谷歌搜索
这部分参考了 官方文档1 官方文档2 (官方文档写的比较详细,或者也可以看 这篇文章 )。
另外,下面的操作前提是你的本机和服务器都能访问谷歌,最好是香港服务器。
a.创建专案
到 谷歌云控制台 ,登录谷歌账号,在最上方偏左处下拉,创建一个专案。笔者之前曾免费体验过谷歌云服务器,有一个默认的 My First Project
,现在新增一个叫 Plausible 的专案,在最上方偏左的地方可以切换到这个专案。然后在 API和服务
(APIs & Services)里,上方有一个 启用API和服务
,在里面搜索并启用 Google Search Console API
。
b.启用OAuth
在 API和服务
里,左边第四项 OAuth同意画面
( OAuth consent screen
),内部
是说只要提供的ID密码正确、plausible或者其它应用就能使用你的API(用于在测试中的应用), 外部
是说不光验证用户密码、还要验证应用身份(用于可以发布的应用),为了安全性可以选外部,接下来 編輯應用程式註冊申請
。需要注意:在 测试使用者
中,添加自己的google账号(因为刚才选的外部,只有测试使用者才能使用)。
c.创建OAuth
回到 API和服务
,左边第三项 凭证
( Credentials
) - 上方建立凭证
- OAuth 用户端 ID
,需要注意:类型选择 网页应用程式
, 已授權的重新導向 URI
填 https://自己的plausible域名/auth/google/callback
。创建完成后可以下载一个json文件,里面最关键的是 client_id 和 client_secret 。
d.域名验证
访问 GSC ,选择左边的网域,添加自己的域名,然后到DNS厂商处验证,Google会跳转到DNS厂商处给你加一个TXT的解析,以确定域名是你的。如果不支持DNS验证,或者其它原因(比如你的博客是在blog等子域名下、且只想收集博客的数据),也可以选右边的子域名。
e.plausible重启与设置
vim /docker/plausible/plausible-conf.env
现在添加id和secret,结果如下:
BASE_URL=replace-me
SECRET_KEY_BASE=replace-me
DISABLE_REGISTRATION=invite_only
GOOGLE_CLIENT_ID=你的id
GOOGLE_CLIENT_SECRET=你的密码
换成自己的id和secret。然后重启plausible:
cd /docker/plausible
docker-compose down --remove-orphans
docker-compose up -d
然后回到自己的plausible域名里,在网站设置里找到GSC integration,点击Continue with Google。跳转并登录google账号,会显示 此應用程式未獲 Google 驗證
,继续即可,把 查看已驗證網站的 Search Console 資料
勾选上。
如果此处显示 There has been a server error.
,说明你搭建plausible的服务器被谷歌封禁了。
一切正常的话,最后会跳转回你的plausible域名,在下方的 (Choose property)
下拉菜单中选择 sc-domain:你的域名 就大功告成了。
最后,还可以在 自己谷歌账号的主页 看看,会显示有一个你刚才设置名称的应用接入。
f.在plausible查看GSC数据
在plausible查看网站的dashboard,其中有一个 Top Sources ,下面有个 Google ,点击就能看到搜索关键词。注意GSC的统计有24-36h的延迟(而Plausible是从GSC立即拿数据的),所以刚开通GSC时不会显示什么,你可以自己从google搜索关键词、点进自己的博客实验一下,第二天再看看。
另外需要注意的是,Plausible这里对GSC的数据有所筛选,只显示通过谷歌搜索到、并点进了你的网站的关键词。如果别人只是通过谷歌搜索到你的网站,但没有点进来,Plausible这里则不会显示。GSC也不是一定能统计准确的,有时候各个关键词加起来不等于通过谷歌点击网站的人数,Plausible对此无能为力。
最后,plausible的开发者在2020年就明确表示暂时没有计划接入其它搜索引擎(见 这个问题 ),所以现在只能接入谷歌,好在已经够用。
4.Matomo
Matomo占用服务器资源最多,功能也最全面,个人网站其实不太需要太复杂的功能,它的优点是能为电商统计现金流。另外,由于Matomo功能比较复杂,他们除了开源外还接受付费为网站定制统计功能。
(1)Matomo的搭建
在云服务器上如下操作:
mkdir -p /docker/matomo/data/mysql
mkdir -p /docker/matomo/www
cd /docker/matomo
vim docker-compose.yml
写入如下内容:
version: "3"
services:
mariadb_matomo:
image: mariadb
command: --max-allowed-packet=64MB
volumes:
- /docker/matomo/data/mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=999999
- MYSQL_USER=matomo
- MYSQL_PASSWORD=123456
- MYSQL_DATABASE=matomo
restart: always
matomo:
image: matomo
volumes:
- /docker/matomo/www:/var/www/html
environment:
- MATOMO_DATABASE_HOST=mariadb_matomo
- MATOMO_DATABASE_ADAPTER=mysql
- MATOMO_DATABASE_TABLES_PREFIX=matomo_
- MATOMO_DATABASE_USERNAME=matomo
- MATOMO_DATABASE_PASSWORD=123456
- MATOMO_DATABASE_DBNAME=matomo
#ports:
#- 80:80
#- 443:443
restart: always
networks:
default:
external: true
name: NPM_group
8080和8443如果被占用,可以改一下,记得在服务器的防火墙处打开这两个端口。
最后运行:
docker-compose config
docker-compose up
最后用NPM为Matomo添加一个proxy host,并强制SSL访问。如果不用NPM的话,也要通过nginx等方式来https访问Matomo,否则之后是统计不到的。
(2)Matomo的使用
访问Matomo域名,按部就班进行安装。设置好要统计的网站,把JS代码粘贴到该网站的页面里即可(或者用列出的其它统计方法)。
要测试JS代码是否正常,可以chrome访问自己的域名,按F12打开 开发者工具 ,刷新一下,在网络里面有一个 matomo.js 。可以发现该js请求了 https://域名:8080
,所以前面必须要能通过https访问Matomo。
Matomo的使用没有其它太多可讲的,因为它的功能比较强大,笔者又不是很熟悉。值得一提的是它支持更多搜索引擎的关键词,但是需要安装 Search Engine Keywords Performance插件 ,而且这个插件是收费的(可免费试用30天。最低收费$159/年,限你的matomo不超过4个用户)。如果不幸购买了该插件,可以按照 matomo官方文档 接入谷歌的SEC。