为什么 Fly.io 是你没在使用的最佳免费 Docker 托管

Fred· Full-Stack Developer3 min read

平台: Fly.io | 提供商: Fly.io | 免费层级: 每月 5 美元额度永久有效

没人谈论的秘密

这是 Fly.io 的特别之处:他们每个月给你 5 美元的免费额度,永久有效。不是试用,不是限时优惠——为你的 Docker 容器提供永久免费托管。如果你的使用量保持在 5 美元以下(剧透:大多数项目都会),你不用付任何钱。

更好的是?与其他每个声称"免费"的平台不同,Fly.io 将你的 Docker 容器作为真正的 VM 运行。这不是无服务器,你的应用不会在 5 分钟后休眠。你的容器保持 24/7 运行,即时响应请求。

我在 Fly.io 上运行了三个生产 API 超过一年。总成本?零美元。以下是具体操作方法。

你免费获得什么

那 5 美元的月度额度转化为严肃的基础设施:

你获得三个 256MB RAM 的 VM,可以在世界任何地方运行。添加一个 1GB 存储的 PostgreSQL 数据库。再加上 160GB 的出站带宽。所有这些都舒适地在你的免费额度内,还有富余空间。

数学很简单:单个 256MB VM 每月约 1.94 美元。三个加上一个小数据库大约 5 美元。只要你保持在这些限制内,Fly.io 的月度额度就覆盖了一切。

入门只需 5 分钟

首先,安装 Fly CLI。在 Mac 上,只需一个 brew 命令。在 Linux 上,curl 他们的安装脚本。Windows 用户获得 PowerShell。整个过程需要 30 秒。

# macOS
brew install flyctl

# Linux
curl -L https://fly.io/install.sh | sh

# Windows
pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"

只需用电子邮件注册——他们最终会要求信用卡,但你可以在没有信用卡的情况下部署你的第一个应用:

flyctl auth signup

你的第一次部署(简单得离谱)

这是 Fly.io 发光的地方。有 Dockerfile?很好,它会工作。没有?Fly.io 会自己搞定。我是认真的——它会检测你的框架并自动生成一切。

让我给你展示一个真实的例子。这是我上周部署的一个 Node.js API:

// index.js
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.json({
    message: '这个 API 免费 24/7 运行',
    timestamp: new Date().toISOString()
  });
});

app.get('/health', (req, res) => {
  res.json({ status: 'healthy' });
});

app.listen(port, '0.0.0.0', () => {
  console.log(`在端口 ${port} 上运行`);
});

要部署这个,我只是运行了:

flyctl launch

就这样。Fly 检测到 Node.js,创建了 Dockerfile,构建了镜像,并全球部署。整个过程大约 2 分钟。我的 API 在 *.fly.dev URL 上线,具有自动 HTTPS,从最近的数据中心响应请求。

没人提到的 Docker 优势

这是 Fly.io 与 Vercel、Netlify 等的区别:你正在部署实际的 Docker 容器。这意味着你可以运行任何东西——Python 脚本、Go 二进制文件、Rust 服务器、PHP 应用程序、Ruby on Rails,你能想到的。

我有一个处理 webhook 的 Python Flask API,一个运行计划任务的 Node.js 机器人,和一个处理图像调整大小的 Go 服务。都在免费层级上运行。试试在 Vercel 的业余计划上这样做。

你的容器作为 Firecracker 微 VM 运行,与 Amazon 用于 Lambda 的技术相同。它们在毫秒内启动,但像真正的服务器一样运行。没有冷启动,没有 10 秒超时,没有无服务器限制。只是你的代码完全按照你期望的方式运行。

让 256MB 工作(比你想象的容易)

免费层级给你每个 VM 256MB 的 RAM。我知道你在想什么——这太少了!但你会惊讶的。一个轻量级的 Express.js API 使用大约 50MB。一个带有几个端点的 Flask 应用大约 80MB。即使是一个小的 Rails 应用也可以在 200MB 内压缩,如果你小心的话。

以下是在 256MB 上运行良好的内容:

  • API 后端(REST 或 GraphQL)
  • Webhook 处理器
  • 计划作业运行器
  • 具有动态功能的静态网站
  • Discord/Slack 机器人
  • 使用 SQLite 的小型数据库

以下是不行的:

  • Next.js(至少需要 512MB)
  • 大型 Django 应用程序
  • Java Spring Boot 应用
  • 任何将大数据集加载到内存中的东西

