FullStory、Hotjar、LogRocket、Smartlook 的开源自托管替代品 —— 实时访客监控、共浏览(co-browsing)、会话回放。AGPL-3.0,数据从不出门。
与现有工具对比:
git clone https://github.com/iannil/pinconsole
cd pinconsole
cp .env.example .env
# 启动基础设施(PostgreSQL + Redis + MinIO)+ 构建 release 二进制
make docker-up && make build
# 运行服务器
./server/bin/pinconsole-server- 访客落地页: http://localhost:8080/
- 运营后台: http://localhost:8080/admin — 默认
admin@pinconsole.local(密码由ADMIN_PASSWORD环境变量设置)
生产部署:
docker compose --profile prod up -d --build完整 Make 命令清单(make help)、架构深度说明、运维手册:见 docs/project-status.md 和 Makefile。
| Dashboard — 实时访客监控 | Co-browsing — 运营协同 |
|---|---|
![]() |
![]() |
| 会话回放 | 即时聊天 + 弹窗 |
|---|---|
![]() |
![]() |
| 隐私与知情同意控制 |
|---|
![]() |
SaaS 访客互动工具把每个访客的行为、每次运营对话、每段录像都抽到自己的云里。你付费让他们把数据运到他们的基础设施——他们用它训练模型、锁定你、明年再涨价。
pinconsole 存在的理由是:这些数据本来就是你的。跑在你自己的基础设施上,代码你自己审计,想走就走——数据、Schema、二进制本来就在你手里。
作为以下工具的开源替代品:
| 工具 | 为什么迁移 |
|---|---|
| FullStory | 纯 SaaS,$599+/月,无共浏览 |
| Hotjar | 会话上限(免费版 35次/天),纯 SaaS,无实时监控 |
| LogRocket | 按会话计价,纯 SaaS,无共浏览 |
| Smartlook | 会话配额,纯 SaaS,无共浏览 |
- 产品团队 —— 需要会话回放,但不想按会话量付费或数据离境
- 客服团队 —— 需要共浏览能力,不想订阅第三方 SaaS
- 合规敏感的组织(等保、个保法、GDPR)—— 需要数据境内存储或本地部署
- 开发者团队 —— 寻找开源、可审计的会话回放工具替代品
- 中国本土团队 —— 需要流畅的共浏览和会话回放,不受跨国网络延迟影响
- 实时访客监控 —— rrweb 全量采集(DOM 变更 / 鼠标 / 滚动 / 输入)
- co-browsing 双向协同 —— cursor / click / scroll / 表单代填 / 跳转;用 rrweb 节点 ID,不用易碎的 CSS/XPath 选择器
- 录像回放 —— MinIO 归档 + rrweb-player;选择性截图(仅 canvas / WebGL / 跨域 iframe,1fps WebP q70),体积可控
- 弹窗推送 + 双向聊天 —— 运营主动弹窗 + 即时聊天
- 多运营 claim 锁 —— 1:1 访客-运营锁定(Redis
SET NX+ Lua release) - 反爬虫栈 —— rate limit + UA 黑名单 + 行为分析 + fingerprint(纵深防御)
- GDPR 合规 —— consent opt-in + 被遗忘权 + IP 截断 + co-browse 知情横幅
- 中英双语 i18n —— 从第一天起,无硬编码文案
- 无限会话录制 —— 无会话上限,无按会话付费。唯一成本是你的基础设施。
flowchart LR
SDK["访客 SDK<br/>(~15KB gzip)"] -->|rrweb 事件 / ws| Server["Go 服务器<br/>Gin + WebSocket"]
Admin["管理后台<br/>(Vue 3 SPA)"] <-->|ws + REST| Server
Server --> PG[("PostgreSQL<br/>元数据")]
Server --> Redis[("Redis<br/>在线状态 / 锁")]
Server --> MinIO[("MinIO<br/>事件存储")]
style SDK fill:#0F766E,color:#fff
style Admin fill:#0F766E,color:#fff
style Server fill:#1E293B,color:#fff
style PG fill:#B45309,color:#fff
style Redis fill:#B45309,color:#fff
style MinIO fill:#B45309,color:#fff
Hub-and-spoke —— 所有流量经中心服务器。单二进制(Go embed),无外部 CDN,无第三方加载器。
技术栈:Go 1.22 · Vue 3 · PostgreSQL 16 · Redis 7 · MinIO · rrweb · coder/websocket
| 原则 | 为什么 |
|---|---|
| 数据主权 | 所有访客行为、运营对话、录像存在你自己的 PostgreSQL / Redis / MinIO。无第三方调用、无外部依赖。 |
| AGPL-3.0 强 copyleft | 任何修改必须开源,云厂商无法拿去做 SaaS —— license 层的硬保护。 |
| 标准栈,无锁定 | Go 1.22 + Vue 3 + PostgreSQL 16 + Redis 7 + MinIO。每一层都是行业标准,Schema 在你手里。 |
| SDK 仅 ~15KB gzip | 轻量访客 SDK,从你自己的域名提供服务,无需 CDN,无需第三方加载器。 |
-
单实例 hub(不支持横向扩展) —— WebSocket 路由基于进程内
map(server/internal/hub/hub.go)。多实例部署(2+ server behind LB)会静默失败——访客和运营连到不同实例后互不可见。横向扩展需引入 Redis Pub/Sub 或 NATS 作为消息总线。 -
500 WS/房间并发未压测 —— PLAN.md 把"500 WS/房间"作为设计目标驱动决策,但 v1 未做实际压测。默认
PG_MAX_CONNS=25/REDIS_POOL_SIZE=50是经验值,实际容量需部署方验证。 -
OSS 项目不提供生产拓扑 —— docker-compose
prodprofile 仅作参考。生产拓扑(VM / k8s / 反代 / TLS / 备份 / 监控 / 日志聚合 / 资源限制)由部署方自行决定。本仓库保证:可重复的 dev/CI 路径、fail-secure release 二进制、/healthz+/readyz健康检查。 -
Trace_id 端到端传播已补全 —— operator browser → server → SDK → server → operator 形成 trace_id 闭环。
v1 已交付。Post-v1 按优先级(完整 backlog 见 PLAN.md §8):
- ✅ 自定义域名 —— DNS 验证 + Let's Encrypt ACME + Host-header 路由
- ✅ 低代码页面编辑器 —— 拖拽 / JSON schema → Go 模板渲染
- Tauri 桌面端 —— Win + Mac,复用 admin SPA
- SSO / SAML / OIDC —— 企业认证
欢迎贡献!以下是如何开始:
- 阅读
docs/project-status.md—— 项目的状态和架构唯一事实来源。 - 查看开放的 Issues —— 标签为
good first issue的是好的起点。 - 开始重要工作前先开一个 Discussion —— 先对齐再动手。
- 遵循
CLAUDE.md中的提交约定 —— 清晰、小巧、单一目的的提交。
所有贡献默认以 AGPL-3.0 许可授权。 详见 CONTRIBUTING.md(即将推出)。
AGPL-3.0 —— 详见 LICENSE。
技术栈:Go 1.22 · Vue 3 · PostgreSQL · Redis · MinIO · rrweb。




