最近我把 GeekNote 迁移到了 fly.io,很好很满意,我觉得这个平台值得推荐,所以写了一篇博客。篇幅比较长就不全文转载了,有需要的点以下链接:
在 Fly.io 部署 Rails 应用 https://geeknote.net/Rei/posts/387
这里介绍一下 Fly.io,简单来说它是一个更好更便宜的 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 开发的 😏
可以对照下价格表。
https://fly.io/docs/about/pricing/
GeekNote 现在开了一个 shared-cpu-1x 1G 的做 web,512M 的做 worker,一个月共 8.5 刀。postgres 和 redis 服务器在免费额度内。
简单测了下延迟 110ms 左右,理想状况到香港应该是 30ms 左右。好像是路由到日本去了,有不少优化空间。
用 chinaz 测了一下。
fly.io 最快 54ms 最慢 353ms 平均 123.9ms
某云 最快 7ms 最慢 254ms 平均 70.7ms
流量比较大的话,还是有点贵,月流量 1TB(hk 来算)就超过 260 多每月了,算下来买包带宽的云服务器就便宜不少
大流量文件不是应该放类 S3 的对象储存和 CDN 吗?动态请求很少会到 5T 吧?
而且我查了下 aliyun 的流量计费是 CNY 1 / GB,这高于 fly.io 的 $0.04 /GB。
每天带宽峰值时段的分布不一样的,高峰可能是低谷的几倍,如果需要以 T 为流量单位的话估计 2M 不够用。
我不喜欢带宽计费因为开小了满足不了峰值,开大了又浪费。
阿里云 腾讯云 ucloud 第一次注册的时候价格折扣都比较大,而且一般可以一次买三年,我之前在腾讯云以不到 1000 的价格买到了 5m 带宽 2 核 4gb 的服务器(3 年)。对老用户,活动价每年 3000 也可以买到 10mb 左右带宽差不多配置的服务器。另外海外服务器还有 vultr digitalocean 这类价格杀手,20 美金每月,2 CPU/4 GB/3 TB 带宽。所以比较下来 Fly.io 带宽还是太贵了,他这个价格策略只能吸引撸羊毛的小流量程序。
我觉得这些首年折扣的才适合撸羊毛,因为我不只维护一个项目并且打算长期维护……不过怎样都好,价格列出来了可以根据自己需求判断。
价格不是唯一因素,单独举 heroku 的例子是因为它太贵。
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 网段来标记的么,额。
注册的小伙伴别开代理噢
信用卡验证一般是预扣一刀成功之后再取消,可以等下个账单日看是否实际扣款。
我注册也是因为代理被标记高风险,邮件联系之后解除了。
我看 Fly.io 出了部署 Rails 应用的步骤——《Build, Deploy and Run a Rails Application》 https://fly.io/docs/getting-started/rails/
发现了
另 GeekNote 是下面这么用的吗?
shared-cpu-1x 1G -> web
512M -> worker
免费 512M -> postgres
免费 256M -> redis
原本 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,还是需要删除其他内容?