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

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 的安装配置,接下来可以登录你的网站进行面板设置了。
简单使用
添加网站
打开你的网站,输入你前面设置的管理员邮箱和记下的密码登录:

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

你还可以点击 Advanced settings 进一步设置一些高级选项。
设置代码
输入相关信息后创建后会跳转到该网站的统计页面,复制顶部的 script 代码到你准备统计网站的 <body>
标签里面任意位置:

现在你就可以在控制面板看到你网站的相关统计信息啦。
如果你认为这篇文章还不错,可以考虑支持作者。