自部署 Server
outbrief-server 只做一件事:在你的电脑和设备之间转发密文。它没有密钥,看不到汇报、简报和回复;来电结束后会删除密文;它也不调用任何大模型。
需要 Node ≥ 22.18、pnpm 9 和 MySQL 8。
-
下载代码,安装依赖:
终端窗口 git clone https://github.com/outbriefapp/outbrief-servercd outbrief-serverpnpm install -
启动。连接串由部署环境注入,下面的用户名和口令只是占位符:
终端窗口 OUTBRIEF_DATABASE_URL='mysql://USER:PASSWORD@HOST:3306/outbrief' PORT=8787 pnpm start数据表会在启动时自动创建和迁移。
-
在日志里找到认领码,记下来:
Claim code: XXXX-XXXX-XXXX -
检查是否正常:
GET /healthz
仓库里的 railway.json 已经配好了健康检查和重启策略,其余的在 Railway 上设置:
- 添加一个 MySQL 8 服务(镜像
mysql:8.4,卷挂在/var/lib/mysql)。只走私网,不要开公网 TCP Proxy。 - 给 server 设置变量:
OUTBRIEF_DATABASE_URL引用 MySQL 服务的${{MySQL.MYSQL_URL}},不要把连接串明文写进仓库PORT=8787- 要来电推送的话,再设置
OUTBRIEF_FCM_SERVICE_ACCOUNT(见下文)
- 副本数设为 1,并给 server 挂一个卷(比如
/data,代码不会读写它)。Railway 不允许两个部署同时挂着同一个卷,所以发布时会先停旧部署、再起新的,正好满足单实例的要求。 - 绑定自定义域名:按 Railway 给的 CNAME 和
_railway-verifyTXT 记录添加 DNS。用 Cloudflare 时,先设成「仅 DNS」(灰色云朵),让 Railway 签发证书。
谁能创建账号
Section titled “谁能创建账号”| 部署方式 | 设置 | 行为 |
|---|---|---|
| 私有化(默认) | OUTBRIEF_OPEN_SIGNUP=false |
第一台设备要填日志里的认领码,创建完账号后就关闭注册,其他设备只能用配对码加入 |
| 公共云端 | OUTBRIEF_OPEN_SIGNUP=true |
谁都能建账号,不用认领码,有限流 |
都不是必填,不需要 .env 文件。
| 变量 | 默认值 | 说明 |
|---|---|---|
OUTBRIEF_DATABASE_URL |
本机 docker 的 outbrief 库 |
MySQL 连接串,由部署平台注入 |
PORT |
8787 |
监听端口 |
OUTBRIEF_OPEN_SIGNUP |
false |
是否开放注册,见上表 |
OUTBRIEF_FCM_SERVICE_ACCOUNT |
不设 | 来电推送用的 Firebase 服务账号密钥,可以是整个 JSON 内容,也可以是文件路径。设了但读不出来时,server 会启动失败 |
来电推送(可选)
Section titled “来电推送(可选)”不配推送也能用:App 开着时会通过事件流收到来电。想让 App 被划掉的 Android 手机也能响铃,就需要推送:
- 在 Firebase 控制台建一个项目,添加包名为
ai.outbrief.app的 Android 应用。 - 把这个项目的服务账号密钥(整个 JSON)配给 server 的
OUTBRIEF_FCM_SERVICE_ACCOUNT。 - 用同一个项目的
google-services.json打包 Android App,见 Android 安装包。
推送里不带任何内容,只有来电 id。手机收到后,再用自己的令牌去取密文,在本机解密、响铃。没收到回执时,每 10 秒重推一次,最多 3 次。设计见 ADR 0010。