Zero to Production: FastAPI pada Fly.io dan GitHub Actions
Anda melakukan push kod ke main. Ujian dijalankan. API anda akan aktif dalam beberapa minit kemudian.
Inilah cara anda membina saluran paip (pipeline) deployment yang profesional. Anda tidak memerlukan pangkalan data atau Redis untuk tetapan ini. Anda hanya memerlukan satu aplikasi FastAPI, satu imej Docker, satu konfigurasi YAML, dan satu aliran kerja (workflow) GitHub Actions.
Aliran kerja adalah seperti berikut:
git push → GitHub Actions → jalankan ujian → bina imej → deploy ke Fly.io → aktif
Terdapat tiga bahagian dalam sistem ini:
- Aplikasi FastAPI anda. Anda membungkusnya dalam imej Docker supaya ia berjalan dengan cara yang sama di mana-mana sahaja.
- Fly.io. Ia menjalankan imej anda pada mesin kecil. Ia mengendalikan penghalaan (routing) dan pemeriksaan kesihatan (health checks) untuk anda.
- GitHub Actions. Ia memantau kod anda dan melakukan deployment secara automatik pada setiap
push.
Untuk menjadikannya selamat, gunakan token deployment yang terhad (scoped deploy token). Jangan gunakan token API Fly peribadi anda. Cipta token yang hanya mempunyai kebenaran untuk menyentuh satu aplikasi khusus sahaja. Simpan token ini dalam GitHub Secrets sebagai FLY_API_TOKEN.
Butiran teknikal utama untuk tetapan anda:
- Gunakan Dockerfile dengan pengguna bukan-root (non-root user). Ini meningkatkan keselamatan.
- Ikat (bind) aplikasi anda ke
0.0.0.0dalam Dockerfile anda. Jika anda menggunakan127.0.0.1, Fly tidak dapat mencapai aplikasi anda. - Gunakan fail
fly.yaml. Fail ini adalah sumber kebenaran (source of truth) anda. Ia menentukan rantau (region), memori, dan port anda. - Tetapkan titik akhir (endpoint) pemeriksaan kesihatan dalam FastAPI. Fly menggunakan ini untuk memastikan aplikasi anda sedang berjalan sebelum ia menghantar trafik kepadanya. Ini membolehkan deployment tanpa gangguan (zero-downtime).
Dalam aliran kerja GitHub Actions anda, gunakan arahan "needs: test". Ini memastikan aplikasi anda hanya dideploy jika ujian anda lulus. Jika kod anda rosak, saluran paip akan berhenti sebelum sampai ke produksi.
Tetapan ini berkembang bersama anda. Anda boleh menambah persekitaran staging dan produksi dengan menggunakan fail konfigurasi yang berbeza seperti fly.stg.yaml dan fly.prod.yaml.
Berhenti melakukan deployment secara manual. Beralih daripada "berjalan di komputer riba saya" kepada "dihantar pada setiap penggabungan (merge)."
Sumber: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo
