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 就已经可以开始统计博客的访问数据了。

最后修改:2024 年 09 月 23 日
如果觉得我的文章对你有用,请随意赞赏