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

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.dtcms.com/a/207434.html

相关文章:

  • 深入理解线程池:参数、流程与实战应用
  • Qt控件:输入控件
  • 地下水监测的施工与安装
  • 人工智能时代:从“知识容器”到“知识地图”的认知革命
  • 华为模拟器练习简单的拓扑图(2台三层交换机和8台pc)
  • 【知识图谱】数据处理与数据存储
  • 用对称化与chaining技术bound经验过程上确界的期望(Guntuboyina理论统计学笔记)
  • Three.js搭建小米SU7三维汽车实战(1)搭建开发环境
  • vue3定于组件名字的几种方法
  • 浙江大学python程序设计(陈春晖、翁恺、季江民)习题答案-第十章
  • QT ui控件setEnabled(false) 作用
  • 亚马逊IEN新规避坑指南:两大申报盲区与合规策略解析
  • YOLOv5:调用官方权重进行检测
  • Appium 的 enableMultiWindows 参数
  • 甲骨文云服务器适合做网站吗
  • MCP Server Tool 开发学习文档
  • Veeam Backup 13 beta install
  • 跨境支付风控失效?用代理 IP 构建「地域 - 设备 - 行为」三维防护网
  • ​​Resin-3.1.12-01 安装教程:详细步骤与配置指南(Linux环境)
  • 遥控器处理器与光纤通信技术解析
  • 树 Part 8
  • 如何借助iPaaS集成平台做好API 错误码规范化
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(27):失敗 失败 经验
  • SSHwifty-基于Web的SSH/Telnet管理工具
  • 06算法学习_58. 区间和
  • 从连接中枢到终端接入——解析工业无线AP与客户端的协同之道
  • 山东大学软件学院创新项目实训开发日志——第十二周
  • MVC 与 MVT:Web 开发架构模式的异同与实践
  • MFC 中实现动态控件启用与命令执行
  • Windows命令实用工具——tcping 命令工具安装及基础使用