不蒜子统计私有化部署
前言
对于Busuanzi大家应该都不陌生,作为Butterfly主题默认的访客人数统计功能,因为是公益免费服务很多静态网站都有在使用,正因前者Busuanzi从而成为了导致很多拖慢博客速度的原因,去年看到洪哥博客就有提到如何自己搭建busuanzi不蒜子平台,因为我个人的感受是不太明显的,放在收藏夹就一直没折腾,前几天又在朋友的博客看到了自部署busuanzi访问量统计服务,当时在我站点上还是觉得没感觉到有拖慢的情况,在昨天下午没事,没忍住还是捣鼓了一下,私有化部署并曲线救国实现了恢复以前的数据。
编排文件
看各位大佬私有化部署都是用的星辰大佬的soxft/busuanzi:一个简单的网站统计分析器,于是我也采用了该项目。
搭建方法我就不过多赘述,网上方法千篇一律,我采用的Docker容器编排部署
官方配置
version: "3"
services:
redis:
image: "redis:alpine"
volumes:
- ./data/redis:/data
bsz:
image: "xcsoft/busuanzi:latest"
ports:
- "8080:8080"
volumes:
- ./data/bsz:/app/expose
links:
- redis
depends_on:
- redis
environment:
LOG_ENABLE: true
API_SERVER: http:\/\/127.0.0.1:8080\/api
贴上我的容器配置
version: "3"
services:
redis:
image: "redis:alpine"
ports:
- "6380:6379"
volumes:
- ./data/redis:/data
bsz:
image: "xcsoft/busuanzi:latest"
ports:
- "6381:8080"
volumes:
- ./data/bsz:/app/expose
links:
- redis
depends_on:
- redis
environment:
LOG_ENABLE: true
API_SERVER: http:\/\/127.0.0.1:8080\/api
修改编排文件
大多数人的
8080端口都被占用了可以改为其他端口,例如:6381:8080,需要注意的是后者的8080为容器应用端口不可任意修改。把最后的
API_SERVER修改为你的网址,例如你的网址为busuanzi.lxink.cn,此处的填写就该为https://busuanzi.lxink.cn/api注意协议SSL问题
相比于官方配置,我把redis的容器端口也映射到了本地,方便曲线救国恢复以前不蒜子的数据。
在配置好编排文件后在编排文件目录启动终端运行docker-compose pull && docker-compose up -d 就能跑起来了,最后在进行反向代理即可。
调用方法
<script async src="https://你的不蒜子API网址/js"></script>
本文总阅读量 <span id="busuanzi_page_pv"></span> 次
本文总访客量 <span id="busuanzi_page_uv"></span> 人
本站总访问量 <span id="busuanzi_site_pv"></span> 次
本站总访客数 <span id="busuanzi_site_uv"></span> 人
butterfly
butterfly需要注意的是:私有化部署的ID名为:busuanzi_page_pv,主题默认的为:busuanzi_page_value_pv
如果你想全站采用不蒜子统计请修改以下两处
首页全站统计
打开themes\butterfly\layout\includes\widget\card_webinfo.pug文件把_value删除

1716716957776.webp
内页文章统计
打开themes\butterfly\layout\includes\header\post-info.pug文件把busuanzi_page_value_pv修改为busuanzi_page_pv

1716716613158.webp
最后在配置文件中自定义CDN引入你的JS文件

1716718424507.webp
旧数据恢复
环境
PHP任意版本安装redis扩展
软件
Tiny RDM 现代 Redis GUI 客户端
因为该项目并没有同步官方不蒜子的接口及方法,所以就导致了很多迁移私有化部署的丢弃了以前的数据,该项目的数据是通过redis数据库储存,挂载redis目录下的dump.rdb文件是没法直接打开的,就想到了通过数据库管理软件连接redis,开始看了下Navicat没有提供能够连接redis数据库的方法,好在想到了前面逛杜老师博客 的时候杜老师有推荐过连接数据库的软件,我采用了Tiny RDM小巧,轻便。
连接到Busuanzi
这一部就需要用到前面映射到本地的端口,例如上方配置文件中的端口为:6380:6379,即6380就是你的外网连接端口

1716713500907.webp
密码默认为空,考虑安全问题,请在恢复数据后取消映射到外网
连不上的情况下检查是否开放服务器安全组的端口
连接上的页面

1716713688548.webp
因为数据都是经过MD5加密刚连上可能有点懵下面是开发者给出的解答

1716714118949.webp
好在我的数据并不多,不蒜子的统计目前只全站统计,文章浏览依旧是用的Twikoo的页面统计,最近打算都采用Busuanzi的打算。
昨天看了下结构想到了生成数据的方法,通过批量生成MD5来增加全站UV达到恢复以前数据的方法。
生成数据
写了个PHP来实现
<?php
// 连接到 Redis 服务器
$redis = new Redis();
$redis->connect('localhost', 6380); // 端口为你上方映射到本地的端口
// 生成 100 条随机MD5 值
for ($i = 0; $i < 100; $i++) {
$md5 = md5(uniqid());
$redis->sadd('bsz:site_uv:3388888ca5e59d9fde1906da48ccae5b', $md5); // 此处替换为下图中你获取到的键名
}
?>

1716715088025.webp
需要注意的是sadd不是适用于ZSET类型
保存PHP后在你的站点目录通过访问PHP的URL就会生成你填写的数量
生成前

1716715594271.webp

1716715525373.webp
生成后

1716715919420.webp

1716715942636.webp
写在最后
PV可以直接修改数值,页面的UV可以采用以上方法举一反三
曲线救国的方法或许有点笨拙好在实现了需求
自用的话建议把跨域访问打开,可以少一些无用数据
以上是昨下午折腾的结果,昨晚上也帮朋友清羽飞扬进行了"数据恢复",众测有效,有更好的办法欢迎各位大佬讨论