如果你遇到内存限制,你有两个选择。首先,优化你的代码——流式传输文件而不是将它们加载到内存中,使用分页进行数据库查询,延迟加载依赖项。大多数"内存问题"只是低效的代码。

第二个选择:扩展到 512MB。这让你稍微超出免费层级,每月可能花费 2-3 美元。仍然比一杯咖啡便宜,而且更有用。

开箱即用的 PostgreSQL

添加数据库简单得愚蠢:

flyctl postgres create

出现提示时选择"Development"配置。这给你一个具有 256MB RAM 和 1GB 存储的 PostgreSQL 实例,非常适合小型应用。数据库与你的应用在同一区域运行,以实现最小延迟。

将其连接到你的应用:

flyctl postgres attach <database-name>

这会自动设置 DATABASE_URL 环境变量。你的应用可以立即连接:

const { Pool } = require('pg');
const pool = new Pool({
  connectionString: process.env.DATABASE_URL
});

// 就这样。你有了数据库。

我正在运行一个有 500+ 帖子的博客,一个有 1000+ 账户的用户系统,和一个跟踪 50k 事件的分析仪表板——都在免费层级数据库上。除非你正在构建下一个 Twitter,否则 1GB 足够了。

不用尝试就能全球化

用一个命令部署到多个区域:

flyctl regions add lhr  # 伦敦
flyctl regions add nrt  # 东京
flyctl regions add syd  # 悉尼

Fly.io 自动将用户路由到最近的实例。你的欧洲用户命中伦敦,亚洲用户命中东京,一切都正常工作。没有配置,没有 CDN 设置,什么都没有。

有了三个免费的 VM,你可以在每个区域放一个以获得真正的全球覆盖。或者将所有三个都保留在一个区域以获得冗余——如果一个崩溃,其他的继续服务请求。

注意事项(没有很多)

让我们对限制坦诚。5 美元的额度不会逐月滚动。用它或失去它。但老实说,24/7 运行三个小型 VM 反正会用完全部额度。

你最终需要添加信用卡来解锁某些功能,如自定义域名,并防止在超过限制时服务中断。但问题是——Fly.io 在收费之前会给你发邮件。不会有因为忘记关闭测试服务器而收到 500 美元账单的惊喜。

256MB RAM 限制是真实的。你不能只是把低效的代码扔给它并期待奇迹。但这个约束迫使你写更好的代码,这不是坏事。

何时使用 Fly.io vs 其他所有东西

当你想要永不休眠的真正服务器时使用 Fly.io。非常适合 API、webhook、机器人和任何需要即时响应的东西。Docker 支持意味着你可以运行任何语言或框架。

当你正在构建 Next.js 站点并想要完美的开发者体验时使用 Vercel。他们的预览部署是无与伦比的。

当你需要在 50+ 个位置运行零冷启动的边缘函数时使用 Cloudflare Workers。

当你想要更漂亮的 UI 并且不介意从第一天开始付费时使用 Railway。

但对于让真正的应用在线、免费、保持运行?Fly.io 每次都赢。

轮到你部署了

停止阅读并尝试它。认真的,只需要 5 分钟:

  1. 安装 CLI
  2. 创建一个简单的应用(或使用你已有的)
  3. 运行 flyctl launch
  4. 观看你的应用上线

就这样。没有复杂的配置,没有 yaml 地狱,没有账单惊喜。只是你的代码运行在真正的基础设施上。

构建一些东西来部署

准备好将你的第一个应用部署到 Fly.io 了吗?从使用这些实践教程构建一个真正的项目开始:

每个教程都包含 Docker 配置和部署步骤,使你可以轻松地将项目从开发带到 Fly.io 免费层级的生产环境。

已经有 Flask 应用了? 按照我们的 完整 Docker 和 Fly.io 部署教程,获取关于使用 PostgreSQL 容器化 Flask 应用程序并以零停机迁移部署到 Fly.io 的分步说明。


技术细节

平台: Fly.io 月度额度: 5 美元(覆盖 3 个 VM + 数据库) 部署: Docker 容器作为微 VM 区域: 全球 30+ 个 每个 VM 的 RAM: 256MB(可升级) 数据库: PostgreSQL 具有 1GB 存储 带宽: 每月包含 160GB

注意:在初始测试后你需要在文件上添加信用卡,但如果你保持在每月 5 美元的使用量以下,不会被收费。

Fred

Fred

AUTHOR

Full-stack developer with 10+ years building production applications. I've deployed applications to every major cloud platform and lived to tell the tale.

Need a developer who gets it?

POC builds, vibe-coded fixes, and real engineering. Let's talk.

Hire Me →