ಶೂನ್ಯದಿಂದ ಉತ್ಪಾದನೆಗೆ: 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. ಇದು ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಗಮನಿಸುತ್ತದೆ ಮತ್ತು ಪ್ರತಿ ಪುಶ್ನಲ್ಲಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಡಿಪ್ಲಾಯ್ ಮಾಡುತ್ತದೆ.
ಇದನ್ನು ಸುರಕ್ಷಿತಗೊಳಿಸಲು, ಸ್ಕೋಪ್ಡ್ ಡಿಪ್ಲಾಯ್ ಟೋಕನ್ (scoped deploy token) ಬಳಸಿ. ನಿಮ್ಮ ವೈಯಕ್ತಿಕ Fly API ಟೋಕನ್ ಅನ್ನು ಬಳಸಬೇಡಿ. ಕೇವಲ ಒಂದು ನಿರ್ದಿಷ್ಟ ಆ್ಯಪ್ ಅನ್ನು ಮಾತ್ರ ಬಳಸಲು ಅನುಮತಿ ಇರುವ ಟೋಕನ್ ಅನ್ನು ರಚಿಸಿ. ಈ ಟೋಕನ್ ಅನ್ನು GitHub Secrets ನಲ್ಲಿ FLY_API_TOKEN ಎಂದು ಸಂಗ್ರಹಿಸಿ.
ನಿಮ್ಮ ಸೆಟಪ್ಗಾಗಿ ಪ್ರಮುಖ ತಾಂತ್ರಿಕ ವಿವರಗಳು:
- non-root ಬಳಕೆದಾರರೊಂದಿಗೆ Dockerfile ಬಳಸಿ. ಇದು ಸುರಕ್ಷತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ.
- ನಿಮ್ಮ Dockerfile ನಲ್ಲಿ ನಿಮ್ಮ ಆ್ಯಪ್ ಅನ್ನು 0.0.0.0 ಗೆ ಬೈಂಡ್ (bind) ಮಾಡಿ. ನೀವು 127.0.0.1 ಬಳಸಿದರೆ, Fly ನಿಮ್ಮ ಆ್ಯಪ್ ಅನ್ನು ತಲುಪಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.
- fly.yaml ಫೈಲ್ ಬಳಸಿ. ಈ ಫೈಲ್ ನಿಮ್ಮ ಮೂಲ ಸತ್ಯ (source of truth). ಇದು ನಿಮ್ಮ ರೀಜನ್, ಮೆಮೊರಿ ಮತ್ತು ಪೋರ್ಟ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ.
- FastAPI ನಲ್ಲಿ ಹೆಲ್ತ್ ಚೆಕ್ ಎಂಡ್ಪಾಯಿಂಟ್ (health check endpoint) ಅನ್ನು ಸೆಟಪ್ ಮಾಡಿ. ಟ್ರಾಫಿಕ್ ಅನ್ನು ಕಳುಹಿಸುವ ಮೊದಲು ನಿಮ್ಮ ಆ್ಯಪ್ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು Fly ಇದನ್ನು ಬಳಸುತ್ತದೆ. ಇದು zero-downtime ಡಿಪ್ಲಾಯ್ಮೆಂಟ್ಗಳಿಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.
ನಿಮ್ಮ GitHub Actions ವರ್ಕ್ಫ್ಲೋದಲ್ಲಿ, "needs: test" ಕಮಾಂಡ್ ಬಳಸಿ. ಇದು ನಿಮ್ಮ ಪರೀಕ್ಷೆಗಳು ಪಾಸಾದರೆ ಮಾತ್ರ ನಿಮ್ಮ ಆ್ಯಪ್ ಡಿಪ್ಲಾಯ್ ಆಗುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ. ನಿಮ್ಮ ಕೋಡ್ನಲ್ಲಿ ದೋಷವಿದ್ದರೆ, ಪೈಪ್ಲೈನ್ ಪ್ರೊಡಕ್ಷನ್ಗೆ ತಲುಪುವ ಮೊದಲೇ ನಿಂತುಹೋಗುತ್ತದೆ.
ಈ ಸೆಟಪ್ ನಿಮ್ಮ ಅಗತ್ಯಕ್ಕೆ ತಕ್ಕಂತೆ ವಿಸ್ತರಿಸುತ್ತದೆ (scales). fly.stg.yaml ಮತ್ತು fly.prod.yaml ನಂತಹ ವಿಭಿನ್ನ ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ಗಳನ್ನು ಬಳಸುವ ಮೂಲಕ ನೀವು ಸ್ಟೇಜಿಂಗ್ ಮತ್ತು ಪ್ರೊಡಕ್ಷನ್ ಎನ್ವಿರಾನ್ಮೆಂಟ್ಗಳನ್ನು ಸೇರಿಸಬಹುದು.
ಮ್ಯಾನುಯಲ್ ಆಗಿ ಡಿಪ್ಲಾಯ್ ಮಾಡುವುದನ್ನು ನಿಲ್ಲಿಸಿ. "runs on my laptop" ನಿಂದ "ships on every merge" ಗೆ ಬದಲಾಗಿ.
ಮೂಲ: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo
