Fly.io 部署 API
Fly.io 支持 Docker 部署,自带 HTTPS、健康检查、自动部署,适合快速上线。
前置条件
- 安装 flyctl
- 登录:
fly auth login
1. 创建应用
fly apps create your-app-name
2. 创建 fly.toml
在项目根目录创建 fly.toml:
app = 'your-app-name'
primary_region = 'iad'
[build]
dockerfile = 'api/Dockerfile'
[deploy]
release_command = 'npm run db:migrate'
[http_service]
internal_port = 16888
force_https = true
auto_stop_machines = 'off'
auto_start_machines = true
min_machines_running = 1
[[http_service.checks]]
interval = "10s"
timeout = "5s"
grace_period = "30s"
method = "GET"
path = "/v1/health"
[[vm]]
size = 'shared-cpu-1x'
memory = '1gb'
配置说明
| 参数 | 说明 |
|---|---|
primary_region | 部署区域,iad 美东,nrt 东京 |
release_command | 部署前自动执行数据库迁移 |
internal_port | 应用监听端口 |
auto_stop_machines | 设为 off 保持常驻运行 |
min_machines_running | 最少运行机器数 |
3. 设置环境变量
fly secrets set \
"NODE_ENV=production" \
"JWT_SECRET=your-jwt-secret" \
...
-a your-app-name
完整环境变量列表参考 环境变量
4. 部署
fly deploy
Fly.io 会自动:
- 构建 Docker 镜像
- 执行
npm run db:migrate(迁移成功才继续) - 启动新容器
- 健康检查通过后切换流量
5. 绑定域名
fly certs add api.yourdomain.com -a your-app-name
在 DNS 添加 CNAME 记录:
api.yourdomain.com → your-app-name.fly.dev
常用命令
# 查看日志
fly logs -a your-app-name
# 查看机器状态
fly machine list -a your-app-name
# 修改环境变量
fly secrets set KEY=VALUE -a your-app-name
# 重新部署
fly deploy
# SSH 进入容器
fly ssh console -a your-app-name
注意事项
main.ts中需要监听0.0.0.0:app.listen(port, '0.0.0.0')- Redis/Valkey 需要使用公网可访问的地址(如 Upstash),AWS ElastiCache 内网地址不可用
- 默认会创建 2 台机器(高可用),只需要 1 台可以删除多余的:
fly machine destroy <id> --force