Rybbit 2.9.2 配置参数详解
Rybbit v2.9.2 四层配置全解:.env 环境变量层、ClickHouse 内嵌 XML 配置层、站点级配置层与 Caddy 反代层,含参数总览表、实测验证与 4GB/16GB/32GB 三档生产配置模板。
Rybbit 2.9.2 配置参数详解
目标:系统梳理 Rybbit v2.9.2 的四个配置层(环境变量层、ClickHouse 内嵌配置层、站点级配置层、Caddy 反代层)的全部参数:来源、默认值、生效方式与实测验证,并给出按内存分档的生产配置模板。除标注「官方文档溯源」的条目外,全部参数均在 192.168.1.200 服务器(Ubuntu 22.04)实测验证,实测日期 2026-10-30。
一、环境信息
| 项目 | 本次实测环境 |
|---|---|
| 操作系统 | Ubuntu 22.04(Docker 27 + Compose v5.6.1) |
| Rybbit 版本 | v2.9.2(官方最新稳定版,releases.atom 取证) |
| 依赖组件 | ClickHouse 26.3.17.4 / PostgreSQL 17.4 / Redis 8.6.4-alpine |
| 配置来源 | v2.9.2 源码包(docker-compose.yml、.env.example、Caddyfile、clickhouse configs 段)+ 运行容器实测 |
| 端口 | 看板 8128 / API 8129 / ClickHouse 8123 / PostgreSQL 15432 / Redis 6379 |
二、前置条件
- 已按 《Rybbit Docker Compose 部署指南》 完成部署并确认
docker compose ps全部 healthy; - 已注册管理员并至少创建一个站点(站点级配置的验证依赖 site id);
- 理解本篇的「配置层」划分——Rybbit 的配置散在四个位置,改错层是新手最常见的无效修改根因:
| 配置层 | 载体 | 生效方式 | 典型参数 |
|---|---|---|---|
| 环境变量层 | .env → compose 注入容器 | 改后需 docker compose up -d 重建容器 | BASE_URL、BETTER_AUTH_SECRET、CLUSTER_WORKERS |
| ClickHouse 层 | compose configs: 内嵌 XML | 随容器创建注入,改后需重建容器 | async_insert、max_memory_usage |
| 站点级层 | PostgreSQL 站点表(每站点一行) | API/看板即时生效,无需重启 | blockBots、excludedIPs、public |
| Caddy 层 | Caddyfile 绑定挂载 | 改后需 reload caddy 容器 | 域名、ACME 邮箱 |
三、参数查看与修改方式
3.1 环境变量层:.env 是唯一入口
# 查看:compose 会把 .env 与 compose 默认值合成最终配置
cd /opt/rybbit && docker compose config | grep -A3 'BASE_URL' | head -6
# 修改:编辑 .env 后重建(up -d 会自动只重建受影响容器)
docker compose up -d
注意:直接
docker exec进容器export变量无效——compose 重建容器时会以 .env 为准覆盖。
3.2 站点级配置:API 即改即生效
# 查看当前站点全量配置(PUT 同地址回显 config 全字段,GET 亦可)
curl -s -b /opt/rybbit/cookies.txt \
-X PUT http://127.0.0.1:8129/api/sites/2c0b9eb7c6a2/config \
-H 'Content-Type: application/json' -H 'Origin: http://192.168.1.200:8129' \
-d '{"blockBots":false}'
实测回显(节选,全字段即为站点级可配置全集):
{"success":true,"message":"Site configuration updated successfully","config":{"id":"2c0b9eb7c6a2","siteId":1,"type":"web","public":false,"embedEnabled":false,"saltUserIds":false,"domain":"demo.example.com","blockBots":false,"firstPartyProxy":false,"excludedIPs":[],"excludedCountries":[],"excludedPaths":[],"excludedHostnames":[],"excludedUserAgents":[],"excludedASNs":[],...}}
3.3 ClickHouse 层:进容器核对生效值
# 实测核对异步插入与查询线程数是否按配置生效
docker exec clickhouse clickhouse-client --password frog \
-q "SELECT name, value FROM system.settings WHERE name IN ('async_insert','wait_for_async_insert','max_threads','max_memory_usage')"
实测回显:
async_insert 1
wait_for_async_insert 1
max_threads 16
max_memory_usage 32000000000
四、参数总览
按配置层汇总 v2.9.2 全部可调参数(默认值实测/源码双确认):
| 层 | 参数 | 默认值 | 一句话作用 |
|---|---|---|---|
| 环境变量 | BASE_URL | 无(必填) | 可信 Origin + 前端 API 基址 |
| 环境变量 | BETTER_AUTH_SECRET | 无(必填) | 会话签名密钥 |
| 环境变量 | DISABLE_SIGNUP | false | 关闭公开注册 |
| 环境变量 | DISABLE_TELEMETRY | 未设 | 关闭产品遥测 |
| 环境变量 | CLUSTER_WORKERS | 4 | 后端 worker 进程数 |
| 环境变量 | LITE_DASHBOARD | 未设 | 精简看板 |
| 环境变量 | DEPLOYMENT | 未设 | 部署形态标识 |
| 环境变量 | MAPBOX_TOKEN | 空 | 3D 地图增强 |
| 环境变量 | OPENROUTER_API_KEY/MODEL | 空 | AI 辅助查询 |
| 环境变量 | HOST_BACKEND_PORT / HOST_CLIENT_PORT | 127.0.0.1:3001/3002 | 宿主端口映射 |
| 环境变量 | IMAGE_TAG | latest | 镜像版本锁 |
| 环境变量 | CLICKHOUSE_/POSTGRES_/REDIS_PASSWORD | frog 系 | 数据层凭据 |
| ClickHouse | listen_host | 0.0.0.0(容器内) | 监听范围 |
| ClickHouse | 日志级别 | warning + console | 裁剪 16 类系统日志表 |
| ClickHouse | max_server_memory_usage_to_ram_ratio | 0.80 | 进程内存上限比例 |
| ClickHouse | merges_mutations_memory_usage_to_ram_ratio | 0.25 | 后台合并内存比例 |
| ClickHouse | concurrent_threads_soft_limit_ratio_to_cores | 1 | 并发查询线程软限 |
| ClickHouse | async_insert / wait_for_async_insert | 1 / 1 | 异步批量写入 |
| ClickHouse | max_memory_usage | 32000000000 | 单查询内存上限(32GB) |
| ClickHouse | max_threads | 16 | 单查询线程数 |
| ClickHouse | log_queries 等 | 0 | 关闭查询日志表 |
| 站点级 | blockBots | true | Bot 流量拦截 |
| 站点级 | public | false | 公开看板 |
| 站点级 | embedEnabled | false | 嵌入第三方看板 |
| 站点级 | saltUserIds | false | 用户 ID 加盐混淆 |
| 站点级 | firstPartyProxy | false | 一方代理采集 |
| 站点级 | excludedIPs/Countries/Paths/Hostnames/UserAgents/ASNs | 空数组 | 六维流量排除 |
| Caddy | DOMAIN_NAME(环境变量) | 未设 | 站点地址与自动 HTTPS |
| Caddy | email(Caddyfile 全局段) | 未设 | ACME 通知邮箱 |
五、核心参数分类详解
5.1 环境变量层:安全与行为开关
BASE_URL(最高优先级,改错全站不可用)
作用有三:后端可信 Origin 白名单的唯一成员、前端构建期与运行期的 API 基址、tracker/邮件等外发链接的域名。实测验证:.env 设 BASE_URL=http://192.168.1.200:8129 时,带 Origin: http://192.168.1.200:8128 的注册请求被拒——实测回显 {"error":"Origin not allowed","code":"FORBIDDEN"};改回一致的 8129 端口 Origin 后注册成功。该值必须与浏览器地址栏访问 Rybbit 的地址逐字符一致(协议、域名/IP、端口)。
BETTER_AUTH_SECRET
Better Auth 框架的会话签名密钥。官方文档明确要求 32+ 随机字符并用 openssl rand -hex 32 生成。泄露等于全站会话可伪造,必须按密钥管理;轮换后所有用户需重新登录。
DISABLE_SIGNUP
false 时注册页开放。生产建议先注册管理员、邀请完团队成员后置 true 并 docker compose up -d 重建——防止实例被陌生人注册占用(实例管理员可在看板邀请用户,官方组织功能见 API 篇)。
CLUSTER_WORKERS(默认 4) 后端 Node.js cluster 的 worker 数。compose 把该值原样注入 backend。事件写入走内存队列(每 worker 独立 1 秒 flush 批量写 ClickHouse),worker 数直接影响写入并发与内存;小内存机器(≤4GB 宿主)建议降为 2。
LITE_DASHBOARD
置 true 后前端走 lite 系列接口(overview-lite、metric-lite 等,v2.9.2 路由实测存在),看板去掉重型组件。低配 VPS 或只看基础指标的场景建议开启,可显著降低 ClickHouse 查询压力。
DISABLE_TELEMETRY Rybbit 默认向上报自身运行指标(产品遥测)。隐私敏感部署置 true,实测置 true 后 compose 传入 backend/client 两容器。
5.2 环境变量层:数据层凭据
三套凭据的默认值全部是演示值,生产必须改(改法一致:.env 修改后重建):
| 变量组 | 官方默认 | 实测验证方式 |
|---|---|---|
CLICKHOUSE_DB/USER/PASSWORD | analytics / default / frog | clickhouse-client --password frog -q "SELECT 1" 成功 |
CLICKHOUSE_QUERY_PASSWORD | 随主密码 | backend 启动日志实测输出 ClickHouse query user provisioned(自动开通最低权限用户 rybbit_query 供自定义 SQL 查询) |
POSTGRES_DB/USER/PASSWORD | analytics / frog / frog | postgres 容器健康检查 pg_isready 通过 |
REDIS_PASSWORD | changeme | compose 启动参数 --requirepass 注入,健康检查 redis-cli -a $REDIS_PASSWORD ping 通过 |
💡 技术拓展:CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 是这套自动开通机制的前提——它让 default 用户具备建用户/授权的 SQL 权限,backend 启动时才能自建只读查询用户。ClickHouse 的访问控制有两代体系:XML users.xml 静态配置与 SQL 驱动的动态授权(Access Management),Rybbit 选择后者以实现「启动即自愈」的零手工初始化,这是值得借鉴的容器化数据库交付模式。
5.3 ClickHouse 内嵌配置层
官方在 compose configs: 段内嵌 4 份 XML(v2.9.2 源码全文核对),生产调优主要动这份:
<!-- resource_limits.xml 核心:为宿主留出余量,防 ClickHouse 吃光内存 -->
<clickhouse>
<max_server_memory_usage_to_ram_ratio>0.80</max_server_memory_usage_to_ram_ratio>
<concurrent_threads_soft_limit_ratio_to_cores>1</concurrent_threads_soft_limit_ratio_to_cores>
<merges_mutations_memory_usage_to_ram_ratio>0.25</merges_mutations_memory_usage_to_ram_ratio>
</clickhouse>
<!-- user_settings.xml 核心:写入异步化 + 查询资源上限 -->
<clickhouse>
<profiles>
<default>
<enable_json_type>1</enable_json_type>
<async_insert>1</async_insert>
<wait_for_async_insert>1</wait_for_async_insert>
<log_queries>0</log_queries>
<log_query_threads>0</log_query_threads>
<log_processors_profiles>0</log_processors_profiles>
<max_memory_usage>32000000000</max_memory_usage>
<max_threads>16</max_threads>
</default>
</profiles>
</clickhouse>
参数解读(含实测依据):
- async_insert=1 + wait_for_async_insert=1:track 接口返回 success 时事件已由服务端确认落库(等待 flush 完成),但看板聚合仍有秒级延迟——实测从发事件到 overview 数字变化约 6 秒(1 秒应用层队列 flush + ClickHouse 异步合并),属预期行为而非故障。
- max_memory_usage=32GB:单查询内存上限。16GB 宿主必须下调(否则单查询可申请超过物理内存的值,靠 ratio 兜底),建议设为宿主内存的 60%;32GB+ 宿主可保持默认。
- logging_rules.xml 把 16 类系统日志表全部 remove:官方刻意裁剪(这些表在写入密集场景吃磁盘),排障时若需 query_log 临时去掉对应 remove 行即可,实测该文件位于容器
/etc/clickhouse-server/config.d/logging_rules.xml。 - 小内存机器额外加
mem_limit: 2560m(本次实测配置):容器级硬限与 ratio 软限双保险。注意 ratio 0.80 按容器可见内存计算,加 mem_limit 后 ClickHouse 会按 2.56GB 的 80% 自限,实际更省。
5.4 站点级配置层
每个站点一行配置(存 PostgreSQL),全部通过看板「Site Settings」或 PUT /api/sites/<siteId>/config 修改,即时生效。实测字段逐个说明:
| 参数 | 默认 | 说明与实测 |
|---|---|---|
| blockBots | true | 拦截判定为 bot 的流量并把事件转存 bot_events 表。实测陷阱:服务端模拟请求(curl 无浏览器 bot 信号位)也会被判 bot——实测 6 条测试事件全进 bot_events、看板数据为 0;PUT config {"blockBots":false} 关闭后 6 秒内数据正常入库。真实浏览器流量不受影响 |
| public | false | 公开看板(无需登录可访问该站点数据) |
| embedEnabled | false | 允许 iframe 嵌入到第三方站点 |
| saltUserIds | false | 用户标识加盐混淆(配合隐私合规,开启后 user_id 为不可逆哈希) |
| firstPartyProxy | false | 事件经本域代理路径采集(规避广告拦截器对第三方域名的屏蔽) |
| excludedIPs | [] | IP 排除(如公司出口 IP,实测字段回显 "excludedIPs":[]) |
| excludedCountries | [] | 国家码排除 |
| excludedPaths | [] | 路径排除(如 /healthcheck) |
| excludedHostnames | [] | 主机名排除(多环境域名共用一套站点时常用) |
| excludedUserAgents | [] | UA 排除 |
| excludedASNs | [] | ASN 排除(整段机房流量) |
站点排除的判定顺序在 v2.9.2 源码 ingestEvent.ts 有明确注释:站点排除最先执行(先于限额与 bot 检测),被排除的访客不会留下任何痕迹也不计 bot 计数。
5.5 Caddy 反代层
启用内置 Caddy 时(docker compose --profile with-webserver up -d)涉及两处配置:
.env的DOMAIN_NAME:Caddyfile 用{$DOMAIN}占位符引用,决定 ACME 签发域名与站点地址;Caddyfile全局段 email:Let's Encrypt 通知邮箱。
同时必须把 BASE_URL 改为 https://<域名>——三层配置(Caddy 域名、BASE_URL、DNS 解析)必须指向同一地址,这同时根治部署篇记录的 Origin 跨端口 403 问题。Caddy 数据卷 caddy_data(证书)与 caddy_config(配置缓存)已在官方 compose 预定义,重建容器证书不丢。
六、生产配置模板
6.1 4GB 小内存 VPS(个人博客/小站,日均 <10 万 PV)
# .env 关键差异项
BASE_URL=https://analytics.example.com
BETTER_AUTH_SECRET=<openssl rand -hex 32 生成>
DISABLE_SIGNUP=true
CLUSTER_WORKERS=2
LITE_DASHBOARD=true
DISABLE_TELEMETRY=true
CLICKHOUSE_PASSWORD=<强密码>
POSTGRES_PASSWORD=<强密码>
REDIS_PASSWORD=<强密码>
compose 附加:clickhouse mem_limit: 1500m,并把 user_settings.xml 的 max_memory_usage 下调到 2000000000(2GB)。磁盘 SSD 40GB 起。适用:单站点或少数几个站点、开启 LITE_DASHBOARD、CLUSTER_WORKERS=2。
6.2 16GB 中型服务器(多站点/SaaS 产品,日均 <500 万 PV)
本次实测的配置即此档:clickhouse mem_limit: 2560m、其余默认、CLUSTER_WORKERS=4、全功能看板。实测 5 容器稳定运行后宿主内存余量约 7GB。磁盘按 events 表增速预留(ClickHouse 列存压缩后每百万 pageview 约 0.5–2GB,含回放数据需另计)。
6.3 32GB+ 高流量(日均 500 万 PV 以上)
保持官方默认 ratio(0.80)但去掉 mem_limit 让 ClickHouse 用满预算;max_memory_usage 维持 32GB;CLUSTER_WORKERS 提升到 CPU 核数;开启 firstPartyProxy 与 saltUserIds。此档建议把 ClickHouse 迁出 compose 单机形态独立部署(Rybbit 后端通过 CLICKHOUSE_HOST 指向外部集群即可,v2.9.2 环境变量原生支持)。
七、常见问题
1. 改了 .env 不生效?
环境变量在容器创建时注入,docker compose restart 不会重建环境,必须 docker compose up -d(compose 检测到 env 变化会自动重建对应容器)。实测用 docker compose config 核对合成结果。
2. 看板数据延迟多久正常? 应用层队列 1 秒 flush(PAGEVIEW_BATCH_SIZE=5000、PAGEVIEW_FLUSH_INTERVAL_MS=1000,v2.9.2 源码常量)+ ClickHouse 异步插入等待,实测端到端约 6 秒。实时访客(live-user-count)走独立计数路径,秒级更新。
3. ClickHouse 内存占用为什么远超预期?
检查三点:是否保留官方 0.80 ratio(改小会先杀查询后杀进程);是否未加 mem_limit 而 ratio 按宿主全内存计算;filesystem cache(页缓存)在 free 输出里算 buff/cache 不算进程占用,docker stats clickhouse 才是进程真实值。
4. 多套 Rybbit 栈能跑在同一宿主吗?
可以,但必须改三处:compose 顶层 name(防 down 互删)、显式子网、全部宿主端口映射。本次实测项目名 rybbit-2.9.2-stack + 子网 10.89.58.0/24 的写法可直接复制。
5. 遥测关了之后有功能损失吗? 没有。DISABLE_TELEMETRY 只关闭产品运行指标上报(官方用于了解自托管使用情况),分析功能与升级检查完全独立。
6. 站点配置改错了如何回滚?
PUT /api/sites/<siteId>/config 是全字段覆盖式更新,回滚就是再 PUT 一次旧值;config 回显会带回修改后的全量字段,实测可直接作为回滚载荷。
八、参考链接
- v2.9.2 源码包(.env.example、docker-compose.yml、Caddyfile):https://github.com/rybbit-io/rybbit/releases/tag/v2.9.2
- 官方自托管进阶指南(v2.9.2 源码包内 docs/content/docs/(docs)/self-hosting-guides/self-hosting-advanced.mdx)
- ClickHouse settings 文档:https://clickhouse.com/docs/operations/settings
- 本专栏部署篇:《Rybbit Docker Compose 部署指南》
- 本专栏选型篇:《Rybbit 介绍与选型指南》
- 本专栏 API 篇:《Rybbit 2.9.2 API 使用详解》
- 同类方案配置参考:《Umami 3.4 配置参数详解》、《Plausible 配置参数详解》