从零到生产环境:在 Fly.io 和 GitHub Actions 上部署 FastAPI

你将代码推送到 main 分支。测试运行。几分钟后,你的 API 就上线了。

这就是构建专业部署流水线的方式。这种配置不需要数据库或 Redis。你只需要一个 FastAPI 应用、一个 Docker 镜像、一个 YAML 配置文件和一个 GitHub Actions 工作流。

工作流如下所示: git push → GitHub Actions → 运行测试 → 构建镜像 → 部署到 Fly.io → 上线

该系统包含三个部分:

  • 你的 FastAPI 应用。将其封装在 Docker 镜像中,以便在任何地方都能以相同的方式运行。
  • Fly.io。它在小型机器上运行你的镜像,并为你处理路由和健康检查。
  • GitHub Actions。它监控你的代码,并在每次推送时自动进行部署。

为了确保安全性,请使用作用域受限(scoped)的部署令牌。不要使用你的个人 Fly API 令牌。创建一个仅具有操作特定应用权限的令牌。将此令牌作为 FLY_API_TOKEN 存储在 GitHub Secrets 中。

配置的关键技术细节:

  • 在 Dockerfile 中使用非 root 用户。这可以提高安全性。
  • 在 Dockerfile 中将应用绑定到 0.0.0.0。如果你使用 127.0.0.1,Fly 将无法访问你的应用。
  • 使用 fly.yaml 文件。该文件是你的事实来源(source of truth),它定义了你的区域、内存和端口。
  • 在 FastAPI 中设置健康检查端点(health check endpoint)。Fly 利用这一点来确保应用在接收流量之前已正常运行。这可以实现零停机部署。

在你的 GitHub Actions 工作流中,使用 needs: test 命令。这可以确保只有在测试通过的情况下才会部署应用。如果代码有问题,流水线会在到达生产环境之前停止。

这种配置可以随你的需求进行扩展。你可以通过使用不同的配置文件(如 fly.stg.yamlfly.prod.yaml)来添加 staging 和 production 环境。

停止手动部署。从“在我的笔记本上运行”转向“每次合并即发布”。

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