前言

对于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后在你的站点目录通过访问PHPURL就会生成你填写的数量

生成前

1716715594271.webp

1716715525373.webp

生成后

1716715919420.webp

1716715942636.webp

写在最后

PV可以直接修改数值,页面的UV可以采用以上方法举一反三

曲线救国的方法或许有点笨拙好在实现了需求

自用的话建议把跨域访问打开,可以少一些无用数据

以上是昨下午折腾的结果,昨晚上也帮朋友清羽飞扬进行了”数据恢复”,众测有效,有更好的办法欢迎各位大佬讨论