分享 在 Fly.io 部署 Rails 应用

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

最近我把 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

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