背景

原本网站用的是 Google Analytics 来统计访问数据,因为 GA 功能强大还免费。当然我也是知道在国内很多 Google 相关的服务是访问不了的,但是大部分地区还是可以正常解析 GA 相关的域名,所以我也就用了一段时间。不过后来自己在晚上尝试访问博客的时候,发现还是不太稳定,常常会需要等待加载 js,从而萌生了自己搭建一个统计服务的想法。然后就看到了 Umami 这一款程序。

Umami 介绍

Umami 是一款在 2020 年就开始发布在 Github 上的开源项目,在官网的 Slogan 甚至直接打出了这样的口号

Umami is an open source, privacy-focused alternative to Google Analytics

可见其自身定位就是以替代 GA 为目标。还可以从官网看到他们宣传的特性:

  • 尊重隐私,Umami 不收集个人信息、不使用 Cookie、不跨网站追踪用户、复合 GDPR 要求。
  • 掌控自己的数据,Umami 收集的信息皆为匿名信息,几乎不可能准确定位用户,可以对收集的数据放心。
  • 简单易用,Umami 只收集你最关心的一些数据。
  • 开源,这也是这一款程序最大的特点。

这简直深得我心,而且这款程序还支持 Docker 部署,不得不说这也是逐渐成为了许多开源程序的潮流——容器化。得益于此,我们可以方便地部署、迁移、备份每一个程序。下面介绍使用 Docker Compose 部署的方式。

安装 Docker

这里我们只需要安装 Docker,因为现在 Docker Compose 已经作为插件集成到了 Docker 里面,下面是一键安装命令、卸载命令:

#安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh ./get-docker.sh

#卸载Docker
sudo apt-get purge docker-ce #删除安装包
sudo rm -rf /var/lib/docker #删除镜像、容器、配置文件等内容

部署 Umami

部署过程同样非常简单,我的习惯是每一个 Docker 项目都会单独放一个文件夹,然后使用 Docker Compose 一键部署,这样也不需要面对一长串的命令行代码改来改去了,因为可以直接在格式化的 yaml 文件里编辑,这样更加的直观。

首先在 /data 目录下创建 umami 文件夹(放在哪里全屏个人喜好):

mkdir /data/umami

然后创建 docker-compose.yaml 文件:

cd /data/umami
touch docker-compose.yaml

然后编辑 docker-compose.yaml 文件,添加下面的内容:

version: '3'
services:
  umami:
    image: ghcr.io/umami-software/umami:postgresql-latest
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgresql://umami:umami@db:5432/umami
      DATABASE_TYPE: postgresql
      HASH_SALT: replace-me-with-a-random-string
    depends_on:
      - db
    restart: always
  db:
    image: postgres:12-alpine
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: umami
    volumes:
      - ./sql/schema.postgresql.sql:/docker-entrypoint-initdb.d/schema.postgresql.sql:ro
      - ./umami-db-data:/var/lib/postgresql/data
    restart: always

保存之后在当前目录(存放有 docker-compose.yaml 的目录)执行:

docker compose up -d

耐心等待一会儿我们就可以访问 http://ip:3000 进行管理了。默认账号密码是

  • Username: admin
  • Password: umami

Nginx 反向代理

老生常谈的问题,我们总不可能无时无刻地访问 IP 进行管理,下面是 Nginx 配置文件的例子:

server {
    listen 443 ssl http2;
    server_name <域名>;
 
    ssl_certificate      <SSL 证书文件>;
    ssl_certificate_key  <SSL 证书密钥>;
 
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 1d;
    ssl_session_tickets off;
 
    # intermediate configuration. tweak to your needs.
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
 
    location / {
      proxy_pass http://127.0.0.1:3000;
      proxy_set_header Host $host;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection upgrade;
      proxy_set_header Accept-Encoding "";
    }
}

Umami 使用

登陆进去后第一步先修改默认密码:

修改默认密码
修改默认密码

然后添加需要统计的网站:

添加网站
添加网站

输入名字、域名即可,添加完成之后获取统计代码:

获取统计代码
获取统计代码

将代码复制之后,加在网站的 <head> 标签内即可,不用担心会影响访问速度,因为这个 js 的加载方式是 async defer,添加完成之后就可以在网站后台查看实时的访问统计了。

针对 WordPress 统计优化

如果简单粗暴地在主题文件或者全局 <head> 标签里添加上统计代码,会把已经登陆的用户(管理员)也统计进去,甚至后台页面也会被记录。所以需要在主题 header.php 文件里的 <head> 标签加入一句判断语句,然后再插入统计代码:

<?php if (!is_user_logged_in()){ ?>
<替换成你的统计代码>
<?php } ?>

参考资料