分享 在 Fly.io 部署 Rails 应用

Rei · 2022年02月07日 · 最后由 forecho 回复于 2022年08月19日 · 2089 次阅读

最近我把 GeekNote 迁移到了 fly.io,很好很满意,我觉得这个平台值得推荐,所以写了一篇博客。篇幅比较长就不全文转载了,有需要的点以下链接:

在 Fly.io 部署 Rails 应用 https://geeknote.net/Rei/posts/387

这里介绍一下 Fly.io,简单来说它是一个更好更便宜的 Heroku:

  • 基于容器部署
  • 命令行管理
  • 提供多个部署区域,包括香港
  • 提供数据持久化的卷
  • 提供私有网络(Heroku 企业版内容)
  • 价格合理,比 Heroku 低

我用来下觉得很接近我理想中的部署平台。

另外这家公司比较小,技术问题都是在他们论坛解决(https://community.fly.io/)。用的时候可能会发现一些问题,但也可以看着他们成长。

如果你在寻找基于容器的部署平台,那么 Fly.io 值得一试。

附两则趣闻:

1) Phoenix 框架的创建者 Chris McCord 现在在 Fly.io 工作,博客说如果 2013 年 37signals 招了他做员工可能就不会开发 Phoenix 了 https://fly.io/blog/how-we-got-to-liveview/ 。目前 Fly.io 的文档和社区有不少内容是关于 Phoenix 的。

2) Fly.io 的 API 是基于 Rails 开发的 😏

确实可以节省成本 打算下一个应用试试部署到 flyio

hooopo 回复

我本来也想着下一个,就拿现有项目试试,试着试着就迁移了。😂

小公司做 paas 还是挑战性挺大的。

pynix 回复

小公司更注重开发者客户的体验,heroku 万年不开放其他区域,重心都放在企业客户,我盼望搅局者盼很久了。

他们家网站的插画,真是喜欢

Rei 回复

企业客户才有支付能力

pynix 回复

如果“只”关心企业用户看他怎么发展吧。

Rei 回复

很久没用 heroku,之前用的时候觉得文档做得特别好。

pynix 回复

如果几年没用了,那么现在再用体验还是跟几年前一样。因为新的东西都放在企业版里面,价格要问销售。

Rei 回复

我上去试试。😄

一年多少钱啊?

Rei 回复

怪不得我还会用 heroku。

容器部署 + hk 区 0.04 USD / GB 瞬间闻到了航空站的味道

带宽再便宜点就好了

ericzhu 回复

文件储存还得另找服务 S3 之类,网站本身的流量费不多吧。


不过因为有卷,本地储存也不是不行……

nuanshuidai 回复

可以对照下价格表。

https://fly.io/docs/about/pricing/

GeekNote 现在开了一个 shared-cpu-1x 1G 的做 web,512M 的做 worker,一个月共 8.5 刀。postgres 和 redis 服务器在免费额度内。

Rei 回复

对于图片类应用,好像不怎么友好。

国内访问速度怎么样?

zhongsheng 回复

简单测了下延迟 110ms 左右,理想状况到香港应该是 30ms 左右。好像是路由到日本去了,有不少优化空间。


用 chinaz 测了一下。

fly.io 最快 54ms 最慢 353ms 平均 123.9ms
某云 最快 7ms 最慢 254ms 平均 70.7ms

后台多个服务能在一台服务器上跑吗?

w7938940 回复

可以,它实际使用 vm 跑而不是 docker。

Heroku 最好的就是支持免费,但速度就很一般般啦

wdrsam 回复

Heroku 的免费档会停机,fly.io 的免费是不用停机的。

Rei 回复

流量比较大的话,还是有点贵,月流量 1TB(hk 来算)就超过 260 多每月了,算下来买包带宽的云服务器就便宜不少

ericzhu 回复

大流量文件不是应该放类 S3 的对象储存和 CDN 吗?动态请求很少会到 5T 吧?

而且我查了下 aliyun 的流量计费是 CNY 1 / GB,这高于 fly.io 的 $0.04 /GB。

