Fly.io - Heroku免費方案的繼任者?

由於heroku在2022年的11月將取消免費方案了,目前最多人推薦的替代方案之一就是fly.io,今天就來試試看fly.io的效果如何

Price

有提供一定限度的免費方案,最多只能同時佈署兩個app,如果有綁信用卡的話可以多獲得一台VM及更多的Volume

如果需要性能更好的機器不一定要改成價格非常昂貴的pro plan,也可以使用加價購的方式來取得更好的機器或是更大的儲存空間

Features

Turboku

有提供服務能直接從heroku遷移到fly.io,但因為沒有直接綁定Github/ Gitlab的repo所以會比在heroku上時還難更新app,如果是比較常更新或是有source code的app建議乾脆直接重新deploy

Code Server

可以快速deploy一個開發環境且幫你做好特定語言需要的設定,但是code server最少需要使用到1GB的ram,所以免費版就和他無緣了

Flyctl

fly.io專為佈署而設計的cli工具,macOS和Linux可以直接用shell script安裝

curl -L https://fly.io/install.sh | sh

裝好後還要先登入才能執行其他指令

flyctl auth login

底下是一些與部署app相關的實用指令:

  • flyctl deploy讓你部署設定好的專案
  • flyctl status可以查看app的狀態
  • flyctl ips list可以check app使用的IP
  • flyctl open可以直接打開app的網頁

Deployments

Flask as an Example

範例code

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
  return 'server started.'
  
if __name__ == '__main__':
  app.run()

requirements.txt

列出所需套件

Flask==1.1.1
flask_cors==3.0.8
flask_uploads==0.2.1
gunicorn==19.6.0

Procfile

用來啟動web server

web: gunicorn <py檔名>:app

fly.toml (fly.io的設定檔)

flyctl launch來產生fly.toml

Deploy app

前面都準備好就可以直接deploy

flyctl deploy

Dockerfile

如果想要部署的app不在支援清單內,可以先寫好Dockerfile讓fly.io能直接build成對應的image來部署

Summary

fly.io確實已經能達到多數heroku提供的功能了,少數像透過按鈕一鍵部署等仍然缺乏,但在付費方案上比heroku彈性且同價位帶的機器性能更好

此外fly.io是能夠取得Persistent Storage Volumes,這樣有助於data的保存,不會像heroku的機器只要一重啟後資料就會消失

Reference

Build, Deploy And Run A Python Application

Deploy app servers close to your users · Fly

Plan Pricing · Fly