ਜ਼ੀਰੋ ਤੋਂ ਪ੍ਰੋਡਕਸ਼ਨ: Fly.io ਅਤੇ GitHub Actions 'ਤੇ FastAPI

ਤੁਸੀਂ main ਵਿੱਚ ਕੋਡ ਪੁਸ਼ ਕਰਦੇ ਹੋ। ਟੈਸਟ ਚੱਲਦੇ ਹਨ। ਕੁਝ ਮਿੰਟਾਂ ਬਾਅਦ ਤੁਹਾਡੀ API ਲਾਈਵ ਹੋ ਜਾਂਦੀ ਹੈ।

ਇਸ ਤਰ੍ਹਾਂ ਤੁਸੀਂ ਇੱਕ ਪੇਸ਼ੇਵਰ ਡਿਪਲਾਈਮੈਂਟ ਪਾਈਪਲਾਈਨ ਬਣਾਉਂਦੇ ਹੋ। ਇਸ ਸੈੱਟਅੱਪ ਲਈ ਤੁਹਾਨੂੰ ਕਿਸੇ ਡਾਟਾਬੇਸ ਜਾਂ Redis ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ। ਤੁਹਾਨੂੰ ਸਿਰਫ਼ ਇੱਕ FastAPI ਐਪ, ਇੱਕ Docker image, ਇੱਕ YAML ਕੌਂਫਿਗ, ਅਤੇ ਇੱਕ GitHub Actions workflow ਦੀ ਲੋੜ ਹੈ।

ਵਰਕਫਲੋ ਇਸ ਤਰ੍ਹਾਂ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ: git push → GitHub Actions → run tests → build image → deploy to Fly.io → live

ਇਸ ਸਿਸਟਮ ਦੇ ਤਿੰਨ ਹਿੱਸੇ ਹਨ:

  • ਤੁਹਾਡੀ FastAPI ਐਪ। ਤੁਸੀਂ ਇਸਨੂੰ ਇੱਕ Docker image ਵਿੱਚ ਪੈਕੇਜ ਕਰਦੇ ਹੋ ਤਾਂ ਜੋ ਇਹ ਹਰ ਜਗ੍ਹਾ ਇੱਕੋ ਤਰ੍ਹਾਂ ਚੱਲੇ।
  • Fly.io। ਇਹ ਤੁਹਾਡੀ image ਨੂੰ ਛੋਟੀਆਂ ਮਸ਼ੀਨਾਂ 'ਤੇ ਚਲਾਉਂਦਾ ਹੈ। ਇਹ ਤੁਹਾਡੇ ਲਈ ਰੂਟਿੰਗ ਅਤੇ ਹੈਲਥ ਚੈੱਕ ਸੰਭਾਲਦਾ ਹੈ।
  • GitHub Actions। ਇਹ ਤੁਹਾਡੇ ਕੋਡ 'ਤੇ ਨਜ਼ਰ ਰੱਖਦਾ ਹੈ ਅਤੇ ਹਰ ਪੁਸ਼ 'ਤੇ ਆਪਣੇ ਆਪ ਡਿਪਲੋਇ ਕਰ ਦਿੰਦਾ ਹੈ।

ਇਸਨੂੰ ਸੁਰੱਖਿਅਤ ਬਣਾਉਣ ਲਈ, ਇੱਕ scoped deploy token ਦੀ ਵਰਤੋਂ ਕਰੋ। ਆਪਣੇ ਨਿੱਜੀ Fly API token ਦੀ ਵਰਤੋਂ ਨਾ ਕਰੋ। ਇੱਕ ਅਜਿਹਾ token ਬਣਾਓ ਜਿਸ ਕੋਲ ਸਿਰਫ਼ ਇੱਕ ਖਾਸ ਐਪ ਨੂੰ ਐਕਸੈਸ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਹੋਵੇ। ਇਸ token ਨੂੰ GitHub Secrets ਵਿੱਚ FLY_API_TOKEN ਵਜੋਂ ਸਟੋਰ ਕਰੋ।

ਤੁਹਾਡੇ ਸੈੱਟਅੱਪ ਲਈ ਮੁੱਖ ਤਕਨੀਕੀ ਵੇਰਵੇ:

  • non-root user ਵਾਲੀ Dockerfile ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਸੁਰੱਖਿਆ ਵਿੱਚ ਸੁਧਾਰ ਕਰਦਾ ਹੈ।
  • ਆਪਣੀ Dockerfile ਵਿੱਚ ਆਪਣੀ ਐਪ ਨੂੰ 0.0.0.0 ਨਾਲ ਬਾਈਂਡ (bind) ਕਰੋ। ਜੇਕਰ ਤੁਸੀਂ 127.0.0.1 ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ, ਤਾਂ Fly ਤੁਹਾਡੀ ਐਪ ਤੱਕ ਨਹੀਂ ਪਹੁੰਚ ਸਕਦਾ।
  • fly.yaml ਫਾਈਲ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਫਾਈਲ ਤੁਹਾਡੇ ਸੱਚ ਦਾ ਸਰੋਤ (source of truth) ਹੈ। ਇਹ ਤੁਹਾਡੇ region, memory, ਅਤੇ port ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦੀ ਹੈ।
  • FastAPI ਵਿੱਚ ਇੱਕ health check endpoint ਸੈੱਟਅੱਪ ਕਰੋ। Fly ਇਸਦੀ ਵਰਤੋਂ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਕਰਦਾ ਹੈ ਕਿ ਟ੍ਰੈਫਿਕ ਭੇਜਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੀ ਐਪ ਚੱਲ ਰਹੀ ਹੈ। ਇਹ zero-downtime deployments ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ।

ਆਪਣੇ GitHub Actions workflow ਵਿੱਚ, "needs: test" ਕਮਾਂਡ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਤੁਹਾਡੀ ਐਪ ਉਦੋਂ ਹੀ ਡਿਪਲੋਇ ਹੋਵੇ ਜੇਕਰ ਤੁਹਾਡੇ ਟੈਸਟ ਪਾਸ ਹੋ ਜਾਂਦੇ ਹਨ। ਜੇਕਰ ਤੁਹਾਡਾ ਕੋਡ ਖਰਾਬ ਹੈ, ਤਾਂ ਪਾਈਪਲਾਈਨ ਪ੍ਰੋਡਕਸ਼ਨ ਤੱਕ ਪਹੁੰਚਣ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਰੁਕ ਜਾਂਦੀ ਹੈ।

ਇਹ ਸੈੱਟਅੱਪ ਤੁਹਾਡੇ ਨਾਲ ਵਧਦਾ (scale) ਹੈ। ਤੁਸੀਂ fly.stg.yaml ਅਤੇ fly.prod.yaml ਵਰਗੀਆਂ ਵੱਖ-ਵੱਖ ਕੌਂਫਿਗ ਫਾਈਲਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ staging ਅਤੇ production ਵਾਤਾਵਰਣ (environments) ਜੋੜ ਸਕਦੇ ਹੋ।

ਮੈਨੂਅਲੀ ਡਿਪਲੋਇ ਕਰਨਾ ਬੰਦ ਕਰੋ। "runs on my laptop" ਤੋਂ "ships on every merge" ਵੱਲ ਵਧੋ।

ਸਰੋਤ: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo