Privacy Statnive Live · Parhum Khoshbakht

掌控您的分析数据:2026 年自托管 vs 欧盟私有 SaaS

自托管分析真正能帮到您的场景、欧盟私有 SaaS 才是正确答案的场景,以及 Statnive Live 如何用相同的隐私不变量同时提供两种形态。

自托管网站分析是 2026 年的重置,而非小众选择

在过去十年的大部分时间里,「自托管分析」是出于意识形态原因而采取的立场 — 一种针对 GA4 默认的 Plausible 或 Matomo 式旗帜。2026 年,情况已然不同:欧洲委员会《数据法案》(自 2025 年 9 月 12 日起适用)明确禁止 SaaS 供应商通过专有存储格式制造锁定,而且有公开可引用的 SaaS 出走 — 欧洲企业正将工作负载从美国控制的云平台迁回 — 用 MassiveGRID 的表述:「德国中型企业制造商、法国政府机构、荷兰医疗机构」。行业观察现在将数据主权描述为*「对监管压力、政治现实,以及对数据主权并非可选项这一认知日益增长的务实回应」*。

Statnive Live 以两种形态交付:一个您自己运行的自托管 Go 二进制,以及纽伦堡的一个欧盟私有 SaaS。这篇文章是每位关注隐私的运营者如今都必须回答的问题的诚实版本:*哪种形态真正适合我?*本文凡涉及监管或产品主张,均附有脚注来源 — 凡是真实存在的权衡,都会直接点名。

这是介绍 Statnive Live 的短系列文章的第 3 篇。第 1 篇梳理了 WordPress 插件 vs Statnive Live 的选择;第 2 篇覆盖了 2026 年欧盟监管格局。本篇关于部署形态 — 控制者 vs 处理者、爆炸半径,以及双方的威胁模型。

自托管真正能保护您免受什么

自托管将五种常见的 SaaS 分析威胁压缩到您已经拥有的一台服务器上:

  1. 供应商倒闭、转型或随意涨价。 SmartSaaSSharp Hue 将此定义为 SaaS 的典型风险;如果您的分析堆栈活在别人的服务器上,您的历史数据就活在别人的路线图上。
  2. 供应商被收购。 新东家可以改变隐私立场、提高价格或强制迁移平台。J. Chang Law 追踪了这些争议的合同层面。
  3. 供应商数据泄露暴露。 当访客数据存放在多租户 SaaS 中,供应商的每一次泄露都是数据的泄露(Kiteworks 的表述)。自托管将爆炸半径限制在您自己的服务器。
  4. 跨境传输风险。 托管在欧洲经济区之外会触发 GDPR 第 V 章(第 44–49 条)。最干净的答案是留在欧洲经济区内 — 监管方面的论证见本系列第 2 篇
  5. 监管机构强制披露。 美国《云法案》+ FISA 702 可触达任何美国注册提供商所控制的数据,无论数据实际存放在哪里。正如 Civo 所指出的「将数据存储在法兰克福或都柏林,并不意味着它超出了美国执法的触达范围。如果提供商是美国公司,美国当局可以强制要求访问该公司控制的任何数据,无论其存储在哪里。」 FISA 702 原计划在 2026 年 4 月到期,写本文时续期压力已经在进行中 — 续期后的范围将告诉您格局是否有变;架构上的答案与此无关。

在由非美国法律实体运营的运营商控制基础设施上运行的自托管二进制,将上述五种威胁压缩为运营商已经在管理的一个问题 — 他们自己的服务器。

自托管不能保护您免受什么

诚实的对照清单。自托管转移风险;它并不消除风险。有四件事依然是您的问题:

您自己服务器的被攻陷。 宿主操作系统、ClickHouse、Go 二进制、网络 — 这一切如今都坐落在您的爆炸半径内。如果您的系统管理姿态薄弱,自托管反而可能让事情变得更糟,而非更好。Slimstat / TeamUpdraft 的表述 将自托管带来的服务器负载视为同一权衡的另一种表述。

加密密钥丢失。 LUKS 加密磁盘和 age 加密备份在密钥存在时才有效。丢失密钥,数据就消失了 — 与 SSH 密钥或比特币钱包一样。我们在 docs/luks.md 中记录了 LUKS 恢复流程;其余的是您密码管理器的问题。

