Stoat(原 Revolt)
更新于 2026-09-19 20:37:08
先更正一件事:Revolt 已改名 Stoat
网上大量教程还在写「Revolt」,但那个名字已经不用了:
- 项目现名 Stoat,官网 https://stoat.chat,短链
stt.gg - 代码仓库整体搬到 github.com/stoatchat 组织;老的
revoltchat/*仓库保留但不推进(老的 desktop 客户端最后提交在 2024-10,语音服务vortex停在 2024-03) - 2025-10-05 起,Docker Compose 项目名从
revolt改成stoat——这是破坏性变更,老实例升级必须按 README 的 Notices 操作
所以你要部署的是这一套:stoatchat/self-hosted(部署编排)+ stoatchat/stoatchat(Rust 后端,3.3k★)+ stoatchat/for-web(Web 客户端)。
它是什么
「开源版 Discord」这个定位是准确的:服务器 → 频道(文字/语音)→ 身份组(Roles)→ 频道级权限覆盖 的模型和 Discord 几乎一一对应,界面照搬,用户几乎零迁移成本。后端是 Rust + MongoDB + Redis(KeyDB),Web 客户端 AGPL-3.0。
语音部分值得单独说:Stoat 的 RTC 直接跑在 LiveKit 上(README 明确要求开放 7881/tcp 与 50000-50100/udp,并说明这些端口由 LiveKit 使用、Caddy 无法代理)。也就是说延迟和音质取决于 LiveKit 这套 SFU,而不是自研的 mesh——这是它比"浏览器开房"类方案更耐用的地方。
部署:确实是一个 docker compose
官方推荐配置不高:2 vCPU + 2GB 内存起步(他们自己的自建测试环境就是 KVM 2 档)。
# 1. 防火墙(语音端口别忘)
ufw allow 80,443/tcp
ufw allow 7881/tcp
ufw allow 50000:50100/udp
# 2. 拉部署仓库 + 生成配置
git clone https://github.com/stoatchat/self-hosted stoat && cd stoat
chmod +x ./generate_config.sh
./generate_config.sh your.domain # 生成 secrets.env
# 3. 起服务
docker compose up -d
编排里包含:backend、Web 前端、文件服务器(原 Autumn,现已迁移到 silo)、元数据/图片代理(January)、MongoDB、KeyDB/Redis、RabbitMQ、pushd(推送守护)。配置项支持邮箱验证、Captcha、自定义 S3、iOS/Android 推送(需要 Apple/Google 开发者账号)。
🔴 最容易致命的一步:
generate_config.sh生成的secrets.env一定要备份。官方原话是——密钥被覆盖,你会失去对实例上所有文件的访问权(文件是用这些密钥加密存的)。
必须知道的坑
- 大部分官方客户端不支持自建实例。README 明说:目前 Web 客户端体验良好,装成 PWA 后接近原生;但桌面/移动官方客户端基本连不上你自己的实例。想要"全平台原生体验"的预期要下调。
- 破坏性变更非常频繁,升级前必须读 Notices:
- 2024-09-29:Autumn 大重构,需手动跑 Node 迁移脚本
- 2024-11-28:配置项改名 + 新增 RabbitMQ/pushd
- 2025-10-05:compose 项目名 revolt → stoat
- 2026-02-28:密钥迁移进
secrets.env - 2026-09-17:minio → silo,媒体目录需备份后自动迁移
- 无联邦。官方 FAQ 明确:目前没有任何 federation,也不在路线图上(未来可能自研协议/polyproto/XMPP,明确说 Matrix「不太可能,晦涩且不稳定」)。它是"单实例社区",不是 Matrix 那种互联网络。
- 品牌使用受限。代码是 AGPLv3 可以随便改,但品牌不是:不得使用 Stoat 品牌/素材宣传你的第三方实例,修改后对外提供服务必须公开源码(AGPLv3 的常规要求)。想做成商业产品要提前和项目方沟通。
- 视频推流有已知 bug:用户推的视频分辨率超过
Revolt.toml里的上限时,会被直接踢出(官方承认是实现不完整)。可以调[features.limits.*].video_resolution放宽。 - 踩过安全公告:backend、for-web 都发过安全通告,自建务必跟住最新 tag(撰写时 remediated 版本是 backend 0.15.0 / for-web 0.14.1)。
- 老架构债务:配置文件名至今还叫
Revolt.toml,环境变量前缀也保留revolt——说明这是"改名牌"而不是"重写",历史包袱会跟着你。
管理体验(对应「管理方便」这一点)
这部分它确实是同类里最像 Discord 的:
- 身份组(Roles):一个组打包一组权限,频道里再单独覆盖——和 Discord 的心智模型完全一致
- 频道级权限:谁能进哪个语音频道、谁被禁言、谁能管消息,全在图形界面点选
- 服务器设置面板:管理员点几下就能配好,不用改配置文件
- 对比 Mumble:Mumble 的 ACL 是树形权限位编辑,要理解 inherit/inject 才能用;Stoat 是"勾选框 + 角色继承",运维门槛低一个数量级
二开与集成建议
- 反代方案:
generate_config.sh里选择走其他反代,Caddy 会暴露在 8880;但语音的 7881/tcp 和 50000-50100/udp 必须直通,别指望反代解决。 - 内网/小规模首选:想要一个"自己家的 Discord"给 20~100 人用,这是最省心的组合;规模再大就该考虑 Matrix + LiveKit 或 LiveKit 自研前端。
- 文件存储换成 S3:默认 minio/silo 吃本地盘,媒体多的话尽早切对象存储。
- 升级当成发布日:每次
git pull前先看 Notices,按顺序执行迁移;把 MongoDB 和媒体目录纳入每日备份。 - 推送要用起来:手机端的可用性几乎全看 pushd + Apple/Google 凭证,没有推送的实例用户会抱怨"收不到消息"。
一句话总结
Stoat 就是「开源版 Discord」目前最像的那一个:Rust 后端、Docker Compose 一条命令起全家桶、角色与频道权限完全图形化,语音还直接架在 LiveKit 上所以你不用担心音质和延迟;代价是没有联邦、官方客户端连不上自建实例、破坏性变更频繁、品牌有使用限制——它适合"我要一个自己的 Discord",不适合"我要一个开放互联的 IM 网络"。