https://help.aliyun.com/document_detail/72142.html

ericzhu 回复

每天带宽峰值时段的分布不一样的,高峰可能是低谷的几倍,如果需要以 T 为流量单位的话估计 2M 不够用。

我不喜欢带宽计费因为开小了满足不了峰值,开大了又浪费。

Rei 回复

阿里云 腾讯云 ucloud 第一次注册的时候价格折扣都比较大,而且一般可以一次买三年,我之前在腾讯云以不到 1000 的价格买到了 5m 带宽 2 核 4gb 的服务器(3 年)。对老用户,活动价每年 3000 也可以买到 10mb 左右带宽差不多配置的服务器。另外海外服务器还有 vultr digitalocean 这类价格杀手,20 美金每月,2 CPU/4 GB/3 TB 带宽。所以比较下来 Fly.io 带宽还是太贵了,他这个价格策略只能吸引撸羊毛的小流量程序。

ericzhu 回复

我觉得这些首年折扣的才适合撸羊毛,因为我不只维护一个项目并且打算长期维护……不过怎样都好,价格列出来了可以根据自己需求判断。

价格不是唯一因素,单独举 heroku 的例子是因为它太贵。

Rei 回复

那倒是的,Fly 这类产品还是挺方便的,除了带宽以外其他价格也不错

Rei 回复

撸首年折扣的羊毛,就是适合喜欢折腾的😂 几家云服务商来回换最省钱了

填了信用卡会有 1usd 的扣款。半个肯德基猪柳早餐没了😂 。准备试一下托管自己的一些小东西上去。

launch 以后直接告诉我

Error Your account has been marked as high risk. Please contact [email protected] to verify your account. https://fly.io/organizations/personal

😫

看了下社区,说只能联系 support 邮箱。郁闷啊。。。。!

立马回复了,因为开了代理注册的原因,神速回复~!我的代理是自己买的 vps 搞的,没别人用。是通过 IP 网段来标记的么,额。

注册的小伙伴别开代理噢

Catherine 回复

信用卡验证一般是预扣一刀成功之后再取消,可以等下个账单日看是否实际扣款。

我注册也是因为代理被标记高风险,邮件联系之后解除了。

我看 Fly.io 出了部署 Rails 应用的步骤——《Build, Deploy and Run a Rails Application》 https://fly.io/docs/getting-started/rails/

xiaogui 回复

官方文档是基于 buildpack 的,并且没有说明怎么连接数据库,离真实情况还有一段距离。

Rei 回复

发现了 😅

另 GeekNote 是下面这么用的吗?

shared-cpu-1x 1G -> web

512M -> worker

免费 512M -> postgres

免费 256M -> redis

xiaogui 回复

PG 也是 256 M 的,其他跟你说的一致。

Rei 回复

好嘞,准备先跑个 demo 试试 😀

Rei 回复

原本 web 的 fly.toml 是这样

[experimental]
  allowed_public_ports = []
  auto_rollback = true

[[services]]
  http_checks = []
  internal_port = 8080
  processes = ["app"]
  protocol = "tcp"
  script_checks = []

  [services.concurrency]
    hard_limit = 25
    soft_limit = 20
    type = "connections"

  [[services.ports]]
    handlers = ["http"]
    port = 80

  [[services.ports]]
    handlers = ["tls", "http"]
    port = 443

  [[services.tcp_checks]]
    grace_period = "1s"
    interval = "15s"
    restart_limit = 0
    timeout = "2s"

我看文中提到 fly/web.toml 需要修改一些内容,有 2 点疑问:

1、[experimental] 是直接添加 cmd = ["bin/rails", "server"],还是删除其他内容,再添加 cmd = ["bin/rails", "server"]?

2、[[services]] 是否只修改 internal_port 为 3000,还是需要删除其他内容?

xiaogui 回复
  1. 只添加
  2. 只修改

保留原来的内容。

Rei 回复

好嘞,部署成功了。 😄

我发现类似的服务还有 Railway

数据库的话可以用 Supabase

需要 登录 后方可回复, 如果你还没有账号请 注册新账号