当前位置: 首页 > article >正文

FastAPI在 Nginx 和 Docker 环境中的部署

目录

    • 实现示例
      • 1. 项目结构
      • 2. FastAPI 应用 (app/main.py)
      • 3. 依赖文件 (app/requirements.txt)
      • 4. Dockerfile
      • 5. Nginx 配置 (nginx/nginx.conf)
      • 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)

from fastapi import FastAPIapp = 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)

fastapi>=0.68.0
uvicorn>=0.15.0

4. Dockerfile

FROM python:3.9WORKDIR /appCOPY ./app/requirements.txt /app/requirements.txtRUN 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)

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)

version: '3'services:fastapi:build: .volumes:- ./app:/appports:- "8000:8000"nginx:image: nginx:alpineports:- "80:80"volumes:- ./nginx/nginx.conf:/etc/nginx/nginx.confdepends_on:- fastapi

使用方法

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

修改代码后更新

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

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

修改前
在这里插入图片描述
修改后
在这里插入图片描述

http://www.lryc.cn/news/2383675.html

相关文章:

  • 计算机网络相关面试题
  • 根据当前日期计算并选取上一个月和上一个季度的日期范围,用于日期控件的快捷选取功能
  • 【C++】set、map 容器的使用
  • 【MySQL】第1节|全面理解MySQL架构
  • YOLOv8模型剪枝笔记(DepGraph和Network Slimming网络瘦身)
  • App Builder技术选型指南:从AI编程到小程序容器,外卖App开发实战
  • TDengine 高可用——三副本
  • el-table高度自适应、数据查询后高度展示错误问题
  • 【蓝桥杯真题精讲】第 16 届 Python A 组(省赛)
  • Java接口设计:ECharts热力图的绘制
  • 深入理解 MongoDB 的 _id 和 ObjectId:从原理到实践
  • C++内存复制
  • 【notepad++如何设置成中文界面呢?】
  • 当AI遇上科研:北大“科学导航”重塑学术探索全流程
  • 大模型在闭合性胫骨平台骨折诊疗全流程中的应用研究报告
  • PHP学习笔记(八)
  • C#中WSDL文件引用问题
  • Ubuntu 22.04上升级Node.js版本
  • 养生新策:五维开启健康生活
  • 生成对抗网络(GAN)原理
  • 【SpringBoot实战指南】使用 Spring Cache
  • centos8 配置网桥,并禁止kvm默认网桥
  • C++:list容器,deque容器
  • 【Node.js】全栈开发实践
  • 自定义类型-联合体
  • Qt项目开发中所遇
  • ubuntu sh安装包的安装方式
  • Redis语法大全
  • OpenAI宣布:核心API支持MCP,助力智能体开发
  • 我的爬虫夜未眠:一场与IP限流的攻防战