Shynet:极为轻量化的访客监控系统
碎碎念
我一直在找合适的访客统计系统,我曾推荐Umami,Umami的页面确实很美观简洁,我也非常喜欢他的风格,但是部署Umami需要部署两个容器,一个是PostgreSQL,一个是Umami本体,这两个占用都超过了200MB,我的服务器只有2GB,除去系统占用和已经部署的服务,剩下只有700MB了,为了服务器的稳定,我只能忍痛将其关闭,并使用揽星在评论区提到的统计系统:51La和统计鸟,但是这两个卧龙凤雏每天都加载不出来,严重影响访客统计数据,实在没办法,只能自行部署,于是我又开始在网上寻找更加轻量化的访客统计系统,最终找到了Shynet,总占用不到150MB,不过他也有些缺点,比如无法汉化,功能较少,但是这么小的占用,要什么自行车呢?最终决定使用这个并暂时维持,不过我还在寻找更好的替代品,如果有更合适的我将毫不犹豫地替换掉它。
功能概要
介绍
Shynet 是一个网络分析工具,与大多数其他工具不同的是,它不需要将访问者信息交给第三方公司。Shynet 的设计目标是既提供有用的信息,又尊重访问者的隐私。
特点
- 隐私保护: Shynet完全自托管,不需向第三方公司提供访问者信息,由于其不使用 cookies 跟踪的特性,也避免了烦人的 cookie 提示。
- 轻量级: 追踪脚本小巧,即使 JavaScript 不可用也能通过非脚本计算方式正常工作。
- 开源自由: 使用 Django 构建,支持自定义,拓展度高(不过俺还不会呜呜呜)。
- 多用户多站点支持: 一个 Shynet 实例可以支持多个用户,每个用户可以追踪多个不同的站点。
- 灵活部署: 可以在单个小型 VPS 上以 Docker 容器方式运行,也可在大型 Kubernetes 集群上部署以应对更高的流量。
追踪指标
- 页面访问量: 统计网站页面的打开/浏览次数。
- 访问会话数: 统计网站被访问的次数。
- 页面加载时间: 记录页面加载所需的时间。
- 跳出率: 表示只访问了一个页面就离开的访问者的比例。
- 停留时长: 记录访问者在网站停留的时长。
- 来源: 统计访问者从哪些链接跳转而来。
- 地理位置与网络: 根据 IP 地址推测访问者的地理位置与网络信息。
- 操作系统与浏览器: 统计访问者使用的操作系统和浏览器信息。
- 设备类型: 区分访问者使用的设备类型,如台式机、平板或手机。
使用与部署
- 提供详细的使用指南,支持 Docker、docker-compose、Heroku 或 Kubernetes 部署。
- 支持灵活的账户管理,可以方便地分享服务和协作。
限制与建议
- 适用于个人项目和中小型网站,对于超高流量的网站未经过充分测试。
- 需要一定的技术知识来部署和维护,不适合需要一键式解决方案的用户。
以上就是在github官方介绍中对于shynet的简要概括,我使用中文阐述了一遍,具体内容可以查看官方英文文档:
安装教程
本次教程主要介绍第二种:docker-compose安装,因为docker方案需要设置--network='host'
,修改端口号可能不太方便(其实是我不会QwQ),而我的默认8080是被占用的状态,所以我选择docker-compose安装,这里也会着重讲解该方法,但是由于原文档是英文,所以我也会顺带着尽量详细的使用中文介绍一下第一种docker的安装方案,供大家参考。
配置模板文件
模板文件如下:
1 |
|
以上是所有可选项的模板内容,这也忒长了!不过我们可以简化呀,我们只需要关键配置即可,其余的按照默认即可使用:
1 |
|
如上所示,我们最需要的内容就是数据库,CSRF验证域名,时区设置,其他的都可以注释的,其中数据库我们稍后会讲到,CSRF验证域名一定要设置!否则会出现部署后无法使用的尴尬局面,如下:
安装PostgreSQL
打开终端,输入
apt install postgresql
,下载postgreSQL数据库。如果一切顺利的话,下面就可以进行连接数据库了,输入
su - postgres -c psql
.连接成功后先修改密码,输入
ALTER USER postgres WITH PASSWORD 'your-password';
,这样密码就修改成功了。下面创建数据库和用户,输入以下内容:
1
2
3CREATE USER shynet WITH PASSWORD 'your-password';
CREATE DATABASE shynetdb OWNER shynet;
GRANT ALL PRIVILEGES ON DATABASE shynetdb to shynet;
这样我们的数据库就创建好了,下面我们开始安装程序。
使用 Docker 安装
拉取最新版本的 Shynet:首先 运行
docker pull milesmcc/shynet:latest
命令拉取最新的镜像,如果没有安装 Docker,请先安装 Docker。选择数据库:
Shynet数据库支持两种数据库,为了稳定我选择了PostgreSQL数据库,我也建议大家使用PostgreSQL数据库。
如果使用 PostgreSQL,需要准备一个 PostgreSQL 服务器,并设置好相关环境变量,比如用户名、密码、主机和端口等,当然端口默认都是5432。
如果准备使用 SQLite,需创建一个 Docker volume 用于持久化数据库,并在运行容器时将该 volume 挂载到容器内(没看懂部分,这里附上原文)。
配置环境文件: 使用提供的模板文件
.env
,设置数据库信息等必要配置。首次启动 Shynet 服务器: 运行
docker run --env-file=<你的环境文件> milesmcc/shynet:latest
命令。如果一切正常,你会看到关于未设置管理员用户或主机的几条警告,这是正常现象。创建管理员用户: 运行
docker run --env-file=<你的环境文件> milesmcc/shynet:latest ./manage.py registeradmin <你的邮箱>
命令,临时密码将会打印到控制台上。设置 Shynet 实例的标识: 运行
docker run --env-file=<你的环境文件> milesmcc/shynet:latest ./manage.py whitelabel <标识>
命令,这个标识可以随意设置,用于重命名 Shynet 实例。启动 Web 服务器: 运行
docker run --env-file=<你的环境文件> milesmcc/shynet:latest
命令。可能需要将 Docker 的端口 8080(Shynet 运行的端口)绑定到本地的端口 80(http),使用-p 80:8080
参数。访问服务主页,使用步骤 5 中的凭据登录。创建服务: 点击右上角的“+ 创建服务”,填写相关信息并点击“创建”,即可跳转到新服务的分析页面。
获取跟踪脚本代码: 在服务页面的右上角点击“管理”,即可获取跟踪脚本代码。将此代码插入到需要跟踪的页面上。
使用 Docker Compose 安装
- 确保安装了 docker-compose: 如果没有安装,请先安装 docker-compose。
- 克隆仓库: 克隆 Shynet 仓库到本地。
- 配置环境文件: 使用模板文件
.env
,如上正常设置即可。 - 修改 nginx 配置: 在仓库根目录下的
nginx.conf
文件中,将example.com
替换为你的主机名。然后在docker-compose.yml
文件中的第38行,将端口号修改为你希望绑定的本地端口号。 - 首次启动 Shynet 服务器: 运行
docker-compose up -d
命令。如果出现 “permission denied” 或 “Couldn’t connect to Docker daemon” 错误,可以使用 sudo 前缀或将用户添加到 docker 组,不过一般不会出现,正常安装即可。 - 这样我们的主程序就创建成功了,下面进行登陆操作。
- 创建管理员用户: 运行
docker exec -it shynet_main ./manage.py registeradmin <你的邮箱>
命令,临时密码将会打印到控制台上,注意复制。
- 下面是可选项,不进行也可以正常使用:
- 设置 Shynet 实例的标识: 运行
docker exec -it shynet_main ./manage.py whitelabel <标识>
命令,此标识用于重命名 Shynet 实例。
基本体验
功能方面
语言支持:虽然官方介绍支持设置语言,但是经过实测,如果设置为汉语会出现很难受的部分汉化,如下:
其中的左边注销汉化了,上方的月份汉化了,除此之外都没有汉化成功,如果你点开某个设置后会更加不堪入目,所以强烈不建议汉化,如果非要尝试,可以设置语言为
zh-hans
。总体来说,我不是很喜欢,但是奈何他轻量化,我又能要什么自行车呢?更何况页面也不算太难看,只是一些逻辑方面显得比较简陋,首先就是他的仪表盘:
可以展示多个站点的数据,看起来也很简洁,但是左边菜单栏看起来就很简陋了,可以看到,账户是分类,却和下面的按钮混在一起。
点开一个页面之后,该有的数据都有了,如访客统计:
访客地图,访客来源:
除此之外,refer统计,操作系统,设备等功能也是很齐全的,。足够我日常进行统计了,这里就不一一展示了。
优点
作为一个轻量化的系统,他的优点自然就是极为轻量化了,它的统计代码如下:
1 |
|
可以看到它支持两种统计方式,有脚本和无脚本,其中脚本大小为1.8KB,无脚本统计甚至只需要43字节
并且由于其无需cookie的特性,它不会被各种拦截器所拦截,这也解决了统计鸟和51la的痛点,并且其内存占用也非常之小,强烈建议想要自行部署访客统计系统且内存不够的用户:
缺点
首先这个大小放在这里,就可以让我忽略几乎所有的缺点,但是仍然有一点,那就是该系统的时间粒度默认为一个月,需要手动调整才能显示为最近七天或者当天数据:
并且无法修改默认显示时间粒度,除此之外,我可以包容它的一切缺点,不过我仍然在寻找更好的替代品,如果在我服务器的承受范围内,我将毫不犹豫替换掉他,因为我是一个外观主义者。
总结
在我寻找合适的访客统计系统的过程中,我经历了很多的尝试。从推荐的Umami到后来的51La和统计鸟,再到本次选择的Shynet,每一步都是为了找到一个符合服务器要求、易于部署、功能齐全的解决方案,Shynet作为一个自托管的网络分析工具,不仅保护了访客的隐私,而且在轻量化和功能性方面表现出色。尽管在汉化和用户界面设计方面有些不足,但其在技术层面的优势使其成为了一个可行的选择。如果你也在寻求一个及其轻量化的访客统计系统,不妨可以试试,相信不会让你失望!
本次教程到此结束,如果有什么问题欢迎在评论区留言!
参考教程
每日一图
— 柳影曳曳,清酒孤灯,扬笔撒墨,心境如霜