Fly.io 部署 API

Fly.io 支持 Docker 部署,自带 HTTPS、健康检查、自动部署,适合快速上线。

前置条件

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 会自动:

  1. 构建 Docker 镜像
  2. 执行 npm run db:migrate(迁移成功才继续)
  3. 启动新容器
  4. 健康检查通过后切换流量

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

注意事项