📊 web-counter — 自托管网站访问计数器
"轻量、隐私优先、零配置的网站计数器。"
概述
web-counter 是一个自托管的网站访问计数器,专为静态站点(GitHub Pages、VitePress、Rspress 等)设计。通过一行 <script> 标签嵌入,即可为任意页面添加 PV/UV 统计,无需第三方统计服务。
后端基于 FastAPI + SQLite,前端是一个纯 JavaScript 文件。所有数据存储在自己的服务器上,不追踪用户、不存储 IP、不使用 Cookie,隐私优先。
GitHub: https://github.com/mikigo/web-counter
PyPI: https://pypi.org/project/web-counter/
在线示例: https://mikigo.site
解决的痛点
- 静态站点无法统计访问量,第三方服务(Google Analytics 等)在国内访问不稳定
- 统计服务收集用户隐私数据,面临合规风险
- 接入复杂,需要注册账号、配置 SDK
- 想在自己的服务器上掌控数据,但不想搭建复杂的统计系统
核心特性
快速开始
安装
启动服务
启动后可访问:
http://localhost:8000/counter.js— 前端脚本http://localhost:8000/dashboard— 管理面板http://localhost:8000/api/health— 健康检查
嵌入网站
在 HTML 的 <head> 或 <body> 末尾添加:
显示计数器
在页面中放置带有 data-pv-* 属性的元素,脚本会自动填充数值:
排行榜组件
创建管理员
架构概览
数据流程
- 用户访问页面 →
counter.js发送POST /api/visit到服务端 - 服务端对访问者 IP + salt 做 SHA256 生成匿名 ID,写入 SQLite
counter.js发送GET /api/count获取统计数值- 脚本查找页面中的
data-pv-*元素,自动填充数值 - 对于 SPA 应用,MutationObserver 监听到 DOM 变化或 URL 变化时自动重新统计
REST API
配置
通过环境变量或 .env 文件配置:
CLI 命令
项目结构
技术栈
部署
支持多种部署方式:
配合反向代理(Caddy / Nginx)即可实现同域名部署,避免跨域问题。详见 DEPLOY.md。
开发状态
版本:0.4.2
活跃开发中,功能持续迭代。
License
MIT
声明:本站所有文章,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。-- mikigo