我在 Fly.io 上运行 5 个 Elixir 应用,每月不到 50 欧元——以下是细目
I’m happy to translate the article for you, but I’ll need the full text you’d like translated. Could you please paste the content (or the portion you want translated) here? I’ll keep the source link exactly as you provided and preserve all formatting, markdown, and technical terms.
产品
这些是我在葡萄牙的个人软件公司 AIFirst 运营的应用程序:
- SondMe – 调查平台(Phoenix + LiveView)
- Countermark – 无验证码的机器人检测
- OpenClawCloud – 为 AI 代理提供的托管托管服务
- Vertate – 验证平台
- Agent‑Inbox – AI 代理通信界面
所有应用共享相同的技术栈:Elixir、Phoenix、LiveView、PostgreSQL。
为什么选择 Fly.io
按实际运行付费
Fly 按每台机器、每秒的运行时间计费——没有“实例小时”的冗余。
自动停止是游戏规则改变者
[http_service]
auto_stop_machines = true
auto_start_machines = true
min_machines_running = 0
低流量的应用在空闲时会进入休眠,并在首次请求时唤醒(Phoenix 应用约 2 秒的冷启动)。预发布环境几乎不产生费用。
Elixir 是一等公民
Fly 提供官方的 Elixir 支持。fly launch 能检测到 Phoenix,生成可用的 Dockerfile,并处理发布。诸如 dns_cluster 等用于分布式 Erlang 的库开箱即用。
多区域部署,无需重新架构
从单一区域开始(对我而言是阿姆斯特丹,最靠近葡萄牙)。以后需要美国覆盖?只需一条 fly scale 命令即可添加区域——无需重新设计基础设施。
一个典型的 fly.toml
app = "my-app"
primary_region = "ams"
[build]
[env]
PHX_HOST = "my-app.fly.dev"
PORT = "8080"
[http_service]
internal_port = 8080
force_https = true
auto_stop_machines = true
auto_start_machines = true
min_machines_running = 1
[[vm]]
size = "shared-cpu-1x"
memory = "256mb"
关键决策
- 256 MB RAM – Phoenix 在使用 LiveView、PubSub 和 Oban 时运行舒适。
- shared‑cpu‑1x – 便宜且足以满足早期阶段的 Web 工作负载。
- min_machines_running = 1 用于生产环境,0 用于预发布环境。
成本细目
| 项目 | 数量 | 月费用 |
|---|---|---|
| shared‑cpu‑1x machines (256 MB) | 8 | ~€32 |
| Fly Postgres (single node) | 3 clusters | ~€10 |
| 带宽 | — | 免费层 |
| SSL 证书 | — | 免费(自动) |
| 总计 | ~€42 |
一些应用共享同一个 Postgres 集群。将原本分散的数据库合并后,三个集群即可轻松支撑所有五个应用。
对比
- Heroku: 5 个应用 × $7 Eco dyno = $35,加上数据库 = $50+ —— Eco dyno 会不可预测地休眠。
- Railway: 计算费用相似,但 Elixir 支持不够成熟。
- AWS ECS: 最低可行配置在加入负载均衡器、NAT 网关和 CloudWatch 后,轻松超过 $80+/月。
什么让 Elixir 在这里如此特别
- 内存效率 – 一个使用 LiveView、后台任务和实时 PubSub 的 Phoenix 应用仅占用 256 MB。相比之下,等效的 Node.js/Express + Socket.io + Bull 组合需要 512 MB 以上。
- 并发性 – 每个请求在轻量级的 BEAM 进程中运行(约 2 KB)。成千上万的并发 WebSocket 连接可以在单台 256 MB 的机器上运行。
- 弹性 – OTP 监督树在毫秒级别内重启崩溃的进程,省去了健康检查轮询或容器重启的需求。
经验教训
- 提前共享数据库 – 将数据库整合到共享集群中,使数据库成本降低超过一半。
- 从第一天起使用自动停止 – 对于每日活跃用户少于 100 的应用,没有理由让机器整夜保持运行。
- 搭建内部网络 – Fly 的免费 WireGuard 网络让服务之间可以私密通信,降低延迟和认证开销。
- 监控内存而非 CPU – 对于 BEAM 应用,内存是限制因素。当使用量超过约 200 MB(在 256 MB 配额中)时发出警报,以便了解何时需要升级。
独立创始人的优势
真正的收益不是那张 €42 的账单,而是灵活性。启动一个新应用大约需要每月 €8,若想法失败,fly apps destroy 能立即把费用降到零。没有最低基础设施投入,没有长期云服务承诺,也没有那种无论运行一个应用还是十个应用都花费相同的重量级 Kubernetes 集群。
Elixir + Fly.io 让基础设施成本线性扩展——向上扩展和向下收缩同样轻松。对于零融资、独自启动多个产品的创始人来说,这就是全部需求。