从零到一:用 Docker Compose 在华为云 ECS 上优雅部署 FastAPI 应用

举报
yd_275936632 发表于 2026/11/06 10:21:48 2026/11/06
【摘要】 从零到一:用 Docker Compose 在华为云 ECS 上优雅部署 FastAPI 应用前言在云原生时代,如何把一个 Python Web 服务快速、稳定地部署到云端,是每位开发者都会遇到的问题。本文以 FastAPI 为例,手把手演示如何借助 Docker 。Compose 在华为云弹性云服务器(ECS)上完成一次标准的容器化部署,内容涵盖镜像构建、多容器编排、反向代理与健康检查,适...

从零到一:用 Docker Compose 在华为云 ECS 上优雅部署 FastAPI 应用

前言

在云原生时代,如何把一个 Python Web 服务快速、稳定地部署到云端,是每位开发者都会遇到的问题。本文以 FastAPI 为例,手把手演示如何借助 Docker 。Compose 在华为云弹性云服务器(ECS)上完成一次标准的容器化部署,内容涵盖镜像构建、多容器编排、反向代理与健康检查,适合有一定 Linux 基础的开发者阅读。

一、为什么选择 FastAPI + Docker 的组合

FastAPI 是近年最受欢迎的 Python Web 框架之一,它基于标准类型注解自动生成 OpenAPI 文档,原生支持异步 IO,在高并发场景下性能表现优异。而 Docker 则解决了"在我电脑上能跑"的经典难题:把运行环境连同依赖一起打包成镜像,任何一台装了 Docker 的服务器——无论是本地的虚拟机还是华为云 ECS——都能以完全一致的方式运行应用。

两者的组合带来了三个直接收益:

  • 环境一致性:开发、测试、生产使用同一份镜像,杜绝依赖冲突;
  • 弹性伸缩:配合华为云弹性伸缩(AS)服务,可按 CPU 负载自动增减容器实例;
  • 交付标准化:CI/CD 流水线只需推送镜像、重启容器两个动作,即可完成一次发布。

二、应用与镜像准备

先定义一个最简 FastAPI 应用 main.py:

from fastapi import FastAPI

app = FastAPI(title="Demo API")

@app.get("/health")
def health():
    return {"status": "ok"}

@app.get("/")
def index():
    return {"message": "Hello, Huawei Cloud!"}

接着编写 Dockerfile,采用多阶段构建以减小镜像体积:

FROM python:3.11-slim AS base
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.huaweicloud.com/repository/pypi/simple
COPY main.py .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

这里特意使用了华为云 PyPI 镜像源,在 ECS 上拉取依赖的速度可以提升数倍。

三、用 Compose 编排应用与反向代理

生产环境不建议直接暴露 Uvicorn 端口,通常在前面加一层 Nginx 做反向代理与静态资源缓存。docker-compose.yml 示例如下:

services:
  api:
    build: .
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 5s
      retries: 3
  nginx:
    image: nginx:1.27-alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      api:
        condition: service_healthy

其中 healthcheck 让 Docker 周期性探测 /health 接口,只有探活成功的容器才会被 Nginx 接入流量,避免请求打到尚未就绪的实例上。启动只需一条命令:

docker compose up -d --build

四、安全加固的几个实践要点

  • 安全组最小化放行:在华为云控制台仅放行 80/443 端口,8000 端口留在容器网络内部;
  • 密钥不落盘:数据库密码等敏感信息通过环境变量或华为云数据加密服务(DEW)注入,严禁写进镜像;
  • 日志轮转:为容器配置 logging.options 限制日志大小,防止磁盘被写满;
  • 定期更新基础镜像:关注 python:3.11-slim 的安全通告,及时重建镜像修补漏洞。

五、小结

从编写 Dockerfile 到 Compose 编排,再到安全加固,这条路径虽然简单,却覆盖了云原生部署的核心环节。当应用规模继续扩大时,可以平滑演进到华为云容器引擎 CCE,把手工运维交给 Kubernetes 编排体系。工具会不断更替,但"环境可复制、部署可回滚、故障可观测"这三条原则始终是工程实践不变的基石。希望这篇实践笔记能为正在上云路上的开发者提供一点参考。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。