Skip to content

Latest commit

 

History

History
191 lines (128 loc) · 9.12 KB

File metadata and controls

191 lines (128 loc) · 9.12 KB

· pinconsole

你的访客,你的数据。 · English · 官网 · 博客

FullStory、Hotjar、LogRocket、Smartlook 的开源自托管替代品 —— 实时访客监控、共浏览(co-browsing)、会话回放。AGPL-3.0,数据从不出门。

License: AGPL-3.0 Go CI Version i18n: zh/en v1: shipped

与现有工具对比:

vs FullStory vs Hotjar vs LogRocket vs Smartlook


快速上手

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

生产部署:

docker compose --profile prod up -d --build

完整 Make 命令清单(make help)、架构深度说明、运维手册:见 docs/project-status.mdMakefile


看一眼

Dashboard — 实时访客监控 Co-browsing — 运营协同
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
Loading

Hub-and-spoke —— 所有流量经中心服务器。单二进制(Go embed),无外部 CDN,无第三方加载器。

技术栈:Go 1.22 · Vue 3 · PostgreSQL 16 · Redis 7 · MinIO · rrweb · coder/websocket

详见博客:如何构建一个自托管的 FullStory 替代品


关键设计决策

原则 为什么
数据主权 所有访客行为、运营对话、录像存在你自己的 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,无需第三方加载器。

已知限制(部署前必读)

  1. 单实例 hub(不支持横向扩展) —— WebSocket 路由基于进程内 mapserver/internal/hub/hub.go)。多实例部署(2+ server behind LB)会静默失败——访客和运营连到不同实例后互不可见。横向扩展需引入 Redis Pub/Sub 或 NATS 作为消息总线。

  2. 500 WS/房间并发未压测 —— PLAN.md 把"500 WS/房间"作为设计目标驱动决策,但 v1 未做实际压测。默认 PG_MAX_CONNS=25 / REDIS_POOL_SIZE=50 是经验值,实际容量需部署方验证。

  3. OSS 项目不提供生产拓扑 —— docker-compose prod profile 仅作参考。生产拓扑(VM / k8s / 反代 / TLS / 备份 / 监控 / 日志聚合 / 资源限制)由部署方自行决定。本仓库保证:可重复的 dev/CI 路径、fail-secure release 二进制、/healthz + /readyz 健康检查。

  4. Trace_id 端到端传播已补全 —— operator browser → server → SDK → server → operator 形成 trace_id 闭环。


路线图

v1 已交付。Post-v1 按优先级(完整 backlog 见 PLAN.md §8):

  1. 自定义域名 —— DNS 验证 + Let's Encrypt ACME + Host-header 路由
  2. 低代码页面编辑器 —— 拖拽 / JSON schema → Go 模板渲染
  3. Tauri 桌面端 —— Win + Mac,复用 admin SPA
  4. SSO / SAML / OIDC —— 企业认证

博客


贡献

欢迎贡献!以下是如何开始:

  1. 阅读 docs/project-status.md —— 项目的状态和架构唯一事实来源。
  2. 查看开放的 Issues —— 标签为 good first issue 的是好的起点。
  3. 开始重要工作前先开一个 Discussion —— 先对齐再动手。
  4. 遵循 CLAUDE.md 中的提交约定 —— 清晰、小巧、单一目的的提交。

所有贡献默认以 AGPL-3.0 许可授权。 详见 CONTRIBUTING.md(即将推出)。


License

AGPL-3.0 —— 详见 LICENSE

技术栈:Go 1.22 · Vue 3 · PostgreSQL · Redis · MinIO · rrweb。