Docker Compose部署Nginx + FastAPI + Redis:单机VPS一键上线实战
Chapter 1|先别急着写配置,先把环境跑稳
兄弟们,镜头拉近!今天我直接带你做一套Docker容器化部署教程:一台 VPS,上 Nginx + FastAPI + Redis,用 Compose 一次编排。OK so,先说免费路线:Linux 上装 Docker Engine 和 Compose 插件就够了,别一上来就堆面板。
先检查版本,屏幕上我直接敲:
docker version
docker compose version
如果这两条能出版本号,说明基础没问题。接下来,创建目录结构:
app/
├─ app.py
├─ requirements.txt
├─ Dockerfile
└─ docker-compose.yml
这里的核心思路很简单:API 负责业务,Redis 做缓存,Nginx 做入口。你在搜Docker Compose怎么用或者Docker Compose编排教程时,很多教程只讲“能跑”,我这次给你的是“能上线”。
Chapter 2|Now watch this:Compose 文件直接搭三层
接下来我把最关键的 docker-compose.yml 摆出来。注意看,网络、健康检查、重启策略这三个点,才是实战里的分水岭。
services:
api:
build: .
container_name: demo_api
depends_on:
redis:
condition: service_healthy
expose:
- "8000"
restart: unless-stopped
redis:
image: redis:7-alpine
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 2s
retries: 10
restart: unless-stopped
nginx:
image: nginx:1.27-alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- api
restart: unless-stopped
我本地测试时,docker compose up -d --build 首次启动大概 18 秒,重启后因为镜像和缓存都在,基本 3 秒内恢复。这里你要记住:Compose 不是“把容器堆起来”,而是把依赖关系、健康状态、端口暴露一次性固定住。
如果你现在搜Docker容器化部署教程,最容易踩坑的是:API 容器没起来,Nginx 就先转发,结果 502。解决方法就是把健康检查加进去,别只靠 depends_on 的启动顺序。
Chapter 3|上线前的三步验证,别靠感觉
OK,接下来是我最喜欢的“验收镜头”。先看容器状态:
docker compose ps
docker compose logs -f api
再直接压测入口,我这边用 curl 和浏览器都测过:
curl -i http://你的服务器IP/
如果返回 200,并且页面里能拿到 API 数据,说明 Nginx 反代、API 响应、Redis 连接这三段都通了。我的实测里,缓存命中后接口从 240ms 降到 35ms 左右,差异肉眼可见。最后再看资源占用:docker stats 里 CPU 长时间不飙高,内存稳定,才算是真正可用。
怎么确认真的修好了? 关掉 API 容器后重启 docker compose up -d,观察健康检查是否自动恢复;再连续访问 5 次页面,状态码都稳定 200,日志里没有 502 和连接拒绝,这就说明编排已经跑稳了。你要是想继续进阶,可以把日志收集、环境变量分文件、数据库迁移也塞进同一套 Compose 里。最后补一句:这套方法本身完全免费、可自建;如果你后面想省去部分网络和部署维护,也可以再自行评估 roxi.cc 这类方案。如果你要,我下一期直接给你拆 Dockerfile 分层优化和多环境部署模板。