FastAPI在 Nginx 和 Docker 环境中的部署

目录

    • 实现示例
      • [1. 项目结构](#1. 项目结构)
      • [2. FastAPI 应用 (app/main.py)](#2. FastAPI 应用 (app/main.py))
      • [3. 依赖文件 (app/requirements.txt)](#3. 依赖文件 (app/requirements.txt))
      • [4. Dockerfile](#4. Dockerfile)
      • [5. Nginx 配置 (nginx/nginx.conf)](#5. Nginx 配置 (nginx/nginx.conf))
      • [6. Docker Compose 配置 (docker-compose.yml)](#6. Docker Compose 配置 (docker-compose.yml))
    • 使用方法
    • 修改代码后更新

实现示例

接下来创建一个简单的示例项目,展示如何使用 Docker 和 Nginx 部署 FastAPI 应用,并实现代码修改后的快速更新。

1. 项目结构

复制代码
fastapi_ngnix_docker/
├── app/
│   ├── main.py
│   └── requirements.txt
├── nginx/
│   └── nginx.conf
├── docker-compose.yml
└── Dockerfile

2. FastAPI 应用 (app/main.py)

python:d:\node_test\fastapi_ngnix_docker\app\main.py 复制代码
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello World"}

@app.get("/items/{item_id}")
def read_item(item_id: int):
    return {"item_id": item_id}

3. 依赖文件 (app/requirements.txt)

plaintext:d:\node_test\fastapi_ngnix_docker\app\requirements.txt 复制代码
fastapi>=0.68.0
uvicorn>=0.15.0

4. Dockerfile

dockerfile:d:\node_test\fastapi_ngnix_docker\Dockerfile 复制代码
FROM python:3.9

WORKDIR /app

COPY ./app/requirements.txt /app/requirements.txt

RUN pip install --no-cache-dir --upgrade -r requirements.txt

# 不复制代码,而是在运行时通过卷挂载
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]

5. Nginx 配置 (nginx/nginx.conf)

nginx:d:\node_test\fastapi_ngnix_docker\nginx\nginx.conf 复制代码
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    
    access_log  /var/log/nginx/access.log  main;
    
    sendfile        on;
    keepalive_timeout  65;
    
    server {
        listen 80;
        
        location / {
            proxy_pass http://fastapi:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

6. Docker Compose 配置 (docker-compose.yml)

yaml:d:\node_test\fastapi_ngnix_docker\docker-compose.yml 复制代码
version: '3'

services:
  fastapi:
    build: .
    volumes:
      - ./app:/app
    ports:
      - "8000:8000"
  
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - fastapi

使用方法

  1. 创建上述文件结构
  2. 启动服务:
bash 复制代码
docker-compose up -d
  1. 现在您可以通过 http://localhost 访问您的 FastAPI 应用

修改代码后更新

当您修改 app/main.py 或其他 FastAPI 代码文件时:

  1. 由于使用了 --reload 选项和卷挂载,FastAPI 会自动检测到文件变化并重新加载
  2. 无需重新构建或重启容器,修改会立即生效
  3. 如果添加了新的依赖项,则需要重新构建容器:
bash 复制代码
docker-compose down
docker-compose up -d --build

修改前

修改后

相关推荐
zwjapple2 小时前
docker一键部署前后端项目
docker
ZPC82107 小时前
Docker 挂载卷并保存为容器
docker·容器
feifeigo1237 小时前
Docker-compose 编排lnmp(dockerfile) 完成Wordpress
android·docker·容器
Hello.Reader11 小时前
Nginx stub_status 指南从启用到监控落地的全流程详解
运维·nginx
码上飞扬12 小时前
深入理解Nginx:详尽配置手册
运维·nginx
黄小耶@13 小时前
深度解析 Nginx 配置:从性能优化到 HTTPS 安全实践
nginx·性能优化·https
�FENG14 小时前
Nginx代理、缓存与Rewrite
nginx·缓存·正、反向代理·rewrite与正则
AA-代码批发V哥14 小时前
初识Docker:容器化技术的入门指南
docker·容器
无聊的烤苕皮18 小时前
Docker运维-5.3 配置私有仓库(Harbor)
linux·运维·docker·容器·云计算
Clownseven18 小时前
网站缓存入门与实战:浏览器与Nginx/Apache服务器端缓存,让网站速度起飞!(2025)
nginx·缓存·apache