故障排查
我们预期你会遇到的故障、每一条实际意味着什么,以及怎么收集一个不含你凭据的支持包。
激活相关
Activation code is not in <payload>.<signature> form —— 复制时只选中了一部分。回云端账号的设置 → 自建版授权重新复制,不要手打。
This activation code is for '…', not Busabase Premium —— 别的产品的码。这个实例上没什么可修的。
实例变成只读了 —— 授权过期。所有数据完好且可读,在授权页贴一个续期码,写操作立刻恢复。那一页在过期状态下依然可达,正是为了让这件事做得成。见授权。
邀请成员时提示「席位已满(50/50)」 —— 到席位上限了。已有成员不受影响。移除一位成员可以释放席位,或者联系我们提额。
启动相关
容器起来又退出 —— 通常是数据库。先看日志:
docker compose logs app # Compose
docker logs busabase # 一体机数据库连不上会打出明确的一行说明,healthcheck 会报 unhealthy,而不是让容器假装自己活着。
迁移失败 —— 应用会故意不启动:它停在 Created,端口从不响应。docker compose logs migrate 会给出失败的 SQL 语句和数据库报错,但不会给出它来自哪个文件——拿那条语句去迁移目录里 grep 就能定位。不要为了「先跑起来」而手工启动 app:那等于让它跑在一个和自己不匹配的 schema 上。
登录后立刻弹回登录页 —— APP_URL 和浏览器地址栏对不上。协议、域名、端口三者都要一致,因为会话 cookie 就是按它签发的。从服务端看什么都没失败,所以你也不会看到任何报错。
附件相关
别的都正常,就是上传全失败 —— .env 和 seaweed-s3.json 里的 S3 凭据不一致。init.sh 存在的意义就是防这个;如果这两个文件被手工改过,那就是漏改了其中一个。
超过某个大小就传不上 —— 反向代理。client_max_body_size 必须不小于你最大的附件,代理会在 Busabase 收到之前就把请求拒掉。
提示「存储空间不足」 —— 磁盘满了。其余功能都正常,只有写对象存储会失败。清空间,或调大 SEAWEEDFS_VOLUME_LIMIT_MB。
接非 AWS 的 S3 时下载报 403 —— 有些 S3 兼容服务端会拒绝 AWS SDK 默认加上的 checksum 头。Busabase 正是为此把 requestChecksumCalculation 和 responseChecksumValidation 设成了 WHEN_REQUIRED;如果你的代理又把它们加了回去,问题就在那里。
Agent 与流式输出
agent 的回复不是逐字出现,而是最后一次性全出来 —— 反向代理少了 proxy_buffering off。功能没坏,只是输出被代理攒着,直到这一轮结束才放出来。
网络相关
实例在隔离网络里 —— 完全没问题,这是受支持的场景。授权验签完全在本地完成,不向任何地方发送数据;物理隔离的机器和联网的机器,激活方式完全一样。
收集支持包
任何报障请附上它。里面是日志、健康检查输出和镜像信息,不含任何凭据——生成的密钥在 /data/.credentials,从不打进日志。
一体机:
docker logs --tail 500 busabase > sb-logs.txt 2>&1
curl -s http://localhost:3000/api/health > sb-health.json
docker inspect busabase --format '{{.Config.Image}} {{.State.Status}}' > sb-meta.txt
tar czf busabase-support.tar.gz sb-logs.txt sb-health.json sb-meta.txtCompose:
./support-bundle.shCompose 版脚本还会附上你环境变量的名字,每个值都替换成 <redacted>——这通常足以让我们发现某项配置漏了或拼错了,而你一个密钥都不用发出来。