సున్నా నుండి ప్రొడక్షన్‌కు: 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. ఇది చిన్న మెషీన్లపై మీ ఇమేజ్‌ను రన్ చేస్తుంది. ఇది మీ కోసం రూటింగ్ మరియు హెల్త్ చెక్‌లను నిర్వహిస్తుంది.
  • GitHub Actions. ఇది మీ కోడ్‌ను గమనిస్తూ, ప్రతి పుష్ (push) చేసినప్పుడు ఆటోమేటిక్‌గా డిప్లాయ్ చేస్తుంది.

దీనిని సురక్షితంగా ఉంచడానికి, ఒక స్కోప్డ్ డిప్లాయ్ టోకెన్ (scoped deploy token) ఉపయోగించండి. మీ వ్యక్తిగత Fly API టోకెన్‌ను ఉపయోగించకండి. ఒక నిర్దిష్ట యాప్‌ను మాత్రమే యాక్సెస్ చేసే అనుమతి ఉన్న టోకెన్‌ను సృష్టించండి. ఈ టోకెన్‌ను GitHub Secretsలో FLY_API_TOKENగా సేవ్ చేయండి.

మీ సెటప్ కోసం ముఖ్యమైన సాంకేతిక వివరాలు:

  • నాన్-రూట్ యూజర్ (non-root user) తో కూడిన 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" కమాండ్‌ను ఉపయోగించండి. దీనివల్ల మీ టెస్ట్‌లు పాస్ అయితేనే మీ యాప్ డిప్లాయ్ అవుతుంది. ఒకవేళ మీ కోడ్‌లో లోపం ఉంటే, పైప్‌లైన్ ప్రొడక్షన్‌కు చేరుకోకముందే ఆగిపోతుంది.

ఈ సెటప్ మీ అవసరాలకు అనుగుణంగా స్కేల్ అవుతుంది. fly.stg.yaml మరియు fly.prod.yaml వంటి వేర్వేరు కాన్ఫిగరేషన్ ఫైల్‌లను ఉపయోగించి మీరు స్టేజింగ్ (staging) మరియు ప్రొడక్షన్ (production) ఎన్విరాన్‌మెంట్లను జోడించవచ్చు.

మాన్యువల్‌గా డిప్లాయ్ చేయడం ఆపండి. "నా లాప్‌టాప్‌లో రన్ అవుతుంది" అనే స్థితి నుండి "ప్రతి మెర్జ్ (merge) చేసినప్పుడు షిప్ అవుతుంది" అనే స్థితికి మారండి.

Source: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo