Typecho 是有一个叫 Access 的插件的,可以进行简单的流量统计,但这个插件对我来说不够直观和全面:
- 访问者的属地需要手动点击才会查询
- 没有地图视图来更加直接的显示访问者分布在哪里
- 统计维度不够全面
- 对真实用户访问和爬虫的区分做得不够好
因此,我决定自建流量统计服务。支持自托管的流量统计服务有好几个,在综合考虑了易用性、需要的硬件资源后,Umami 更适合我,因为我的服务器内存不大,跑不了太复杂的东西。
- 博客站:Typecho
- Web 服务器:Apache2
- 服务器系统:Ubuntu18.04
安装 Umami 服务
Umami 支持二进制安装和 docker 安装,后者更加方便,所以我是用的 docker 装的。Umami 支持 Mysql 和 postgresql 两种数据库,按个人喜好选择即可。
拉取镜像
拉取 Umami 镜像(适用于 postgresql)到本地
sudo docker pull docker.umami.is/umami-software/umami:postgresql-latest
由于 dockerhub 目前无法直接访问(2024-09-22),因此需要提前换成国内源,阿里云或者腾讯云皆可
启动容器
创建 docker-compose. yml 文件,把 yourPath 替换为你想要的路径
vim /yourPath/docker-compose.yml
写入配置文件(按需修改对应配置):
version: '3'
services:
umami:
image: docker.umami.is/umami-software/umami:postgresql-latest
ports:
- "替换为主机端口:3000"
environment:
DATABASE_URL: postgresql://umami:umami@db:5432/umami
DATABASE_TYPE: postgresql
APP_SECRET: "替换为随机字符串"
depends_on:
- db
restart: always
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
interval: 5s
timeout: 5s
retries: 5
db:
image: postgres:latest
environment:
POSTGRES_DB: umami
POSTGRES_USER: umami
POSTGRES_PASSWORD: umami
volumes:
- umami-db-data:/var/lib/postgresql/data
restart: always
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 5
volumes:
umami-db-data:
启动容器:
sudo docker-compose up -d
查看是否正常启动:
sudo docker ps -a
如果启动成功,则可以用 IP: 主机端口
的方式进行访问了(需提前放行对应端口)。不过为了安全起见,后面会设置反向代理,所以这里还是不要放行端口,尽量减少服务器开放的端口。
设置反向代理
网上的教程一般用 Nginx 来反向代理,其实 Apache2 也可以。我另外配置了 HTTPS 和 SSL 证书。SSL 证书用的是泛域名的,可以通过一些自动化证书签发部署平台来操作,比如 CertSvc(订阅制收费)或者 Certimate(开源免费,需要自己部署),这里不再赘述这些咋部署。
编写配置文件:
sudo vim /etc/apache2/sites-available/umami.替换为你的域名.conf
<IfModule ssl_module>
<VirtualHost _default_:443>
ServerName umami.替换为你的域名
ServerAlias www.umami.替换为你的域名
SSLEngine on
SSLProxyEngine On
SSLProxyVerify none
SSLCertificateFile /etc/apache2/ssl/_.替换为你的域名.pem
SSLCertificateKeyFile /etc/apache2/ssl/_.替换为你的域名.key
SSLCertificateChainFile /etc/apache2/ssl/_.替换为你的域名.pem
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://127.0.0.1:替换为主机端口/
ProxyPassReverse / http://127.0.0.1:替换为主机端口/
</VirtualHost>
</IfModule>
<VirtualHost *:80>
ServerName umami.替换为你的域名
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/$1 [L,R]
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>
安装并启用 Apache2 的反向代理模块:
sudo a2enmod proxy
sudo a2enmod proxy_http
启用站点:
sudo a2ensite umami.替换为你的域名.conf
重启 Apache2 服务:
sudo systemctl restart apache2
绑定 Typecho
用 umami.替换为你的域名
访问部署好的 Umami,默认账号为 admin,密码为 umami。进入服务后,先去修改账号和密码。
依次点击 网站-新建网站-输入名字和域名
,复制下生成的跟踪代码。
- 如果使用的其他主题,需要把跟踪代码粘贴到主题的
header.php
的</head>
前面 - 如果使用的是 Handsome 主题,可以把跟踪代码粘贴到
开发者设置-自定义输出head头部的HTML代码
中
至此,Umami 就已经可以开始统计博客的访问数据了。