fastapi 基本部署使用

基本包:

在centos7.6 下,安装了python3.8 版本,同时与python2 共存,因此安装fastapi的时候,应该使用pip3 进行安装

安装的模块:
			pip3 install fastapi
			pip3 install uvicron
			pip3 install gunicorn  #管理uvicron应用
基本main.py 文件
[root@iZh pytest]# cat main.py 
from fastapi import FastAPI
import uvicorn

app = FastAPI()

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

if __name__=='__main__':
    uvicorn.run(app='main:app',host="127.0.0.1",port=8000,reload=True,debug=True)
启动
  1. python3 main.py 默认python为2的版本,系统自带不支持
[root@iZh pytest]# python main.py 
Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from fastapi import FastAPI
ImportError: No module named fastapi
[root@iZhppytest]# python3 main.py 
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [9591] using statreload
INFO:     Started server process [9599]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
  1. uvicorn main:app --reload
[root@iZh pytest]# uvicorn main:app --reload
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [9626] using statreload
INFO:     Started server process [9633]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

3.前两个都是阻塞式的,并且在控制台关闭之后,程序也就关闭了。使用gunicron 解决

gunicorn main:app -b 127.0.0.1:8000  -w 4 -k uvicorn.workers.UvicornH11Worker --daemon

关闭gunicron 进程
1. 查询进程pid

