跳转至

Fly.io 全球容器部署

一句话概述:Fly.io 把你的 Docker 容器部署到全球 35+ 个区域的边缘服务器,自动就近路由用户请求,适合需要全球低延迟的全栈应用,特别是有状态服务(数据库)。

核心知识点

概念白话解释
Fly MachineFly 的计算单位,本质是一个轻量虚拟机(microVM)
Anycast全球任播网络,用户自动连接最近的节点
Fly PostgresFly 托管的 PostgreSQL,支持多区域副本
fly.toml应用配置文件
flyctlFly.io 的命令行工具
卷(Volume)持久化存储,数据不会因重启丢失

安装配置

# 安装 flyctl
curl -L https://fly.io/install.sh | sh  # Linux/Mac
# Windows: powershell -Command "irm https://fly.io/install.ps1 | iex"

# 注册/登录
fly auth signup  # 注册
fly auth login  # 登录(打开浏览器)

部署应用

# 在项目目录下
fly launch  # 交互式创建应用(自动检测框架、生成 Dockerfile)
# 选择应用名、区域、是否需要数据库

fly deploy  # 部署应用

配置文件

# fly.toml
app = "my-app"  # 应用名
primary_region = "sin"  # 主区域(新加坡)

[build]
  dockerfile = "Dockerfile"  # 使用 Dockerfile 构建

[http_service]
  internal_port = 3000  # 应用监听端口
  force_https = true  # 强制 HTTPS
  auto_stop_machines = "stop"  # 无流量时自动停止(省钱)
  auto_start_machines = true  # 有请求时自动启动
  min_machines_running = 0  # 最少运行实例数

[[vm]]
  memory = "256mb"  # 内存
  cpu_kind = "shared"  # CPU 类型
  cpus = 1  # CPU 核数

基本使用

fly status              # 查看应用状态
fly logs                # 查看实时日志
fly ssh console         # SSH 进入容器
fly scale count 3       # 扩展到 3 个实例
fly regions add hkg     # 添加香港区域
fly secrets set API_KEY=xxx  # 设置密钥

# 数据库
fly postgres create     # 创建 PostgreSQL
fly postgres attach     # 连接到应用

# 存储卷
fly volumes create data --size 10  # 创建 10GB 存储卷

常见报错

报错信息原因解决方案
No machines in running state机器被停了fly machine start 或检查 auto_start
Health check failed健康检查不通过检查应用是否正确监听 internal_port
Out of memory内存不够fly scale memory 512 增加内存
Volume not found卷和机器不在同一区域在同区域创建卷
构建失败Dockerfile 有问题本地先 docker build 测试

速查表

fly launch          # 初始化应用
fly deploy          # 部署
fly status          # 状态
fly logs            # 日志
fly ssh console     # SSH 进容器
fly scale count N   # 扩缩容
fly secrets set K=V # 设密钥
fly regions add XXX # 加区域
fly postgres create # 创建数据库
fly volumes create  # 创建存储卷
fly open            # 浏览器打开应用

# 免费额度:3 个 shared-cpu-1x/256MB 机器 + 3GB 持久卷

参考:Fly.io 官网 | Fly.io 文档 | 定价