സീറോ ടു പ്രൊഡക്ഷൻ: Fly.io-യിലും GitHub Actions-ലും FastAPI
നിങ്ങൾ കോഡ് main-ലേക്ക് പുഷ് ചെയ്യുന്നു. ടെസ്റ്റുകൾ റൺ ആകുന്നു. ഏതാനും മിനിറ്റുകൾക്കുള്ളിൽ നിങ്ങളുടെ API ലൈവ് ആകുന്നു.
ഒരു പ്രൊഫഷണൽ ഡിപ്ലോയ്മെന്റ് പൈപ്പ്ലൈൻ നിർമ്മിക്കുന്നത് ഇങ്ങനെയണ്. ഈ സെറ്റപ്പിലേക്ക് നിങ്ങൾക്ക് ഒരു ഡാറ്റാബേസോ Redis-ഓ ആവശ്യമില്ല. ഒരു FastAPI ആപ്പ്, ഒരു Docker ഇമേജ്, ഒരു YAML കോൺഫിഗറേഷൻ, ഒരു GitHub Actions വർക്ക്ഫ്ലോ എന്നിവ മാത്രം മതിയാകും.
വർക്ക്ഫ്ലോ ഇപ്രകാരമാണ്: git push → GitHub Actions → run tests → build image → deploy to Fly.io → live
ഈ സിസ്റ്റത്തിന് മൂന്ന് ഭാഗങ്ങളുണ്ട്:
- നിങ്ങളുടെ FastAPI ആപ്പ്. എല്ലായിടത്തും ഒരേപോലെ പ്രവർത്തിക്കുന്നതിനായി നിങ്ങൾ ഇതിനെ ഒരു Docker ഇമേജിൽ പാക്കേജ് ചെയ്യുന്നു.
- Fly.io. ഇത് ചെറിയ മെഷീനുകളിൽ നിങ്ങളുടെ ഇമേജ് പ്രവർത്തിപ്പിക്കുന്നു. ഇത് റൂട്ടിംഗും ഹെൽത്ത് ചെക്കുകളും (health checks) നിങ്ങൾക്കായി കൈകാര്യം ചെയ്യുന്നു.
- GitHub Actions. ഇത് നിങ്ങളുടെ കോഡ് നിരീക്ഷിക്കുകയും ഓരോ പുഷിനും (push) സ്വയമേവ ഡിപ്ലോയ് ചെയ്യുകയും ചെയ്യുന്നു.
ഇത് സുരക്ഷിതമാക്കാൻ, ഒരു സ്കോപ്പ്ഡ് ഡിപ്ലോയ് ടോക്കൺ (scoped deploy token) ഉപയോഗിക്കുക. നിങ്ങളുടെ പേഴ്സണൽ Fly API ടോക്കൺ ഉപയോഗിക്കരുത്. ഒരു പ്രത്യേക ആപ്പിൽ മാത്രം പ്രവർത്തിക്കാൻ അനുമതിയുള്ള ഒരു ടോക്കൺ നിർമ്മിക്കുക. ഈ ടോക്കൺ GitHub Secrets-ൽ FLY_API_TOKEN ആയി സേവ് ചെയ്യുക.
നിങ്ങളുടെ സെറ്റപ്പിനായുള്ള പ്രധാന സാങ്കേതിക വിവരങ്ങൾ:
- ഒരു non-root യൂസർ ഉള്ള Dockerfile ഉപയോഗിക്കുക. ഇത് സുരക്ഷ വർദ്ധിപ്പിക്കുന്നു.
- നിങ്ങളുടെ Dockerfile-ൽ ആപ്പിനെ 0.0.0.0-ലേക്ക് ബൈൻഡ് ചെയ്യുക. നിങ്ങൾ 127.0.0.1 ആണ് ഉപയോഗിക്കുന്നതെങ്കിൽ, Fly-ക്ക് നിങ്ങളുടെ ആപ്പിലേക്ക് എത്താൻ കഴിയില്ല.
- ഒരു fly.yaml ഫയൽ ഉപയോഗിക്കുക. ഈ ഫയലാണ് നിങ്ങളുടെ സോഴ്സ് ഓഫ് ട്രൂത്ത് (source of truth). ഇത് നിങ്ങളുടെ റീജിയൻ, മെമ്മറി, പോർട്ട് എന്നിവ നിർവചിക്കുന്നു.
- FastAPI-യിൽ ഒരു ഹെൽത്ത് ചെക്ക് എൻഡ്പോയിന്റ് (health check endpoint) സെറ്റ് ചെയ്യുക. ട്രാഫിക് അയക്കുന്നതിന് മുമ്പ് നിങ്ങളുടെ ആപ്പ് പ്രവർത്തിക്കുന്നുണ്ടെന്ന് ഉറപ്പാക്കാൻ Fly ഇത് ഉപയോഗിക്കുന്നു. ഇത് സീറോ-ഡൗൺടൈം ഡിപ്ലോയ്മെന്റുകൾ (zero-downtime deployments) സാധ്യമാക്കുന്നു.
നിങ്ങളുടെ GitHub Actions വർക്ക്ഫ്ലോയിൽ "needs: test" കമാൻഡ് ഉപയോഗിക്കുക. ടെസ്റ്റുകൾ വിജയിച്ചാൽ മാത്രമേ നിങ്ങളുടെ ആപ്പ് ഡിപ്ലോയ് ചെയ്യപ്പെടുന്നുള്ളൂ എന്ന് ഇത് ഉറപ്പാക്കുന്നു. കോഡിൽ പിശകുകൾ ഉണ്ടെങ്കിൽ, പൈപ്പ്ലൈൻ പ്രൊഡക്ഷനിൽ എത്തുന്നതിന് മുമ്പ് തന്നെ നിൽക്കും.
ഈ സെറ്റപ്പ് നിങ്ങളുടെ ആവശ്യത്തിനനുസരിച്ച് വികസിപ്പിക്കാം (scales). fly.stg.yaml, fly.prod.yaml തുടങ്ങിയ വ്യത്യസ്ത കോൺഫിഗറേഷൻ ഫയലുകൾ ഉപയോഗിച്ച് നിങ്ങൾക്ക് സ്റ്റേജിംഗ് (staging), പ്രൊഡക്ഷൻ (production) എൻവയോൺമെന്റുകൾ ചേർക്കാം.
മാനുവലായി ഡിപ്ലോയ് ചെയ്യുന്നത് നിർത്തുക. "runs on my laptop" എന്ന അവസ്ഥയിൽ നിന്ന് "ships on every merge" എന്ന അവസ്ഥയിലേക്ക് മാറൂ.
സ്രോതസ്സ്: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo
