这个项目能做什么
Theia – 隐私优先的服务器端分析
概述
Theia 提供网站流量统计,无需任何客户端 JavaScript。它实时监控 nginx 访问日志,解析每行以提取路径、来源、用户代理、IP、状态码和发送的字节数,对 IP 进行哈希以保护隐私,并将结果存储在本地 SQLite 数据库中。由于所有处理都在服务器端进行,数据免受广告拦截器的影响,也不依赖第三方服务。
安装
快速安装:使用 curl 或 wget 下载安装脚本,然后用 sudo bash 运行。脚本会检测架构,将二进制文件安装到 /usr/local/bin/theia,添加自定义的 nginx 日志格式以实现多域跟踪(可选),创建 systemd 服务并准备 /var/lib/theia 用于数据存储。也支持手动安装——克隆仓库,使用 go build 编译,复制二进制文件,创建数据目录并安装提供的 systemd 单元。
运行守护进程
守护进程会跟踪 nginx 访问日志并将解析后的记录写入 SQLite 数据库。
示例命令:
sudo theia daemon --log-path /var/log/nginx/access.log --db-path /var/lib/theia/theia.db
关键标志:--log-path(默认 /var/log/nginx/access.log)和 --db-path(默认 ./theia.db)。
命令行统计
stats 子命令读取数据库并打印摘要表或 JSON 输出。
典型用法:
theia stats --db-path /var/lib/theia/theia.db
选项允许更改回溯时期(--days),按主机过滤(--host),选择输出格式(--format json|table)以及调整顶部条目数量(--top)。
HTTP API 服务
serve 命令在 127.0.0.1:8081 启动 bearer‑token 保护的 HTTP/JSON(或 CSV)API。可以通过 nginx 代理以对外暴露。身份验证可以通过令牌文件、环境变量或命令行标志提供。端点包括:
GET /api/v1/stats – 时间序列数据
GET /api/v1/stats/paths – 热门路径
GET /api/v1/stats/referrers – 热门来源
GET /api/v1/stats/status-codes – 状态码分布
常见查询参数:host, from, to, format, group_by, top。
Shell 自动补全
运行 theia completion 会检测当前 shell 并提供安装 bash、zsh 或 fish 的补全脚本。
服务管理
Theia 作为 systemd 单元运行。使用标准的 systemctl 命令启动、停止、重启、查看状态和跟踪日志。
内部工作原理
1. 实时跟踪 nginx 日志文件。
2. 解析每行以提取相关字段。
3. 对 IP + 用户代理 + 日期进行哈希以保持匿名。
4. 自动检测机器人和静态资源请求。
5. 以异步方式将记录写入 SQLite(WAL 模式),允许并发读取。
6. 定期清理删除超过 60 天的小时统计。
安全注意事项
守护进程需要 root 或 sudo 权限才能读取 nginx 日志。API 令牌应存储在文件中而非命令行,以避免通过进程列表泄露。建议使用速率限制和 fail2ban 规则来应对噪声扫描器(参见 docs/nginx-hardening.md)。
局限性
* 仅收集页面浏览次数;不收集客户端事件。
* 在突然崩溃时可能出现数据丢失。
* 没有内置的 Web 仪表盘——用户可以通过 CLI 输出、HTTP API 或直接查询 SQLite 来消费数据。
许可证
Apache License 2.0。
评论
0 评分人数达到10人后显示
登录后参与讨论。