您自己团队的内部风险。 恶意或疏忽的管理员可以在散列前读取原始事件、删除表或导出审计日志。RBAC(管理员 / 查看者 / 仅 API)有助于隔离;残余风险归您所有。

操作员失误。 删除数据、错误配置备份、把仪表盘大门洞开。应对泄露的恢复演练同样能防御操作员失误 — 但前提是您真的演练过。

如果这四点依然比上面 SaaS 供应商的清单更让您放心,那就自托管。否则,欧盟私有 SaaS 路径能覆盖其中大部分,同时保留仅在欧盟处理数据的承诺。

单二进制架构

两种路径运行完全相同的 Go 二进制,针对完全相同的 ClickHouse schema。没有分叉,没有第二份代码库。所有资源 — tracker JS、仪表盘 SPA、ClickHouse 迁移脚本、已 vendor 的 Go 依赖 — 都通过 go:embed 嵌入。没有外部 CDN,没有运行时 npm install,没有运行时 go mod download

离网(air-gap)运行是不可妥协的项目目标,而非一个愿望。二进制被要求在 iptables -P OUTPUT DROP 下完全离网运行,零必要出站连接。发布门控在每次发布时运行离网测试:事件摄取、rollup 物化、仪表盘渲染,全部在 iptables 丢弃规则下。选择性功能(例如可选的 GeoIP 数据库更新)的出站流量通过 internal/httpclient/guarded.go 路由 — FQDN 允许列表,DNS 解析后拒绝 RFC-1918/回环/CGNAT,强制 HTTPS。默认允许列表为空。

在 CI 中,air-gap-validator 规则拒绝所有原始 *http.Client 构造、运行时 DNS/HTTP、仪表盘或 tracker 中的 CDN 导入、遥测 ping,以及外部字体/脚本 URL。这一约定通过代码审查 Semgrep 共同执行,而非靠一份检查清单。

纵深防御 — 具体主张

密码学和操作原语,附文件路径供您核实:

  • 访客身份: HMAC(master_secret, site_id || YYYY-MM-DD),BLAKE3 密钥,进程内派生,从不持久化,每日轮换。同一访客 → 每天不同的散列。在 ClickHouse 中存储为 FixedString(16)(BLAKE3-128 截断至 16 字节)。二进制中任何地方只使用 SHA-256 / BLAKE3 散列族;无 MD5,无 SHA-1
  • 仪表盘认证: bcrypt cost 12 密码散列,crypto/rand 32 字节会话令牌(256 位,十六进制编码),14 天 TTL,SameSite=Lax HttpOnly Secure Cookie。Bcrypt cost 12 在任何运行它的机器上需要约 50 ms 以上 — 这正是它的意义所在。
  • 审计日志: 通过 Go 的 slog 记录 JSONL,仅追加,v1 仅文件接收,chattr +a 规范,logrotate copytruncate=off。Syslog 和远程接收器推迟到 v1.1 — 这保留了离网默认值。
  • 静态加密: LUKS2,aes-xts-plain64,密钥大小 512,argon2id PBKDF,iter-time 2000。共享租户云 VPS(包括 Netcup VPS 2000 G12 NUE D1)上必须启用;专用机架硬件上可选。ext4-over-LUKS1 的实测 I/O 开销为 40–50%;AES-NI + AVX2 将其减半。
  • 加密备份: clickhouse-backup + age + zstd,cron 调度。每次发布时进行恢复测试。SaaS 的备份发送至欧盟第二地点;自托管时,地点由运营商选择。
  • systemd 加固: NoNewPrivilegesProtectSystem=strictPrivateTmpCapabilityBoundingSet=CAP_NET_BIND_SERVICE。服务单元与离网 iptables 规则通过 make airgap-bundle 一同交付。
  • Sec-GPC 短路:Sec-GPC: 1DNT: 1 被设置时,请求在访客标识符计算之前即被丢弃。拒绝统计的访客不产生任何假名标识符 — 什么都没有创建,自然也无需删除。

何时自托管,何时选择欧盟私有 SaaS

真正决定这一点的有五个因素。大多数读者会很快在某一列认出自己。

1. 运维人力。 自托管需要运维时间。运营商拥有 TLS 轮换、GeoIP 数据库更新、ClickHouse 升级、内核补丁、LUKS 口令。如果您没有一个工作内容已经包含 Linux 服务器的人,请选择 SaaS。

