自托管 Ronde
Ronde 可以运行在任何装有 Docker 的机器上:应用本体、一个 PostgreSQL 数据库,以及一个在每个版本应用数据库迁移的一次性容器。社区版的全部功能都免费,会议和人数不受限制。许可证密钥可开启 Team 或 Enterprise 功能。
开始
获取某个发布版本的文件:
mkdir ronde && cd ronde curl -fsSLO https://raw.githubusercontent.com/joinronde/ronde/main/docker/compose.yml curl -fsSL https://raw.githubusercontent.com/joinronde/ronde/main/docker/.env.example -o .env填写
.env:大家将访问的地址(RONDE_URL)和三个密钥。for v in POSTGRES_PASSWORD AUTH_SECRET SECRET_KEY; do sed -i "s|^$v=.*|$v=$(openssl rand -base64 32 | tr -d '/+=')|" .env; done启动:
docker compose up -d打开
RONDE_URL并创建第一个账户:它将成为该实例的管理员。
HTTPS
将域名指向这台机器,在 .env 中设置 RONDE_DOMAIN=ronde.example.com 和 RONDE_URL=https://ronde.example.com,然后使用 https 配置文件启动。Caddy 会获取并续期证书。
docker compose --profile https up -d
如果使用你自己的反向代理,请转发到 RONDE_PORT 端口(默认 3000),并保留 X-Forwarded-* 请求头。Server-Sent Events 不能被缓冲(nginx 中设置 proxy_buffering off)。
邮件
登录链接、邀请和提醒需要 SMTP 服务器:SMTP_URL=smtp://user:password@smtp.example.com:587 和 MAIL_FROM。试用时,mail 配置文件会启动 Mailpit,拦截所有邮件:
echo "SMTP_URL=smtp://mail:1025" >> .env
docker compose --profile mail up -d # emails at http://localhost:8025
要让成员通过回复提醒邮件来填写进展卡,请给 Ronde 一个可读取的邮箱:INBOUND_IMAP_URL=imaps://user:password@imap.example.com:993/INBOX;登录名不是邮箱地址时,再设置 INBOUND_ADDRESS。回复会发送到这个邮箱;Ronde 每分钟读取回复提醒的邮件,把其中的条目加入进展卡,发邮件确认,并将其移到 Ronde 文件夹。邮箱中的其他邮件保持原样,因此它可以就是你平时的联系地址。
推送通知(快轮到你、进展卡提醒、铃铛消息)需要为实例准备一对密钥:npx web-push generate-vapid-keys,然后设置 WEB_PUSH_PUBLIC_KEY 和 WEB_PUSH_PRIVATE_KEY。请妥善保存:已开启通知的设备依赖这对密钥。Ronde 必须通过 HTTPS 提供服务;在 iPhone 上需先将其添加到主屏幕。
登录
本地账户和魔法链接开箱即用。SIGNUP_POLICY 决定谁可以创建账户:invite-only(默认)、open,或配合 SIGNUP_ALLOWED_DOMAINS 使用 domains。一个 OpenID Connect 提供方(Keycloak、Authentik、Entra ID、Okta……)通过 OIDC_* 变量配置;Google、GitHub 和 Microsoft 则通过各自的 <PROVIDER>_CLIENT_ID 和 <PROVIDER>_CLIENT_SECRET 配置。重定向 URI:<RONDE_URL>/api/auth/callback/<provider>。
不把声音发到外部的转写
转写(Team)使用兼容 OpenAI API 的语音转文字服务。若要让声音留在你的服务器上,请启动 whisper 配置文件并让 Ronde 指向它:
cat >> .env <<'ENV'
TRANSCRIPTION_URL=http://whisper:8000/v1
TRANSCRIPTION_MODEL=Systran/faster-whisper-small
ENV
docker compose --profile whisper up -d
Slack
拥有 Team 或 Enterprise 许可证后,工作空间可以将 Ronde 添加到 Slack:私信发送进展卡提醒、在 Slack 表单中
填写进展卡、在频道中接收通知,以及 /ronde 命令。实例需要自己的 Slack 应用,只需创建一次。Slack 必须能通过
HTTPS 访问 RONDE_URL。
获取应用清单,并将其中每个
https://ronde.example.com替换为你的RONDE_URL:curl -fsSLO https://raw.githubusercontent.com/joinronde/ronde/main/docker/slack-manifest.yml在 api.slack.com/apps:Create New App › From a manifest,选择你的 Slack 工作区并粘贴该文件。
将 Basic Information › App Credentials 中的密钥复制到
.env(SLACK_CLIENT_ID、SLACK_CLIENT_SECRET、SLACK_SIGNING_SECRET),然后运行docker compose up -d。在 Ronde 中,每个工作空间的所有者或管理员打开设置 › Slack › 添加到 Slack。
如需将应用添加到多个 Slack 工作区,请在应用设置中开启 Manage Distribution。
Microsoft Teams
拥有 Team 或 Enterprise 许可证后,工作空间可以将 Ronde 添加到 Microsoft Teams:通过私信发送进展卡提醒、从卡片填写进展卡、在频道中接收通知,以及使用 ronde 命令。实例需要自己的 Teams 应用,即在你的 Microsoft 组织中注册一次的 Azure Bot。Microsoft 必须能通过 HTTPS 访问 RONDE_URL。
- 在 Azure 门户中:Create a resource › Azure Bot,填写标识(
ronde),选择免费的 F0 方案、Type of App: Single Tenant 和 Create new Microsoft App ID。 - 在机器人的 Settings › Configuration 中:将 Messaging endpoint 设为
https://ronde.example.com/api/teams/messages(你的RONDE_URL),保存,并复制 Microsoft App ID 和 App Tenant ID。 - 同一页面的 Manage Password 会打开应用注册:Certificates & secrets › New client secret,然后复制其 Value(只显示一次)。
- 在机器人的 Settings › Channels 中:添加 Microsoft Teams 并接受其条款。
- 将这三个值写入
.env(TEAMS_APP_ID、TEAMS_TENANT_ID、TEAMS_APP_PASSWORD),然后运行docker compose up -d。 - 在 Ronde 中,工作空间的所有者或管理员打开 设置 › Microsoft Teams 并下载应用。Teams 管理员上传它(Teams 管理中心 › Teams 应用 › 管理应用 › 上传新应用)并将其添加到团队:Ronde 会在该团队的频道中发布一张卡片,点击 关联到 Ronde 即可选择工作空间。
客户端密钥会在 6 到 24 个月后过期:请提前创建新的密钥并替换 TEAMS_APP_PASSWORD。单租户机器人为你自己 Microsoft 组织中的成员服务;若要向其他组织提供该应用,需要将其发布到 Teams 应用商店。
升级
docker compose pull && docker compose up -d
migrate 容器会在应用启动前应用新版本的迁移。在 .env 中用 RONDE_VERSION=1.0.0-beta.3 固定版本,即可自行决定何时升级。
备份
所有数据都在 PostgreSQL 卷中:
docker compose exec db pg_dump -U ronde ronde | gzip > ronde-$(date +%F).sql.gz
镜像
| 镜像 | 说明 |
|---|---|
ghcr.io/joinronde/ronde |
应用本体,包含所有版本(没有许可证时付费功能关闭) |
ghcr.io/joinronde/ronde-ce |
不含付费版本代码的应用(仅 AGPL) |
ghcr.io/joinronde/ronde-migrate |
同一版本的数据库迁移 |
每个密钥变量也接受 <NAME>_FILE 形式(Docker secrets)。教育:学校和大学可免费使用付费方案,请在 https://joinronde.com/zh/education 申请。