最近我把 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
大流量文件不是应该放类 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,还是需要删除其他内容?