使用 Umami 对博客网站进行网络分析

本文简要介绍了如何在服务器上安装并配置 Umami 对博客网站进行网络分析。

示例
点击  仪表盘 查看本博客网站的网络流量统计分析。

简介

Umami 是一款开源、可本地部署的网络分析解决方案,致力于帮助我们轻松地收集、分析和理解网站的网络数据,同时注重访问者的隐私安全和网络数据的所有权。

相较于广泛使用的 Google Analytics,Umami 强调隐私保护和数据安全:

  • 遵守不断变化的数据隐私法,其收集的所有数据都是匿名的,因此无法识别任何个人用户,不会侵犯用户的隐私。
  • 无需运行复杂的 report,只收集我们关心的指标,可本地运行托管,完全掌控网站的数据安全。
  • 不收集任何个人信息,不使用 cookies,不跨网站跟踪用户,符合欧盟提出的通用数据保护条例(GDPR: General Data Protection Regulation)。

部署

参考
本节参照 Umami 官方文档 - Running on DigitalOcean 将数据库和网站服务器部署在同一台主机上。
信息
服务器操作系统:Ubuntu 20.04.6 LTS

MySQL

MySQL 是一个开源数据库管理系统,通常被安装在流行的 LAMP(Linux、Apache、MySQL、PHP/Python/Perl)中,作为其堆栈的一部分。
MySQL 应用关系模型和结构化查询语言(SQL: Structured Query Language)来管理其数据库内存储的数据。

参考
本小节参照 DigitalOcean 教程 - How To Install MySQL on Ubuntu 20.04 在 Ubuntu 20.04 上使用 APT 包管理器安装 MySQL 数据库。

安装 MySQL

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 更新软件包源和软件包
$ sudo apt update
$ sudo apt upgrade

# 安装 MySQL
$ sudo apt install mysql-server

# 开启 MySQL 服务
$ sudo systemctl start mysql.service

# 针对 MySQL 的安全性配置
$ sudo mysql_secure_installation

上述针对 MySQL 的安全性配置程序会提示用户:

  • 设置用户密码复杂度安全等级;
  • 删除数据库测试用的匿名账户;
  • 禁用管理员账户远程登录权限;
  • 删除默认的测试数据库;
  • 刷新 privilege 表,使上述修改立即生效。

创建新用户

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 以管理员身份登录 MySQL
$ sudo mysql

# 添加新用户 umami
> CREATE USER 'umami'@'localhost' IDENTIFIED BY 'password';

# 为新用户 umami 添加数据库操作权限
> GRANT CREATE, ALTER, DROP, INSERT, UPDATE, INDEX, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'umami'@'localhost' WITH GRANT OPTION;

# 刷新 privilege 表,使上述修改立即生效
> FLUSH PRIVILEGES;

# 退出 MySQL
> exit

创建数据库

1
2
3
4
5
6
7
8
# 以新用户 umami 登录 MySQL
$ mysql -u umami -p

# 为 Umami 网络分析创建数据库
> CREATE DATABASE IF NOT EXISTS umami

# 退出 MySQL
> exit

测试 MySQL

1
2
3
4
5
# 查看 MySQL 服务运行状态
$ systemctl status mysql.service

# 查看 umami 用户状态
$ sudo mysqladmin -p -u umami version

Node.js

Node.js 是主要用于服务器端的 JavaScript 运行时环境,它允许开发人员使用 JavaScript 创建可扩展的后端功能。

参考
本小节参照 DigitalOcean 教程 - How To Install Node.js on Ubuntu 20.04 在 Ubuntu 20.04 上使用 APT 包管理器安装 Node.js。
警告
Ubuntu 20.04 默认 APT 中 Node.js 的版本为 10.19,目前已过时,官方不再支持和维护。
参考
本小节参照 NodeSource - Node.js Binary Distributions 在 Ubuntu 20.04 上安装 Node.js。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 更新软件包源和软件包
$ sudo apt update
$ sudo apt upgrade

$ sudo apt install -y ca-certificates curl gnupg

# 下载并导入 Nodesource GPG key
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

# 创建 deb repository
$ NODE_MAJOR=20
$ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

# 更新软件包源
$ sudo apt update

# 安装 Node.js
$ sudo apt install nodejs -y

# 查看 Node.js 版本号
$ node -v

Nginx

Nginx 是世界上最受欢迎的轻量级网络服务器之一,也可用作反向代理。

参考

Umami

参考
本小节参照 Umami 官方文档 - Installing from source 本地编译安装 Umami。

安装 Umami

Yarn 是一个成熟的开源软件包管理器,用于管理 JavaScript 项目中的依赖性。
Yarn 辅助我们安装、更新、配置和删除软件包依赖项,帮助我们以更少的干扰更快地实现目标。

1
2
3
4
5
6
7
8
9
# 安装 Yarn 包管理器
$ sudo npm install -g yarn

# 获取 Umami 源代码
$ git clone https://github.com/umami-software/umami.git

# 安装 Umami
$ cd umami
$ sudo yarn install
安装失败
若安装过程报错,可使用 sudo yarn install --verbose 查看详细错误信息,以对症下药。

报错处理

笔者遇到的报错信息如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
verbose 74.983659555 Error: /home/ubuntu/umami/node_modules/sharp: Command failed.
Exit code: 1
Command: (node install/libvips && node install/dll-copy && prebuild-install) || (node install/can-compile && node-gyp rebuild && node install/dll-copy)
Arguments: 
Directory: /home/ubuntu/umami/node_modules/sharp
Output:
sharp: Downloading https://github.com/lovell/sharp-libvips/releases/download/v8.14.5/libvips-8.14.5-linux-x64.tar.br
sharp: Installation error: aborted
sharp: Please see https://sharp.pixelplumbing.com/install for required dependencies
    at ProcessTermError.ExtendableBuiltin (/usr/lib/node_modules/yarn/lib/cli.js:721:66)
    at ProcessTermError.MessageError (/usr/lib/node_modules/yarn/lib/cli.js:750:123)
    at new ProcessTermError (/usr/lib/node_modules/yarn/lib/cli.js:790:113)
    at ChildProcess.<anonymous> (/usr/lib/node_modules/yarn/lib/cli.js:25787:17)
    at ChildProcess.emit (node:events:514:28)
    at maybeClose (node:internal/child_process:1105:16)
    at ChildProcess._handle.onexit (node:internal/child_process:305:5)

即无法从 GitHub 上下载 sharp 源代码。

sharp - Installation # Chinese mirror 给出了阿里提供的国内镜像站点。

参考 解决前端安装 sharp 出错问题 sharp: Command failed. 给出的解决方案。

1
2
3
4
5
6
7
8
9
# 打开或创建项目目录下的 yarn 配置文件 .yarnrc
$ vim .yarnrc

# 设置 sharp 以及 libvips 的镜像地址
sharp_binary_host "https://npmmirror.com/mirrors/sharp"
sharp_libvips_binary_host "https://npmmirror.com/mirrors/sharp-libvips"

# 重新安装 Umami
$ sudo yarn install

配置数据库

在项目目录中创建 .env 文件:

1
2
3
4
$ vim .env

# 配置数据库地址
DATABASE_URL=mysql://umami:password@localhost:3306/umami

数据库地址中配置好之前创建的 MySQL 用户名、密码、数据库。

构建 Umami

1
$ sudo yarn build

首次运行构建时,Umami 将在数据库中创建所有必需的数据库表。

Umami 还将创建一个带有用户名 admin 和密码 umami 的登录帐户。

构建失败
无法链接至数据库问题。

笔者遇到的报错信息如下:

✓ DATABASE_URL is defined.

✗ Unable to connect to the database.

error Command failed with exit code 1.

解决方案:

运行 Umami

PM2 是一个守护进程管理器,用于管理和保持应用程序的在线状态。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 安装 pm2
$ sudo yarn global add pm2

# 运行 Umami
$ cd umami
$ pm2 start yarn --name umami -- start

# 系统重启时自动运行 pm2 管理的服务
$ pm2 startup
$ pm2 save

# pm2 常用操作命令,app_name 也可用进程在 pm2 中的 id 代替
$ pm2 start python-app.py --interpreter python3 --attach
$ pm2 logs
$ pm2 status
$ pm2 restart app_name
$ pm2 reload app_name
$ pm2 stop app_name
$ pm2 delete app_name

默认情况下,Umami 将在 http://localhost:3000 启动应用程序。

我们需要从 Web 服务器代理(云服务器提供商的设置页面)请求或更改端口以直接为应用程序提供服务。

PM2 的其他用法可参考 PM2 Process Management - Quick Start

Nginx 代理

目前,Umami 已在服务器后台持续运行,我们可以使用 Nginx 将网站的访问请求代理至 Umami。

注意
如果我们希望监测分析的网站已经安装 SSL 证书,通过 HTTPS 访问,则同样需要为 Umami 服务器所在的域名申请并安装 SSL 证书,否则浏览器会因 HTTPS 安全问题屏蔽网页中植入的 Umami 跟踪代码。

在服务器的 Nginx 配置文件中加入以下配置,将 umami.yourdomain.com 发送所有请求代理至 Umami。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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 构建运行时将自动创建一个带有用户名 admin 和密码 umami 的登录帐户。我们需要登录账户后修改密码。

  • 在浏览器地址栏输入 http://www.yourdomain.com:3000 可打开 Umami 登录界面。
  • 使用上述登录账户登录后点击 设置 -> 个人资料 ->  更改密码 更改登录账户密码。

添加网站

  • 登录 Umami 后点击 设置 -> 网站 -> + 添加网站
  • 填写希望通过 Umami 进行分析的网站名称和域名,点击 保存

收集数据

  • 点击新添加的网址项右侧的  编辑
  • 跟踪代码 标签下的追踪代码嵌入网址代码 <head> 部分。
  • 访问网站的数据将及时更新至 Umami 仪表盘。

共享链接

可通过共享链接将网站数据状态公开。

  • 登录 Umami 后点击 设置 -> 网站 ->  编辑 -> 共享链接 -> 启用共享链接,即可生成网站数据仪表盘的共享链接。
示例
点击  仪表盘 查看本博客网站的网络流量统计分析。

更新

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 从 Git 仓库拉取更新
git pull

# 安装、更新依赖项
yarn install

# 重新构建 Umami
yarn build

# 重启 Umami
pm2 restart umami
0%