பூஜ்ஜியத்திலிருந்து Production நிலைக்கு: Fly.io மற்றும் GitHub Actions மூலம் FastAPI
நீங்கள் main-க்கு குறியீட்டை (code) push செய்கிறீர்கள். சோதனைகள் (tests) இயங்குகின்றன. சில நிமிடங்களில் உங்கள் API நேரலையில் (live) வருகிறது.
இதுதான் ஒரு தொழில்முறை deployment pipeline-ஐ உருவாக்கும் முறை. இந்த அமைப்பிற்கு உங்களுக்குத் தரவுத்தளம் (database) அல்லது Redis தேவையில்லை. உங்களுக்கு ஒரு FastAPI app, ஒரு Docker image, ஒரு YAML config மற்றும் ஒரு GitHub Actions workflow மட்டுமே தேவை.
இந்த workflow இவ்வாறு இருக்கும்: git push → GitHub Actions → run tests → build image → deploy to Fly.io → live
இந்த அமைப்பில் மூன்று பகுதிகள் உள்ளன:
- உங்கள் FastAPI app. இது எல்லா இடங்களிலும் ஒரே மாதிரியாக இயங்குவதற்காக, நீங்கள் இதை ஒரு Docker image-ஆக பேக்கேஜ் செய்கிறீர்கள்.
- Fly.io. இது சிறிய இயந்திரங்களில் (machines) உங்கள் image-ஐ இயக்கும். இது உங்களுக்காக routing மற்றும் health checks ஆகியவற்றைச் செய்கிறது.
- GitHub Actions. இது உங்கள் குறியீட்டைக் கண்காணித்து, ஒவ்வொரு முறை push செய்யும் போதும் தானாகவே deploy செய்கிறது.
இதை பாதுகாப்பாக மாற்ற, ஒரு scoped deploy token-ஐப் பயன்படுத்தவும். உங்கள் தனிப்பட்ட Fly API token-ஐப் பயன்படுத்த வேண்டாம். ஒரு குறிப்பிட்ட app-ஐ மட்டும் கையாள அனுமதி கொண்ட ஒரு token-ஐ உருவாக்கவும். இந்த token-ஐ GitHub Secrets-இல் FLY_API_TOKEN எனச் சேமிக்கவும்.
உங்கள் அமைப்பிற்கான முக்கிய தொழில்நுட்ப விவரங்கள்:
- non-root user கொண்ட Dockerfile-ஐப் பயன்படுத்தவும். இது பாதுகாப்பை மேம்படுத்தும்.
- உங்கள் Dockerfile-இல் உங்கள் app-ஐ 0.0.0.0 உடன் bind செய்யவும். நீங்கள் 127.0.0.1-ஐப் பயன்படுத்தினால், Fly உங்கள் app-ஐ அணுக முடியாது.
- fly.yaml கோப்பைப் பயன்படுத்தவும். இந்த கோப்புதான் உங்கள் உண்மையான ஆதாரமாகும் (source of truth). இது உங்கள் region, memory மற்றும் port ஆகியவற்றை வரையறுக்கிறது.
- FastAPI-இல் ஒரு health check endpoint-ஐ அமைக்கவும். உங்கள் app-க்கு traffic அனுப்புவதற்கு முன், அது இயங்குவதை உறுதி செய்ய Fly இதைப் பயன்படுத்துகிறது. இது zero-downtime deployments-ஐ அனுமதிக்கிறது.
உங்கள் GitHub Actions workflow-இல், "needs: test" கட்டளையைப் பயன்படுத்தவும். இது உங்கள் சோதனைகள் (tests) வெற்றி பெற்றால் மட்டுமே உங்கள் app deploy செய்யப்படுவதை உறுதி செய்கிறது. உங்கள் குறியீடு தவறாக இருந்தால், production நிலையை அடைவதற்கு முன்பே pipeline நின்றுவிடும்.
இந்த அமைப்பு உங்களுடன் சேர்ந்து விரிவடையும் (scales). fly.stg.yaml மற்றும் fly.prod.yaml போன்ற வெவ்வேறு config கோப்புகளைப் பயன்படுத்துவதன் மூலம் நீங்கள் staging மற்றும் production சூழல்களைச் சேர்க்கலாம்.
கைமுறையாக (manually) deploy செய்வதை நிறுத்துங்கள். "என் லேப்டாப்பில் இயங்குகிறது" என்பதிலிருந்து "ஒவ்வொரு merge செய்யும் போதும் ships செய்யப்படுகிறது" என்ற நிலைக்கு மாறுங்கள்.
ஆதாரம்: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo
