如果需要统计博客访问的相关数据,一般会选择「百度统计」或是「谷歌分析」。前者面向中文用户,在数据展示上会更加直观;后者全球通用,功能丰富数据详细,只是需要一定的学习成本。

当然,你也可以尝试自己搭建一个统计工具,将数据完全掌握在自己的手里。比如使用「Umami」。

安装过程

首先,安装 Umami 需要一个基本的 LNMP 环境,然后再安装nodejsnpm

安装Nodejsnpm

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
apt-get install -y nodejs
apt-get install -y npm

安装完毕之后,可以用node -vnpm -v检查版本。

下载 Umami

git clone https://github.com/mikecao/umami.git
cd umami
npm install

创建数据库

先创建一个空数据库,比如umami,然后在umami目录中输入:

mysql -u username -p databasename < sql/schema.mysql.sql

username一般是rootdatabasename就是你创建的空数据库的名字,具体例子是:

mysql -u root -p umami < sql/schema.mysql.sql

你也可以在 phpmyadmin 中手动导入到空数据库中。

创建配置文件

umami目录中新建一个.env的配置文件,填入:

DATABASE_URL=(connection url)
HASH_SALT=(any random string)

其中,connection url需要填入:

mysql://username:mypassword@localhost:3306/mydb

any random string填入的是随机字符串,完整的例子是:

DATABASE_URL=mysql://username:mypassword@localhost:3306/mydb
HASH_SALT=123456789

注意去掉括号

编译

npm run build

启动程序

通常使用npm start就可以直接启动,但是退出ssh之后就直接停止运行了,所以需要用一些工具保证后台运行,官方文档中的推荐是:

npm install pm2 -g
cd umami
pm2 start npm --name umami -- start 
pm2 startup
pm2 save

这样就可以用了。

Nginx 反代

因为可以使用ip:3000直接访问,但是有使用域名的话还可以反代一下,这里以Nginx举例。在server段加入配置:

server {
  server_name umami.yourdomain.com;

  location / {
    proxy_pass http://localhost:3000;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

更新 Umami

首先停止运行

pm2 stop umami

获取更新

git pull

可能会遇到获取更新失败。我也不知道为啥我这每次都失败,可以用这个命令git reset --hard,然后再执行上一步git pull
然后重新编译

npm install
npm run build

重新启动

pm2 restart umami

页尾版本号有发生变化,那就是更新成功了。

开始使用

进入后台,登录名是admin,密码我有些忘了,好像默认是umami。好像一开始登录还会要求修改密码,我也忘了……

登陆成功之后,第一件事自然是修改语言。右上角修改语言为中文,然后添加网站。注意域名处填写纯域名,开头不要带https://,结尾不要带/

之后将跟踪代码填入网站的相应位置,就可以开始数据记录了。

使用体验

「简洁」,是 Umami 的一大特色。首页以图表形式列出访问量、访问时长等基本信息,而柱状图则可以更直观地了解各个时间段网站的访问情况。

而更详细的数据如流量来源、着陆页,访客设备、地区等,可以在「查看更多」找到。美中不足的是,访客地区的统计并不准确。

在使用Umami之前,我也体验过一段时间的「Matomo」。Matomo 开启首页需要较长的加载时间,页面存在着无法关闭的开发者广告。功能丰富但略显臃肿。随着使用时间一长,统计数据量的增加,也会拖慢Matomo的运行效率,就需要更高规格的设备才能长期运行,总结下来就是整体使用体验不太好。Umami则不同,在设计上就主张简洁、快速,运行占用资源低,配置简单,因此在加载上更迅速,使用起来更轻松,只是简洁意味着众多功能的缺失。

不过对于小博客博主来说,这些基础功能就足够了。

Docker 部署

其实自己构建很麻烦的,最简单的方法还是用 Docker 来部署 Umami。

参考「Docker -- 从入门到实践」中的教程安装完 Docker-ce 和 docker-compose 后,创建docker-compose.yml文件。填入以下内容:

version: '3.4'
services:
  umami:
    image: ghcr.io/mikecao/umami:mysql-latest
    network_mode: "host"
    environment:
      DATABASE_URL: mysql://root:密码@127.0.0.1:3306/数据库名称
      DATABASE_TYPE: mysql
      HASH_SALT: 随机字符
    restart: always
    container_name: umami

和自己构建安装 umami 的方法类似,因为我是用 lnmp 安装的 mysql,不用再重复安装 docker mysql,所以 network_mode是直接用的host

之后控制台执行docker-compose up -d启动即可。

从 V1 迁移至 V2

Umami 最近更新到了 V2 版本,数据库连接方式发生了改变,需要手动执行一下迁移命令。如果是使用 Docker 的话,可以这么迁移。

这里参考了 Github 上的 Issue:https://github.com/umami-software/umami/issues/1887

在确保设置好 DATABASE_URL 的前提下执行以下操作。

首先,将 Umami 的镜像修改成 V1 版本,例如:

image: ghcr.io/umami-software/umami:mysql-v1.40

启动后,进入到 容器内部终端:

docker exec -ti -u 0 umami sh

其中,umami 是你设置的容器的名字,请注意修改。

接着,执行如下命令:

apk add git

如果安装不动,可以再执行一下换源命令:

sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories

然后再安装 git

接着,拉取迁移脚本:

git clone https://github.com/umami-software/migrate-v1-v2.git

如果拉去不动,可以在链接前加入 https://ghproxy.com/ 加速:

git clone https://ghproxy.com/https://github.com/umami-software/migrate-v1-v2.git

拉取完成后,进入该脚本内:

cd migrate-v1-v2

执行以下命令:

yarn install

接着依次执行以下命令:

yarn build

脚本会提示「Which database are you using?」 请选择你使用的数据库类型,按方向键选择。
接着执行:

yarn start

运行到最后,脚本会提示「Do you want to delete V1 database tables? (Y/N)」是否删除 V1 数据?我是删了的,因为数据库太大了。

然后输入 exit 退出终端,将镜像修改回 mysql-latest ,重新启动容器,即可完成升级工作。

新版界面长这样:

最后,你还要修改一下脚本代码,因为从 umami.js 改成 script.js 了,大概是为了防那些广告插件。毕竟 umami.js 已经进黑名单了。

一些参考

  1. Linux发行版安装Nodejs
  2. GitHub:Umami
  3. Umami文档