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

修改前

修改后

相关推荐
苏侠客8524 小时前
在docker上部署fastapi的相关操作
docker·容器·fastapi
TDengine (老段)4 小时前
TDengine IDMP 快速体验(方式二 通过 docker)
大数据·数据库·docker·ai·时序数据库·tdengine·涛思数据
NorthCastle12 小时前
Docker 网络-单机版
网络·docker·docker网络基础概念·docker网络基础命令
漫步企鹅16 小时前
【VS Code - Qt】如何基于Docker Linux配置Windows10下的VS Code,开发调试ARM 版的Qt应用程序?
linux·qt·docker·arm·vs code·开发调试
菜菜子爱学习16 小时前
Nginx学习笔记(三)——在 CentOS 7 中配置阿里云镜像源
笔记·学习·nginx·centos·运维开发·vmware
suwith16 小时前
nginx高新能web服务器
linux·服务器·nginx
杨浦老苏17 小时前
简单的身份验证中间件Tinyauth
docker·群晖·sso
z涛.18 小时前
Docker容器
运维·docker·容器
AI风老师18 小时前
7、docker |其余命令
linux·ubuntu·docker
子洋20 小时前
源码安装 Nginx 并加载第三方模块指南
前端·后端·nginx