Từ con số 0 đến Production: FastAPI trên Fly.io và GitHub Actions
Bạn đẩy code lên nhánh main. Các bài kiểm tra (tests) được chạy. API của bạn sẽ chính thức hoạt động chỉ vài phút sau đó.
Đây là cách bạn xây dựng một quy trình triển khai (deployment pipeline) chuyên nghiệp. Bạn không cần cơ sở dữ liệu hay Redis cho thiết lập này. Bạn chỉ cần một ứng dụng FastAPI, một Docker image, một file cấu hình YAML và một GitHub Actions workflow.
Quy trình hoạt động như sau:
git push → GitHub Actions → chạy tests → build image → deploy lên Fly.io → live
Hệ thống này gồm ba phần:
- Ứng dụng FastAPI của bạn. Bạn đóng gói nó trong một Docker image để nó có thể chạy đồng nhất ở mọi nơi.
- Fly.io. Nó chạy image của bạn trên các máy chủ nhỏ. Nó xử lý việc định tuyến (routing) và kiểm tra tình trạng (health checks) cho bạn.
- GitHub Actions. Nó theo dõi mã nguồn của bạn và tự động triển khai sau mỗi lần push.
Để đảm bảo tính bảo mật, hãy sử dụng một deploy token có phạm vi giới hạn (scoped deploy token). Đừng sử dụng Fly API token cá nhân của bạn. Hãy tạo một token chỉ có quyền truy cập vào một ứng dụng cụ thể. Lưu trữ token này trong GitHub Secrets với tên FLY_API_TOKEN.
Các chi tiết kỹ thuật quan trọng cho thiết lập của bạn:
- Sử dụng Dockerfile với một người dùng không phải root (non-root user). Điều này giúp tăng cường bảo mật.
- Liên kết (bind) ứng dụng của bạn với
0.0.0.0trong Dockerfile. Nếu bạn sử dụng127.0.0.1, Fly sẽ không thể kết nối tới ứng dụng của bạn. - Sử dụng file
fly.yaml. File này là nguồn dữ liệu chuẩn (source of truth) của bạn. Nó định nghĩa vùng (region), bộ nhớ (memory) và cổng (port). - Thiết lập một endpoint health check trong FastAPI. Fly sử dụng endpoint này để đảm bảo ứng dụng của bạn đang chạy ổn định trước khi điều hướng lưu lượng truy cập đến. Điều này cho phép triển khai mà không gây gián đoạn dịch vụ (zero-downtime deployments).
Trong GitHub Actions workflow, hãy sử dụng lệnh "needs: test". Điều này đảm bảo ứng dụng của bạn chỉ được triển khai nếu các bài kiểm tra vượt qua. Nếu code của bạn bị lỗi, quy trình sẽ dừng lại trước khi chạm đến môi trường production.
Thiết lập này có khả năng mở rộng cùng với bạn. Bạn có thể thêm các môi trường staging và production bằng cách sử dụng các file cấu hình khác nhau như fly.stg.yaml và fly.prod.yaml.
Hãy ngừng triển khai thủ công. Hãy chuyển từ trạng thái "chạy được trên laptop của tôi" sang "tự động vận hành sau mỗi lần merge".
Nguồn: https://dev.to/devded/zero-to-production-fastapi-on-flyio-and-github-actions-1ejo
