Deply Project to fly Replace Heroku
Heroku 將在 11/28, 2022 中止免費方案.

替代方案
更詳細的內容請參考: https://dev.to/meshvpatel18/top-heroku-alternatives-for-free-46g1
- Netlify - Host serverless apps
- Cloudflare - Best for Static Site.
- Cyclic - Deploy full stack Node JS apps in seconds.
- Deta – The Cloud for Developers
- Firebase - Fast and secure web hosting
- Railway - Made for any language.
- Render - The fastest
- Devtron
- Fly - Run your full stack apps all over the world.
- Fathym - Develop and deploy micro frontends in a headless, open world.
- Back4app - Low-code backend to build modern apps
- Dom Cloud - Classic Web Hosting Made Easy
- Adaptable - The easiest way to deploy your FullStack App
- Microtica
- Coherence - The First Developer Experience Platform
原先在 Heroku 上架了 Line Bot, 使用上面的free PostgreSQL 跟 Redis. fly 剛好符合目前想要的使用情境, 所以這篇文章紀錄一下 如何使用~
fly 免費方案的RAM約250MB, 想比Heroku的 500 MB 小了很多, 但 fly 不像 Heroku 會30分鐘沒使用就讓你的 server 停機
Install Flyctl
MAC
brew install flyctl
其他的 OS安裝方式可以參考 : https://fly.io/docs/hands-on/install-flyctl/
Singup and Login
首先要先註冊再來是登入, 指令如下
flyctl auth signup
flyctl auth login
Launch and Deploy
Launch
可以直接到你的project下 執行 flyctl launch
此時就他會詢問一些問題, 像是你的app name , 跟 server 要放在哪個國家區域等
Creating app in /Users/kimi/Desktop/kimi
Scanning source code
Could not find a Dockerfile, nor detect a runtime or framework from source code. Continuing with a blank app.
? App Name (leave blank to use an auto-generated name):
Automatically selected personal organization: xxxx
? Select region: [Use arrows to move, type to filter]
hkg (Hong Kong, Hong Kong)
iad (Ashburn, Virginia (US))
lax (Los Angeles, California (US))
lhr (London, United Kingdom)
maa (Chennai (Madras), India)
mad (Madrid, Spain)
mia (Miami, Florida (US))
> nrt (Tokyo, Japan)
ord (Chicago, Illinois (US))
scl (Santiago, Chile)
sea (Seattle, Washington (US))
sin (Singapore)
sjc (San Jose, California (US))
syd (Sydney, Australia)
yul (Montreal, Canada)
最後會自動產生出fly.toml 跟 Dockerfile. 這邊是我的Django
ARG PYTHON_VERSION=3.7
FROM python:${PYTHON_VERSION}
RUN apt-get update && apt-get install -y \
python3-pip \
python3-venv \
python3-dev \
python3-setuptools \
python3-wheel
RUN mkdir -p /app
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
RUN python manage.py makemigrations
RUN python manage.py collectstatic --noinput
EXPOSE 8000
# replace APP_NAME with module name
CMD ["gunicorn", "--bind", ":8000", "--workers", "2", "gogopowerkimibot.wsgi"]
Deploy
flyctl deploy , 就可以在 fly的 dashboard 看到程式碼正在部署了~
如果有程式異動, 也可以直接打此指令
Create Postgre
跟上一步建立flyctl launch 差不多.
執行此指令flyctl postgres create, 最後他產生出一組連線資訊跟密碼.
記得要把它存起來, 要不然之後沒地方可以查到這些資訊
Create Redis
執行此指令flyctl redis create
記得要把它存起來, 要不然之後沒地方可以查到這些資訊
https://fly.io/docs/reference/redis/
其他指令:
flyctl redis list
flyctl redis status gogopowerkimi-redis
fly redis connect
fly redis delete {ID}
Secrets
當 Postgre 跟 Redis 都建立好時, 你可以把連線資訊或者你的環境變數寫入 .env 檔.
藉由 flyctl secrets import 去匯入
ex:
flyctl secrets import < .env.flyio
Fly Status
flyctl ssh console : 可以 ssh 進去
fly status --all : 看目前此 project 狀態
最後可以在你的 Dashborad上看到

Github Action
https://fly.io/docs/app-guides/continuous-deployment-with-github-actions/
1. 建立 Fly API Token
flyctl auth token 產生出一組 token, 並把它寫到你的 repositiry > settings > Secrets > Actions 取名為 FLY_API_TOKEN
如下圖

2. 建立 yml 檔
最後可以使用 Github Action, 當push時, 自動 deploy
在你的目錄 .github/workflows 資料夾下建立一個yml檔
# https://fly.io/docs/app-guides/continuous-deployment-with-github-actions/
name: Fly Deploy
on:
workflow_dispatch:
push:
branches:
- flyio
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
jobs:
deploy:
name: Deploy app
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: superfly/flyctl-actions/setup-flyctl@master
- run: flyctl deploy
之後只要push到 flyio branch 就會自動跑 action了