[root@iZh pytest]# pstree -ap|grep gunicorn
  |-gunicorn,9362 /usr/local/bin/gunicorn main:app -b 127.0.0.1:8000 -w 4 -k uvicorn.workers.UvicornH11Worker --daemon
  |-gunicorn,9363 /usr/local/bin/gunicorn main:app -b 127.0.0.1:8000 -w 4 -k uvicorn.workers.UvicornH11Worker --daemon
  |-gunicorn,9364 /usr/local/bin/gunicorn main:app -b 127.0.0.1:8000 -w 4 -k uvicorn.workers.UvicornH11Worker --daemon
  |-gunicorn,9365 /usr/local/bin/gunicorn main:app -b 127.0.0.1:8000 -w 4 -k uvicorn.workers.UvicornH11Worker --daemon
  |   `-{gunicorn},9377
  |           |-grep,9479 --color=auto gunicorn
  1. 关闭进程
[root@iZhp3blin25ak7ob1v9hfeZ pytest]# kill -9 9362
[root@iZhp3blin25ak7ob1v9hfeZ pytest]# kill -9 9363
[root@iZhp3blin25ak7ob1v9hfeZ pytest]# kill -9 9364
[root@iZhp3blin25ak7ob1v9hfeZ pytest]# kill -9 9365
测试访问

使用curl测试工具进行测试:

 安装curl 工具:
     yum -y install  curl

 访问测试:
	curl 127.0.0.1:8000
[root@iZhp3b local]# curl 127.0.0.1:8000
{"message":"ok"}  #返回测试数据
[root@iZ local]# 
fastapi 多文件
  1. 在项目目录下新建python包,例如orders包,即带有 init.py 文件的目录
  2. 在python中新建普通的python文件:index.py
  3. index.py 文件中导入fastapi的路由,使用路由进行api的配置
from fastapi import APIRouter

router = APIRouter()

#tags为表明这个方法的用途等等
@router.get('/index',tags=['myorder'])
async  def readOrders():
    return {"message":"allorders"}
  1. 在项目入口文件中,将路由文件全部进行导入,并配置api路径
from fastapi import FastAPI
from order import index 
#导入router
app = FastAPI()

#配置router和api访问前缀路径
app.include_router(index.router,prefix="/order")
  1. 调用方法与主入口中app修饰下的方法相同调用即可
127.0.0.1:8000/order/index 
fastapi 跨域设置
  1. 使用中间件进行设置,入口文件中进行设置即可。 CORSMiddleware
from fastapi.middleware.cors import  CORSMiddleware
  1. 基本配置,可跨域的域名,请求的方法等等
#可跨域访问的域名
origins = [
    "http://localhost",
    "http://localhost:8080",
]

#可跨域访问的基本请求设置
app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)
<think>好的,用户问的是如何使用FastAPI部署以及它能干什么。首先,我需要回顾FastAPI基本信息和主要用途。FastAPI是一个现代的Python Web框架,用于构建API,支持异步请求处理,并且基于Starlette和Pydantic。它的优势在于高性能、易于使用和自动生成文档。 接下来,用户的问题分两部分:功能和部署。对于功能部分,我需要列举FastAPI的主要用途,比如构建RESTful API、WebSocket支持、数据验证等。部署部分则需要涵盖常见的部署方法,比如使用Uvicorn或Gunicorn作为服务器,Docker容器化,以及云平台部署如AWS、Heroku等。 然后,我需要给出具体的部署步骤。例如,安装FastAPI和uvicorn,创建一个简单的应用示例,然后通过命令行启动服务器。对于生产环境,可能需要结合Gunicorn和Uvicorn worker,或者编写Dockerfile。同时,要提到环境变量的设置和HTTPS的配置,比如使用Nginx反向代理和Let's Encrypt证书。 在解释过程中,需要注意用户可能的背景。如果用户是新手,可能需要更详细的步骤说明,比如如何安装依赖,如何运行命令。如果用户有经验,可能更关注最佳实践和性能优化。因此,回答中需要涵盖基础步骤和进阶部署方法。 可能的问题:用户是否了解异步框架?是否熟悉Docker或云部署?是否需要示例代码?根据用户的问题,他们可能希望得到直接的代码示例和部署命令,因此需要提供具体的代码块和命令行指令。 最后,相关问题的部分需要围绕FastAPI的功能和部署展开,比如询问异步处理、中间件使用、依赖注入、数据库集成等。这些问题可以帮助用户进一步深入学习和解决可能遇到的挑战。 总结回答结构:先介绍FastAPI的功能,再分步骤说明部署方法,包括开发和生产环境的不同配置,提供代码示例和命令,最后列出相关问题。</think><< **FastAPI 是什么以及它的用途** FastAPI 是一个基于 Python 的现代高性能 Web 框架,专门用于构建 API(应用程序接口)。它的核心特点包括: 1. **高性能**:接近 Node.js 和 Go 的速度(基于 Starlette 和 Pydantic)。 2. **异步支持**:原生支持 `async/await` 语法,适合高并发场景。 3. **自动文档生成**:自动生成 Swagger UI 和 ReDoc 文档。 4. **数据验证**:通过 Pydantic 实现请求/响应数据的类型校验。 5. **依赖注入系统**:灵活管理代码依赖。 **FastAPI 能用来做什么?** - 构建 RESTful API - 实时通信(WebSocket) - 微服务架构 - 机器学习模型部署 - 与前端框架(React/Vue)配合开发全栈应用 --- **如何使用 FastAPI 部署** 以下是部署 FastAPI 的常见方法: **1. 本地运行(开发环境)** 安装依赖: ```bash pip install fastapi uvicorn ``` 创建 `main.py`: ```python from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"} ``` 启动服务: ```bash uvicorn main:app --reload ``` **2. 生产环境部署使用 Gunicorn + Uvicorn)** 安装 Gunicorn: ```bash pip install gunicorn ``` 启动命令(使用多进程): ```bash gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app ``` **3. Docker 容器化部署** 创建 `Dockerfile`: ```dockerfile FROM python:3.9 WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "main:app"] ``` 构建并运行容器: ```bash docker build -t fastapi-app . docker run -d -p 80:80 fastapi-app ``` **4. 云平台部署(以 AWS EB 为例)** - 创建 `requirements.txt` 包含依赖项。 - 使用 Elastic Beanstalk CLI 部署: ```bash eb init -p docker fastapi-app eb create fastapi-env ``` **5. 配置 HTTPS** 使用反向代理(如 Nginx)并配置 Let's Encrypt 证书: ```nginx server { listen 80; server_name your_domain.com; location / { proxy_pass http://localhost:8000; } } ``` 然后通过 Certbot 获取证书: ```bash certbot --nginx ``` --- **解释** - **开发环境**:`--reload` 参数使得代码修改后自动重启服务,适合调试。 - **生产环境**:Gunicorn 作为进程管理器,结合 Uvicorn Worker 处理异步请求,提高并发能力。 - **Docker**:容器化部署保证环境一致性,适合 CI/CD 流程。 - **HTTPS**:通过 Nginx 反向代理和 Let's Encrypt 实现免费 SSL 证书,保障通信安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值