介紹
最近因為有些專案需要有 local Volume,但在 Serverless 上要用偏麻煩,除機器上的本身功能以外,還需要另外開 VM 讓 Container 能夠 mount volume,因此需要類似 Heroku、Fly.io 這類的 SaaS 的服務,可以用很少量的費用去使用到 Database/Volume 的功能…
過往使用 Heroku 經驗也是會睡眠之後把記憶體(SQLite)內容清乾淨,因此上一篇「在 Fly.io 上架設 Uptime Kuma 監控 Side Project」時策之後發現不會被清掉,因此就延續這邊來介紹使用
背景
有用過 Heroku, Google Cloud, Amazon…+本篇 Fly.io,在一體式與分離式的雲服務基本上都用過
- 像是 Heroku & Fly.io 就可以一包 code 直接上,連 Database/NoSQL 都可以直接弄
- GCP/AWS 則是可以獨立操作想要的功能,需要時在整合,比較乾淨也不會一次佈署搞的霧煞煞
那基本上就是依需求為主,個別有好處也有各自的 config 需要讀寫,但反正概念上都差不多,先學一套剩下的都好處理 💪
操作步驟
1 | brew install flyctl |
如果你已經有帳號的話
1 | fly auth login |
第一次還沒有 config 可以使用以下指令,透過 UI 的方式幫忙建立 Fly config
1 | fly launch |
畫面上的東西確認後,會在專案下看到 fly.io 幫你建立的 fly.toml,範例如下:
1 | # fly.toml app configuration file generated for SERVICE_NAME on 2024-04-03T23:36:13+08:00 |
第二次之後需要部屬:
1 | fly deploy |
Example
1 | ... |
如果 RAM 第一次部屬開太大怎麼辦?
參閱文件:https://fly.io/docs/apps/scale-machine/#add-ram
1 | fly scale memory 512 |
我換電腦沒有當初的 fly.toml 檔案怎辦?
只要電腦現在終端機有透過 fly auth sign
登入,接下來只要把專案 clone 下來,確定 fly.toml
裡面的 app 後面的名字一樣,進到終端機就可以 fly status
看看機器狀態囉!
flask deploy 有問題,一直 port confuse
如果是依靠 gunicorn 部屬的讀者,以下應該會在 Dockerfile 裡面寫上這一段:
1 | CMD ["gunicorn", "api:app", "--log-file=-"] |
然而這個啟動方式不論在 app.py 或是 Dockerfile 上寫了 EXPOSE port 為其他的,皆會預設 127.0.0.1:8000
,這個舉動會讓 fly.io 感到困惑(confuse),因為 fly.io 只聽 0.0.0.0
,至於 port 應該是不影響,只是在 log 裡面一直看到 port confuse 覺得很奇怪
其中只要把 Dockerfile 裡面的 CMD 改成以下的就可以上去了,記得自己的 app.py 要改 port 喔!
1 | CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] |
結論
Fly.io 這邊還有很多功能可以使用,但大多都需要透過 command line 來操作,是一個比較開發者導向的 SaaS 的服務,但指令滿直觀的,或許都可以參考使用看看喔!