在 Vercel × Supabase 那篇里我们说过:网站门面在 Vercel、数据在 Supabase,而「重活」都跑在 Fly.io——长驻的 Python worker、浏览器自动化、跑几十分钟的定时任务。这篇把 Fly.io 讲透:它到底是什么、和自己租一台 VPS 有什么本质区别、Render / Railway / Heroku 这些竞品各自站在哪,以及我们为什么选它、踩过哪些坑。
先给一个一句话版本:Fly.io 是一个「你给它一个 Docker 容器,它帮你在全球把这个容器跑成随时可启停的小虚拟机」的平台。你不用买服务器、不用装系统、不用配防火墙,一条 fly deploy 命令,应用就在线上跑起来了。
传统上「把应用放上网」有两条路:要么租一台服务器自己折腾(VPS),要么用全托管平台但被限制得很死(早年的 Heroku)。Fly.io 走中间路线:你交付的是一个标准 Docker 容器——里面想装什么都行;它负责的是容器之外的一切——机器、网络、证书、重启、扩缩容。
| 概念 | 它是什么 | 对你意味着 |
|---|---|---|
| Firecracker microVM | 亚马逊为 Lambda 研发的轻量虚拟机技术,Fly 用它跑你的容器 | 比普通容器隔离更彻底(硬件级),但启动仍是亚秒级 |
| Fly Machines | 可以用命令/API 随时启停的虚拟机,按「秒」计费 | 没流量时机器自动停、来请求秒级唤醒——闲置几乎不花钱 |
| Anycast 网络 | 全球同一个 IP,用户请求自动路由到最近的机器 | 想服务全球用户时,一条命令把应用克隆到多个地区 |
fly launch # 读你的 Dockerfile,生成 fly.toml 配置
fly deploy # 构建镜像 → 推到 Fly → 滚动替换线上机器
fly status # 看机器在哪个地区、是不是 started
所有配置浓缩在一个 fly.toml 文件里:跑几台机器、多少内存、健康检查打哪个路径、没流量要不要自动停机。这个文件跟代码一起进 Git——基础设施变成了一段可以 review、可以回滚的文本。
VPS(Virtual Private Server,虚拟专用服务器)是最经典的形态:你按月整租一台虚拟机,拿到 root 密码,剩下全部自理。它和 Fly.io 的区别不在「便宜多少」,而在「谁来负责运维」。
你只管容器里的应用。系统补丁、防火墙、TLS 证书、崩溃重启、扩缩容都是平台的事。按秒计费,没流量可以自动停机。
你拿到一台裸机的 root 权限,自由度最高。但从装系统到续证书,出了任何问题都是你的事。按月整租,闲置照付。
| 运维事项 | VPS 上你要做的 | Fly.io 上 |
|---|---|---|
| 系统安全补丁 | 配 unattended-upgrades,内核升级后自己安排重启 | 平台负责,你无感 |
| 防火墙 / 入侵防护 | ufw + fail2ban + SSH 密钥加固,一样不能少 | 默认私网隔离,只暴露你声明的端口 |
| 部署流程 | 自己写 CI 脚本 / systemd / Docker Compose | fly deploy 一条命令,自带滚动发布 |
| HTTPS 证书 | 自装 Nginx/Caddy + Let's Encrypt 并盯续期 | 自动签发、自动续期 |
| 崩溃自愈 | 自己配进程守护和告警 | 健康检查失败自动重启 |
| 多地区部署 | 基本不现实(一台 VPS 就是一个单点) | 一条命令克隆到 18 个地区 |
裸价上 VPS 占优:欧洲低价王 Hetzner 的入门机(2 vCPU / 4GB 内存 / 20TB 流量)约 €5.49/月,DigitalOcean 最低 $4/月,国内阿里云轻量常有几十元每年的活动价。Fly 的 512MB 小机器 $3.3/月看着更便宜,但内存只有别人零头,流量、磁盘卷也另外计费。
但这笔账不能只算房租。VPS 便宜的前提是你的时间免费:上面那张责任清单,每一行都要花人的时间去搭建和维护,出事时还要人去救火。对一个没有专职运维的小团队,「每月多花几美元、把整张清单外包给平台」几乎总是划算的——这正是我们的选择。
「把应用部署上线」这个市场分三层:边缘/前端托管(跑网页和轻函数)、容器 PaaS(Fly 所在的赛道,跑任意后端)、裸 VPS(什么都能跑但什么都自理)。先看 Fly 的直接对手:
| 平台 | 一句话定位 | 入门价位 | 适合谁 |
|---|---|---|---|
| Fly.io | 全球多地区 + 按秒计费的 microVM,CLI 驱动 | 512MB 机器约 $3.3/月,纯按用量 | 想要全球低延迟、愿意用命令行的开发者 |
| Render | 「现代版 Heroku」,界面友好的全托管 PaaS | 有免费层(15 分钟无流量休眠);付费 512MB $7/月 | 想要图形界面、不想碰 CLI 的团队 |
| Railway | 纯按用量计费的容器平台,体验极顺滑 | Hobby $5/月起(含等额用量);内存 $10/GB/月 | 快速起原型、按需付费的独立开发者 |
| Heroku | PaaS 鼻祖(现属 Salesforce),生态成熟但创新放缓 | 免费层 2022 年已取消;Eco $5/月、常驻 Basic $7/月 | 存量老项目、需要成熟 add-on 生态的团队 |
| Cloud Run | Google 的容器 serverless,按请求计费、原生缩到零 | 每月 200 万请求内基本免费,超量按资源秒计费 | 流量波动极大、已在 Google 云生态的团队 |
| DO App Platform | DigitalOcean 的托管 PaaS,胜在便宜和简单 | 静态站免费;最小容器 $5/月(512MB) | 已在用 DO、需求简单的小项目 |
经常有人把 Vercel、Cloudflare Workers 和 Fly 放在一起比,其实它们解决的是不同的问题:
| 平台 | 跑的是什么 | 跑不了什么 |
|---|---|---|
| Vercel | 前端页面 + 短命 serverless 函数(Hobby 免费 / Pro $20/人/月) | 长驻进程、跑几十分钟的任务、WebSocket 长连接重活 |
| Cloudflare Workers | 毫秒级边缘函数(免费 10 万请求/天;付费 $5/月起) | 完整容器——它连 Node.js 完整环境都不是 |
| VPS(Hetzner / DO / Vultr / 阿里云轻量) | 一切(€5.49、$4、$2.5、几十元/年起) | 没有跑不了的,只有你不想自己运维的 |
团队目前跑在 Fly 上的,都是同一类东西——Vercel 的 serverless 函数干不动的「重活」:
| 项目 | 放在 Fly 上的部分 | 为什么非它不可 |
|---|---|---|
| Vivi | 整个后端 API 服务 | 长驻进程 + WebSocket,serverless 模型不合适 |
| Akke | Python 采集 / 处理 worker(双机热备) | 浏览器自动化 + 单任务跑几十分钟,远超函数超时上限 |
| CozyUp | Web 服务 | 需要常驻内存状态与后台队列 |
| 内部自动化 | n8n 工作流引擎 | 开源软件直接拿 Docker 镜像部署,Fly 天然适合 |
选 Fly 而不是 Render/Railway,对我们主要是三点:按秒计费(低流量服务停机时几乎不花钱)、fly.toml 进 Git(部署配置可 review 可回滚,符合团队「一切进版本控制」的纪律)、以及 CLI 完全可脚本化(我们的部署和巡检大量由自动化执行,图形界面反而是障碍)。
localhost,部署到 Fly 后健康检查永远不通过——因为流量是从虚拟机外面进来的。改成监听 0.0.0.0 才能接到请求。这是新服务上 Fly 的第一号坑。
fly scale 命令改了机器规格,下次 fly deploy 会按 fly.toml 里写的旧配置再改回来。改规格必须同步改 fly.toml 并提交,且事后要用 fly machine list 验证,不能只看命令返回成功。
fly machine list 数一遍确认。配置文件说的和线上真实状态,永远以后者为准。
_acme-challenge 记录必须设为「仅 DNS」不走代理,并对证书到期做独立监控。