Dari Nol ke Produksi: FastAPI di Fly.io dan GitHub Actions
Anda melakukan push kode ke main. Pengujian dijalankan. API Anda aktif beberapa menit kemudian.
Inilah cara Anda membangun pipeline deployment profesional. Anda tidak memerlukan database atau Redis untuk pengaturan ini. Anda hanya membutuhkan satu aplikasi FastAPI, satu Docker image, satu konfigurasi YAML, dan satu workflow GitHub Actions.
Workflow-nya terlihat seperti ini: git push → GitHub Actions → jalankan pengujian → build image → deploy ke Fly.io → live
Ada tiga bagian dalam sistem ini:
- Aplikasi FastAPI Anda. Anda mengemasnya dalam Docker image agar dapat berjalan dengan cara yang sama di mana saja.
- Fly.io. Ia menjalankan image Anda pada mesin-mesin kecil. Ia menangani routing dan health check untuk Anda.
- GitHub Actions. Ia memantau kode Anda dan melakukan deploy secara otomatis pada setiap push.
Agar aman, gunakan scoped deploy token. Jangan gunakan token Fly API pribadi Anda. Buatlah token yang hanya memiliki izin untuk mengakses satu aplikasi spesifik. Simpan token ini di GitHub Secrets sebagai FLY_API_TOKEN.
Detail teknis utama untuk pengaturan Anda:
- Gunakan Dockerfile dengan user non-root. Ini meningkatkan keamanan.
- Bind aplikasi Anda ke 0.0.0.0 di Dockerfile Anda. Jika Anda menggunakan 127.0.0.1, Fly tidak dapat menjangkau aplikasi Anda.
- Gunakan file fly.yaml. File ini adalah source of truth Anda. Ia menentukan region, memori, dan port Anda.
- Siapkan endpoint health check di FastAPI. Fly menggunakan ini untuk memastikan aplikasi Anda berjalan sebelum mengirimkan trafik ke sana. Ini memungkinkan deployment tanpa downtime (zero-downtime).
Dalam workflow GitHub Actions Anda, gunakan perintah "needs: test". Ini memastikan aplikasi Anda hanya di-deploy jika pengujian berhasil. Jika kode Anda rusak, pipeline akan berhenti sebelum mencapai tahap produksi.
Pengaturan ini dapat berkembang seiring kebutuhan Anda. Anda dapat menambahkan lingkungan staging dan produksi dengan menggunakan file konfigurasi yang berbeda seperti fly.stg.yaml dan fly.prod.yaml.
Berhentilah melakukan deploy secara manual. Beralihlah dari "berjalan di laptop saya" ke "siap dikirim pada setiap merge."
Sumber: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo
