શૂન્યથી પ્રોડક્શન સુધી: 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. તે તમારા કોડ પર નજર રાખે છે અને દરેક પુશ પર આપમેળે ડિપ્લોય કરે છે.
આને સુરક્ષિત બનાવવા માટે, સ્કોપ્ડ ડિપ્લોય ટોકન (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 માં હેલ્થ ચેક એન્ડપોઇન્ટ સેટ કરો. Fly તેનો ઉપયોગ એ સુનિશ્ચિત કરવા માટે કરે છે કે ટ્રાફિક મોકલતા પહેલા તમારી એપ ચાલી રહી છે. આનાથી zero-downtime ડિપ્લોયમેન્ટ શક્ય બને છે.
તમારા GitHub Actions વર્કફ્લોમાં, "needs: test" કમાન્ડનો ઉપયોગ કરો. આ સુનિશ્ચિત કરે છે કે જો તમારા ટેસ્ટ પાસ થાય તો જ તમારી એપ ડિપ્લોય થાય. જો તમારો કોડ બગડેલો હશે, તો પાઇપલાઇન પ્રોડક્શન સુધી પહોંચતા પહેલા જ અટકી જશે.
આ સેટઅપ તમારી સાથે સ્કેલ કરી શકે છે. તમે 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
