前面分享了使用 Umaimi 自建网站访问统计分析,用了一段时间感觉不错。后来又发现了另一款开源的自建网站统计分析工具 - Shynet,看起来很不错,是用 Python 写的,为了和用 Node.js 的 Umami 进行对比(闲得无聊),也试着搭建了一下,最后效果很好,体验不输于 Umami。

shynet-web-analytics

Shynet 是自建的、开源的网站流量统计分析工具,它在没有 Cookie 的情况下工作,不会像其它公共统计工具(例如 Google Analytics、Cloudflare Web Analytics、CNZZ、51LA 等)一样追踪你的访客,它只收集足够有用的数据。同时可以不使用 Javascript 运行,分析脚本十分轻量,不到 1kb,但分析的数据内容很丰富,基本的点击量,来源域名,页面加载时间,使用的浏览器、系统、设备,访问的网页这些都有。

不过 Shynet 并不适合所有人,它非常适合个人项目和中小型网站,但尚未在高流量网站上进行测试。因此还需要大量的不断的维护升级,因此如果您需要一键式解决方案,最好使用其他工具。

搭建过程

安装 Shynet 比较简单,官方提供了两种安装方法,Docker + PostgreSQL 或者直接使用 Docker Compose 安装,我这里选择的是第一种安装方法,如果你想通过 Docker Compose 安装,可以参考官方文档

环境准备

以下演示适用于 Debian 系的操作系统,我为了简单,所有的操作都以 root 账户进行,

安装 Docker

详情参见官网文档

apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common

添加Docker密钥:

curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

添加Docker稳定版仓库:

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

安装Docker:

apt update
apt install docker-ce docker-ce-cli containerd.io

安装 PostgreSQL

Shynet 目前只支持 PostgreSQL 数据库,因此你需要提前安装并准备好用户和数据库。

apt install postgresql

如果你需要额外的扩展模块,可以使用:

apt install postgresql postgresql-contrib

安装 PostgreSQL 后,会自动添加一个名为 postgres 的系统用户,密码是随机的,并且会自动生成用户名为 postgres 的数据库管理员用户,同时还有一个名字为 postgres 的数据库。

接下来就连接 PSQL 数据库:

su - postgres -c psql

如果你不是使用 root 用户,而是具有 root 权限的用户使用下面的命令:

sudo -u postgres psql

修改 postgres 数据库管理员密码(可选):

ALTER USER postgres WITH PASSWORD 'password';

为 Shynet 新建数据库和用户:

CREATE USER shynet WITH PASSWORD 'password';
CREATE DATABASE shynetdb OWNER shynet;
GRANT ALL PRIVILEGES ON DATABASE shynetdb to shynet;

最后使用 \q 命令退出数据库。

当然,如果你为了后期管理方便,可以使用 useradd shynet 在系统中也新建一个 shynet 用户,密码和数据库的密码一样。这时连接管理数据库就相当于系统用户以同名数据库用户的身份,登录数据库,就可以免去输入密码。

PSQL 一些常用的控制台命令:

\h:查看SQL命令的解释,比如\h select
\?:查看psql命令列表
\l:列出所有数据库
\c [database_name]:连接其他数据库
\d:列出当前数据库的所有表格
\d [table_name]:列出某一张表格的结构
\du:列出所有用户
\e:打开文本编辑器
\conninfo:列出当前数据库和连接的信息

安装 Shynet

准备配置文件

在合适的目录下新建一个 .env 文件,然后参考官方的模板输入你的环境配置信息。下面是一些需要修改的配置,完整的配置项请参考上面的模板:

# PostgreSQL 数据库连接信息
DB_NAME=shynetdb
DB_USER=shynet
DB_PASSWORD=password
DB_HOST=127.0.0.1
DB_PORT=5432

# 如果不需要邮件功能的话可以直接注释掉
# EMAIL_HOST_USER=example
# EMAIL_HOST_PASSWORD=example_password
# EMAIL_HOST=smtp.example.com
# EMAIL_PORT=465
# EMAIL_USE_SSL=True

# 默认为 *,建议修改为你准备部署的域名
ALLOWED_HOSTS=*

# 时区设置,可以修改为 Asia/Shanghai
TIME_ZONE=Asia/Shanghai

安装配置

拉取最新的 Shynet 镜像:

docker pull milesmcc/shynet:latest

初始化连接,如果出现一些警告信息不必理会,在后面会进行配置,只需要确保能连接到数据库就行了:

docker run --env-file=<your env file> milesmcc/shynet:latest

按照上面的官方命令可能会出现以下报错信息:

Is the server running on host "127.0.0.1" and accepting
        TCP/IP connections on port 5432?

这是前面环境配置文件中设置的 localhost/127.0.0.1 指的是容器的本地网络,并不是系统自己,因此启动容器的时候需要加入 --network='host' 选项:

docker run --env-file=<your env file> --network='host' milesmcc/shynet:latest

如果能成功连接到数据库运行,进行下一步操作,新建一个面板管理员用户:

docker run --env-file=<your env file> --network='host' milesmcc/shynet:latest ./manage.py registeradmin <your email>

运行后会在屏幕打印一个临时的密码,记下这个密码,等会登录会用到。接下来设置 whitelabel,whitelabel 不会影响到任何系统设置,只是控制面板的标题,你可以设置成任何你喜欢的名字(例如 "My Shynet Instance" 或者 "Acme Analytics",记得加上引号)。

docker run --env-file=<your env file> --network='host' milesmcc/shynet:latest ./manage.py whitelabel <whitelabel>

官方的文档中还漏了了一个关键的步骤,设置 hostname,这会影响到你后面的 js 脚本地址,设置成你要部署的域名,不然会面会使用默认的 example.com

docker run --env-file=<your env file> --network='host' milesmcc/shynet:latest ./manage.py hostname <your domain>

当然,以上的操作你都可以直接进入容器内部使用 manage.py 依次进行设置,不需要每次都启动一个新的容器。

所有配置完成后,最后启动容器,如果你没有修改前面配置文件的端口,容器内部默认会以 8080 端口运行,你可以映射到你需要的端口,例如 80

docker run -d -p 8080:8080 --env-file=<your env file> --network='host' --name=shynet --restart=always milesmcc/shynet:latest

我这里依然使用的 8080 端口,用 Nginx 进行反代,一个简单的 Nginx 反代示例:

server {
  server_name yourdomain.com;

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

到此,已经成功完成 Shynet 的安装配置,接下来可以登录你的网站进行面板设置了。

简单使用

添加网站

打开你的网站,输入你前面设置的管理员邮箱和记下的密码登录:

shynet-web-analytics-login

点击左侧的 + Create 添加你的第一个网站:

shynet-web-analytics-add-website

你还可以点击 Advanced settings 进一步设置一些高级选项。

设置代码

输入相关信息后创建后会跳转到该网站的统计页面,复制顶部的 script 代码到你准备统计网站的 <body> 标签里面任意位置:

shynet-web-analytics-script

现在你就可以在控制面板看到你网站的相关统计信息啦。

Tags: Shynet, PostgreSQL, Web Analytics

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.