2. 流量规模。 Statnive Live 的设计上限是每节点每天 2 亿事件(8 核 / 32 GB 机器)。每天低于约 1000 万事件时,两种路径效果等同;每天超过约 5000 万事件时,自托管所需的运维成熟度本身就说得通了。

3. 审计和合规姿态。 受监管行业往往既需要签署的第 28(3) 条 DPA,需要亲自掌控的基础设施。私有 SaaS 路径覆盖 DPA 这半边;自托管覆盖两边,但将运营负担转移给您的团队。

4. 地理位置。 SaaS 在德国纽伦堡处理数据(Netcup VPS 2000 G12 NUE)— 仅欧盟/欧洲经济区,无第 V 章传输。自托管则将数据放在您的服务器所在的任何地方。国家特定的数据驻留规则(瑞士 FADP、德国公共部门采购)有时需要特定城市 — 只有自托管才能给出这一级别的控制。

5. 规模成本。 SaaS 按流量定价(Starter / Growth / Business 在公开层级中为 $9–$339/月;Enterprise 以上另议)。自托管将 SaaS 账单替换为 Hetzner CX43(约 €14/月)或 Netcup VPS 2000 G12(每月 €25.48)加上运营商时间。低流量时 SaaS 在 TCO 上胜出;极高流量时自托管胜出。

如果其中三个或更多倾向同一侧,那就是您的答案。如果各方向分散,前 6 个月默认选择 SaaS — 之后可以迁移到自托管而不丢失数据,因为二进制和 schema 是相同的。

「私有 SaaS」的中间地带

关于「私有」在这里的确切含义。Statnive Live SaaS 是逻辑上租户隔离的 — 每行事件数据携带一个 site_id,每个仪表盘查询通过 whereTimeAndTenant() 路由,并以 WHERE site_id = ? 作为首个谓词,CI 租户检查点规则拒绝任何绕过它的新查询。它不是物理单租户:一个 ClickHouse 集群为所有客户提供服务。需要物理单租户的客户走自托管路径。

SaaS 开箱即有:

  • 每个计划均附第 28(3) 条 DPA(包括 Free),签署于 2026 年 4 月 24 日。DPA 涵盖第 28(3) 条所有八个子段 — 仅遵指令、保密、第 32 条安全、子处理者授权、数据主体权利协助、第 32–36 条控制者义务协助、终止时删除或返还数据,以及审计权。
  • 子处理者列表在任何上游变更后 7 天内更新,并通过隐私页面向客户提供 14 天提前通知;客户可在此窗口内书面提出异议。
  • 终止后 30 天客户导出窗口 — 通过标准导出端点以完整 CSV/JSON 导出。30 天后,原始表、rollup 表、备份(下一个备份周期 ≤ 24 小时)和审计日志将被删除,除非欧盟或成员国法律要求保留。
  • 48 小时泄露通知 SLA,自知悉起计算,对应 GDPR 第 33 条。
  • 仅在欧盟/欧洲经济区处理数据。 存储的个人数据无第 V 章欧洲经济区外传输。链条中出现的两个美国居民子处理者 — Cloudflare(仅 DNS)和 Let’s Encrypt(DV 证书)— 在 DPA 第 6 节以 DPF 充分性披露。它们仅接收 DNS 元数据证书元数据,从不接触应用层负载。

最后一点是对《云法案》/ FISA 702 问题负载最重的答案。*「处理链中无美国注册方」是严格版本,也是 Civo 和 SoftwareSeni 在上述来源中所主张的。「说法兰克福或都柏林并不能让美国提供商具备主权」*是架构必须实际回答的事情;「由德国法律实体的德国居民客户在纽伦堡基础设施上运营」是这个答案。

两者之间的迁移路径

这部分很短,因为它刻意平淡无奇。

相同的二进制,相同的 schema。 迁移脚本位于 clickhouse/migrations/,从第一天起就使用 {{if .Cluster}} Go 模板 — 从单节点到 Distributed 的过渡是一次配置切换,而非重新平台。

无数据锁定。 ClickHouse 使用标准二进制格式(Parquet / Native / RowBinary)以及 clickhouse-backup 归档格式。从 Statnive Live 迁移到 ClickHouse Cloud 或自管集群是一次 clickhouse-backup 恢复,而非重新导入。

