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

修改前

修改后

相关推荐
xian_wwq4 小时前
【学习笔记】Nginx常用安全配置
笔记·学习·nginx
胡耀超4 小时前
Umi-OCR 的 Docker安装(win制作镜像,Linux(Ubuntu Server 22.04)离线部署)
linux·深度学习·ubuntu·docker·容器·nlp·ocr
蓝倾6 小时前
电商开放平台API开发最佳实践:以淘宝开放平台为例
api·fastapi
不知疲倦的仄仄7 小时前
2025Nginx最新版讲解/面试
nginx·代理模式·proxy模式
铃木隼.8 小时前
docker容器高级管理-dockerfile创建镜像
运维·docker·容器
开开心心就好11 小时前
AI抠图软件,本地运行超快速
网络·人工智能·网络协议·tcp/ip·docker·电脑·excel
不要图透12 小时前
初用nginx
nginx
FE杂志社13 小时前
全栈开发 → FastAPI碎碎念
后端·python·fastapi
IT成长日记14 小时前
【Docker基础】Dockerfile指令速览:文件与目录操作指令详解
docker·容器·volume·add·dockerfile·workdir
胡耀超14 小时前
GraphRAG Docker化部署,接入本地Ollama完整技术指南:从零基础到生产部署的系统性知识体系
运维·docker·容器·大模型·知识图谱·rag·ollama