一、 Docker 服务部署(1Panel)

在 1Panel 中创建应用或使用 Docker Compose 编排,核心配置如下:

services:
  busuanzi:
    image: "xcsoft/busuanzi:latest"
    container_name: busuanzi
    ports:
      - "127.0.0.1:8080:8080"       # 仅监听本地,通过反代暴露
    networks:
      - 1panel-network
    environment:
      WEB_LOG: true
      WEB_DEBUG: false
      WEB_CORS: |                    # ⚠️ 必须包含主站+子域名,注意末尾逗号
        http://qiyec.site,
        https://qiyec.site,
        http://busuanzi.qiyec.site,
        https://busuanzi.qiyec.site
      BSZ_EXPIRE: 0                  # 0=永不过期
      BSZ_SECRET: "xxxx"             # 自定义随机密钥
      API_SERVER: https://busuanzi.qiyec.site  # ✅ 填写反代子域名
      REDIS_ADDRESS: redis:6379      # 同网络下直接使用容器名
      REDIS_PASSWORD: xxxx
      REDIS_DATABASE: 10             # 建议避开默认0库
      REDIS_TLS: false
      BSZ_PATHSTYLE: true
      BSZ_ENCRYPT: MD516
    restart: no
networks:
  1panel-network:
    external: true

关键点API_SERVER 必须与实际反向代理绑定的子域名一致;WEB_CORS 需同时放行主站(前端调用方)和子域名(调试用)。

二、 1Panel 反向代理配置

配置项

说明

域名

busuanzi.qiyec.site

独立子域名

目标地址

http://127.0.0.1:8080

对应容器端口映射

SSL

开启 HTTPS

API_SERVER 协议保持一致

WebSocket

关闭

纯 HTTP API 无需开启

三、 Halo 博客接入配置

根据你的主题类型选择以下任一方式:
方式 A:Dream2.0 Plus 主题(推荐,v1.8.8+)

进入「主题设置 → 增强功能 → busuanzi 访客统计」:

  • 统计服务选择:自建服务

  • 不蒜子 JS 地址填写:https://busuanzi.qiyec.site/js

方式 B:通用 HTML 手动注入

在主题的页脚或 <head> 区域添加:

<!-- 引入脚本 -->
<script defer pjax data-prefix="busuanzi_value" src="https://busuanzi.qiyec.site/js"></script>

<!-- 展示数据 -->
本站总访问量 <span id="busuanzi_value_site_pv"></span> 次
本站总访客数 <span id="busuanzi_value_site_uv"></span> 人

四、 验证清单

  • 浏览器 F12 Network 面板确认 https://{反代域名}/api 请求返回 200

  • Console 无 CORS 跨域报错

  • Redis 容器与 busuanzi 处于同一 1panel-network 网络

  • 修改配置后重启docker容器

五、参考文档

https://www.hcjike.com/archives/OVRMysNg