访客范围的导出和抹除。 GET /api/privacy/access 返回所解析站点上与 Cookie 绑定的行(GDPR 第 15 条);POST /api/privacy/erase 是对应的抹除端点(GDPR 第 17 条)。抹除路径动态枚举 system.columns,因此任何携带 cookie_id 的新表会自动纳入处理范围 — 而 WHERE 子句固定为 cookie_id = ? AND site_id = ?,所以针对某个站点的抹除请求永远不会触及另一个租户的数据行。数据主体访问权请求(DSAR)从第一天起就有,而非事后追加。

如果您从私有 SaaS 开始,后来想自托管,请申请二进制加上您数据的 clickhouse-backup 归档。发布流水线会产出一个可复现的 statnive-live-<VERSION>-linux-amd64-airgap.tar.gz 加上 SHA256SUMS(以及可选的 Ed25519 签名)— 您复制压缩包,clickhouse-backup restore 您的数据,然后就能针对同一 schema 在您自己的硬件上运行同一个仪表盘。

常见问题

如果 Statnive Live 关闭了怎么办?

二进制不变,您继续运行它。自托管客户已经有了。SaaS 客户在离开时可以申请二进制加上其数据的 clickhouse-backup 归档。发布流水线产出一个带 SHA256 校验和的可复现离网包;这一切都不依赖 Statnive 是否还在运营。

我可以把数据迁到 ClickHouse Cloud 吗?

可以。数据是标准 ClickHouse 格式;对 ClickHouse Cloud 目标执行 clickhouse-backup restore 是支持的路径。如果您想用另一个工具处理数据,导出端点可以输出 CSV/JSON。

我的 CI 可以针对一个 Statnive 实例运行吗?

可以。make ci-local 会启动 ClickHouse、启动 Go 二进制、运行集成测试,然后全部清理。每个 PR 的 CI 运行器已经在这样做 — 这和您本地使用的流程完全相同。

加密备份存放在哪里?

自托管时由运营商选择:任何兼容 S3 的存储、任何远程磁盘、任何磁带。对于 SaaS,合同上的答案是欧盟第二地点。不管备份存放在哪里,每次发布都会测试恢复。

《云法案》/ FISA 702 — 纽伦堡有帮助吗?

有,当提供商也非美国控制时。Statnive Live SaaS 由 Netcup(德国法律实体)的德国居民客户在纽伦堡的 Netcup 基础设施上运营。处理链中无美国注册方 → 《云法案》/ FISA 702 无法触达应用层负载。两个美国居民子处理者以 DPF 充分性出现 — Cloudflare(仅 DNS)和 Let’s Encrypt — 仅接收 DNS 元数据和证书元数据。这与「数据库活在 AWS-Frankfurt」是不同的层面。

灾难恢复怎么办?

同一个恢复测试在每次发布时运行,针对同一个加密备份格式 — age 加密、zstd 压缩、clickhouse-backup 归档。我们还在 docs/luks.md 中记录了静态加密层的 LUKS 恢复路径。没有魔法;有一个真正演练过的程序。

结论

2026 年,自托管不是一种旗帜 — 它是对欧盟监管和采购压力可量化趋势的最干净回应。Statnive Live 以两种形态交付相同的 Go 二进制加上相同的 ClickHouse schema:自托管——您承担全部运营责任,换取失去 SaaS 供应商风险;以及纽伦堡欧盟私有 SaaS——您签署第 28(3) 条 DPA,享有仅在欧盟处理数据的承诺,以及 7 天子处理者 SLA,但也承担架构设计时就已约束的多租户爆炸半径。

选择与您的运维人力、流量规模和审计姿态相匹配的路径。如果您未定,先从 SaaS 开始 — 迁移到自托管只需一次 clickhouse-backup 恢复。

Statnive Live 即将推出,地址 zh.statnive.com/live 在此之前,WordPress 插件在 WordPress.org 上提供对比文章梳理了 WP vs Live 决策树,GDPR 指南覆盖监管层面,价格页将两款产品并排呈现。如果您正在专门对比 GA 的替代方案,这份排名榜单收录了七款隐私优先的替代品,并附有 WordPress 集成说明。如果本文中有任何事实被证明有误,请写信告诉我 — 每项主张都有脚注,我们宁愿纠正一个,也不愿交付一个精心润色的半真半假。

免费获取 Statnive