仓库中的 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.tomlfly launch --copy-config --no-deploy --name your-deskfly 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中标签对应的最新镜像。如需定期更新,参见更新。