文档

在 Fly.io 上部署 Desk

仓库中的 fly.toml 会在 Fly.io 上运行 Desk 已发布的镜像。开始前请先阅读所有部署方式的共同要求。

fly.toml 的设置值
镜像ghcr.io/modelriver/desk:1
机器一台,常驻运行:共享 CPU,512 MB
数据卷desk_data,1 GB,挂载到 /data,首次部署时创建
HTTPS由 Fly 提供,HTTP 会跳转到 HTTPS
健康检查每 30 秒 GET /robots.txt
访客地址从 Fly 的 Fly-Client-IP 请求头读取(CLIENT_IP_HEADER),用于限流

Desk 只运行一台机器,并关闭自动停止:限流计数保存在内存中,团队邮件通知也会在事件发生几秒后才发出。

1. 安装 flyctl

安装 flyctl,然后用 fly auth login 登录。

2. 创建应用

在一个空目录中:

Bash
curl -fsSLO https://raw.githubusercontent.com/modelriver/desk/main/fly.toml
fly launch --copy-config --no-deploy --name your-desk

fly launch 会沿用 fly.toml 的设置,询问区域,并把应用名称写入文件。Fly 上的应用名称是全局唯一的,请选一个自己的名称。

3. 设置密钥

Bash
fly secrets set MODELRIVER_API_KEY=your-key \
DESK_SECRET_KEY="$(openssl rand -base64 32)" \
DESK_IDENTITY_SECRET="$(openssl rand -base64 48 | tr -d '\n')"

4. 部署

Bash
fly deploy --ha=false

--ha=false 让 Desk 只运行它需要的一台机器。数据卷会随机器一起创建。

5. 创建第一位管理员

Bash
fly ssh console --pty -C "desk-entrypoint node /app/scripts/create-admin.ts"

它会询问管理员的邮箱、姓名和密码。Desk 的地址是 https://your-desk.fly.dev;打开 /dashboard 登录,首次登录会设置双重认证。

使用自己的域名

Bash
fly certs add support.acme.com

添加它输出的 DNS 记录。证书签发后,设置 Desk 用于生成链接的地址:

Bash
fly secrets set APP_URL=https://support.acme.com

设置邮件

推荐设置。提交和回复工单、账户查询的邮箱验证以及团队通知都需要邮件(没有邮件会怎样)。可使用 Resend、Postmark 或 Amazon SES,EMAIL_FROM 需使用邮件服务已验证的域名,SUPPORT_REPLY_TO 设为团队会查看的邮箱。

把它们设为 secrets,机器会带着新设置重启:

Bash
fly secrets set EMAIL_PROVIDER=resend RESEND_API_KEY=re_… \
EMAIL_FROM="Acme Support <[email protected]>" SUPPORT_REPLY_TO=support@acme.com

然后在 后台 → 设置 → Send a test email(发送测试邮件) 中检查。

日常运维

  • 日志: fly logs。
  • 修改设置: fly secrets set NAME=value,机器会带着新值重启。不要修改 DESK_SECRET_KEY。
  • 新增管理员,或忘记密码、丢失手机: 再次运行第 5 步的命令。
  • 更多空间: fly volumes extend <volume-id> --size 3 扩大数据卷(fly volumes list 可以查看 ID);fly scale memory 1024 增加内存。
  • 固定版本: 把 fly.toml 中的 image 改为完整标签(如 ghcr.io/modelriver/desk:1.0.1)后部署。
  • 更新: fly deploy 会拉取 fly.toml 中标签对应的最新镜像。如需定期更新,参见更新。