从零到一:用 Docker Compose 在华为云 ECS 上优雅部署 FastAPI 应用
从零到一:用 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 编排体系。工具会不断更替,但"环境可复制、部署可回滚、故障可观测"这三条原则始终是工程实践不变的基石。希望这篇实践笔记能为正在上云路上的开发者提供一点参考。
- 点赞
- 收藏
- 关注作者
评论(0)