fastApi 项目部署

目录

方式一,Uvicorn部署

      1,linux服务器安装 python>3.8

      2,安装 uvicorn :                

      3,上传项目到服务器

      4,启动服务:                

方式二, Gunicorn 和 Uvicorn

        1,安装Gunicorn 和 Uvicorn         

        2,启动服务: 

        3,停止服务

方式三,docker 容器

        1,项目目录

        2,Dockerfile

        3,制作镜像

        4,运行容器

        5,测试项目

方式四,虚拟环境运行

git +docker +  bash 持续集成

       1, 项目目录

        2,服务器安装git、docker

        3,项目父目录放一个脚本文件 startweb.sh

        4 ,后续持续集成:提交代码 >> 运行脚本startweb.sh

        5,停止项目        

Jenkins 持续集成

k8s 持续集成


方式一,Uvicorn部署

Run a Server Manually - Uvicorn - FastAPI

      1,linux服务器安装 python>3.8

      2,安装 uvicorn :                

 pip install "uvicorn[standard]"

      3,上传项目到服务器

            main.py

from typing import Union
from fastapi import FastAPI
import uvicorn

app = FastAPI()
'''
启动命令
uvicorn main:app --reload --port 8000

#导出依赖
pip freeze >requirements.txt

api文档地址
http://localhost:8080/docs

参数类型:
请求正文(body)+路径参数({})+查询参数(?&)
'''


@app.get("/")
async def root():
    return {"message": "Hello World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}


# 第二种启动方式:
if __name__ == '__main__':
    uvicorn.run(app="main:app", host="localhost", port=8000)

      4,启动服务:                

uvicorn main:app --host 0.0.0.0 --port 8080


# uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4  # 启动4个进程

                main 是项目启动文件main.py

                app是main.py里的FastAPI对象(app = FastAPI() )

                允许所有ip连接:--host 0.0.0.0

                项目启动在8080端口 : --port 8080

                远程连接一断开服务会停止

方式二, Gunicorn 和 Uvicorn

Server Workers - Gunicorn with Uvicorn - FastAPI

            Gunicorn将充当进程管理器,监听端口和IP。它会将通信传输到运行Uvicorn类的工作进程。Uvicorn将负责将Gunicornn发送的数据转换为FastAPI使用的ASGI标准。

        1,安装Gunicorn 和 Uvicorn         

pip install "uvicorn[standard]" gunicorn

        2,启动服务: 

gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000


# -workers:要使用的worker进程的数量,每个进程将运行一个Uvicorn worker,在本例中为4个worker。
# 导入uvicon.workers.UvicornWorker
# --bind:这个命令告诉Gunicorn要监听的IP和端口,使用冒号(:)分隔IP和端口
# Gunicorn还将负责管理失效流程,并在需要时重新启动新流程,以保持进程数量。

          这种启动方式远程连接断开不会停止服务

        3,停止服务

        查找进程: ps -ef|grep 进程名

        杀死进程: kill -s 9 进程号

ps -ef|grep Uvicorn
ps -ef|grep Gunicorn

方式三,docker 容器

FastAPI in Containers - Docker - FastAPI

        1,项目目录

                 .
                ├── app
                │   ├── __init__.py
                │   └── main.py
                ├── Dockerfile
                └── requirements.txt

        2,Dockerfile

#
FROM python:3.9

# 设置工作目录
WORKDIR /code

# copy文件到容器
COPY ./requirements.txt /code/requirements.txt

# 创建日志目录
RUN mkdir -p /log

#
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

#
COPY ./app /code/app

# 启动命令
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]


# 使用nginx代理请求头
#CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"]

        3,制作镜像

# cd 到Dockerfile文件所在目录

docker build -t myimage .

        4,运行容器

docker run -d --name mycontainer -p 800:80 myimage

# -p:端口映射 宿主机端口:容器端口

        5,测试项目

方式四,虚拟环境运行

        持续更新。。。

git +docker +  bash 持续集成

       1, 项目目录

        2,服务器安装git、docker

         

        3,项目父目录放一个脚本文件 startweb.sh

                运行脚本 : ./startweb.sh

#!/bin/bash

image_name='apiimage'
contrainer_name='apiproject'
git_url='https://gitee.com/daixxxxx/apidemo.git'
project_name='apidemo'
prot=900

if [ ! -d "./${project_name}/" ];then
    echo "项目目录不存在"
	# 克隆代码
	git clone ${git_url}

	# 进入项目目录
	cd ${project_name}

	# 制作镜像 apiimage:镜像名
	docker build -t ${image_name} .
 
	# 运行容器  apidemo:容器名 
	docker run  -v /usr/local/web/apilog:/log \
	-d --name ${contrainer_name} -p ${prot}:80 ${image_name}

    
else
    echo "项目已经存在"
    # 进入dockerfile所在目录
   	cd ./${project_name}
  	# 拉取最新代码
   	git pull ${git_url}
	# 停止apidemo容器
	docker stop ${contrainer_name}
	# 删除容器
	docker rm ${contrainer_name}
	# 制作镜像
	docker build -t ${image_name} .
	# 运行容器  apidemo:容器名 
	docker run  -v /usr/local/web/apilog:/log \
	-d --name ${contrainer_name} -p ${prot}:80 ${image_name}
fi


# 检查容器运行状态
status=$(docker inspect --format='{{.State.Status}}' "$contrainer_name")
if [ "$status" = "running" ];then
	echo "项目部署成功"
else
	echo "项目部署失败"
fi

        4 ,后续持续集成:提交代码 >> 运行脚本startweb.sh

# cd 到脚本目录
./startweb.sh

        5,停止项目        

# 停止容器apiproject
docker stop apiproject

Jenkins 持续集成

        持续更新。。。

k8s 持续集成

        持续更新。。。

### 腾讯云服务器 FastAPI 项目部教程 #### 准备工作 在开始之前,确保已经完成以下准备工作: - 已经拥有一台腾讯云轻量应用服务器并配置好基础环境。 - 宝塔面板已安装并运行正常。 #### 部署步骤说明 ##### 1. 创建虚拟环境 为了隔离项目的依赖项,在服务器上创建一个新的 Python 虚拟环境是一个良好的实践。可以通过以下命令实现: ```bash python3 -m venv env source env/bin/activate ``` 此操作会创建一个名为 `env` 的虚拟环境,并激活它[^1]。 ##### 2. 安装必要的依赖包 进入项目目录后,通过 `pip install` 命令安装所需的库。如果尚未生成需求文件,则可以使用工具如 `pipreqs` 自动生成: ```bash pip install pipreqs pipreqs ./ --encoding=utf8 ``` 上述命令会在当前目录下生成一个 `requirements.txt` 文件,其中包含了所有必需的依赖项。 接着按照该文件中的列表来安装所有的依赖: ```bash pip install -r requirements.txt ``` ##### 3. 使用 Gunicorn 启动 FastAPI 应用程序 FastAPI 推荐配合 ASGI 服务器一起使用,比如 Uvicorn 或者 Gunicorn 来处理生产级别的请求负载。下面展示如何利用 Gunicorn 运行应用程序: 编辑启动脚本 `start.sh` 如下所示: ```bash #!/bin/bash gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app --access-logfile access.log --error-logfile error.log ``` 在此处 `-w 4` 表示开启四个 worker 进程;`main:app` 是指代你的入口模块名以及内部定义的应用实例名称,请依据实际情况调整。 赋予脚本可执行权限并通过后台方式运行服务: ```bash chmod +x start.sh nohup ./start.sh >> app.out 2>&1 & ``` 这一步骤类似于其他框架的服务启动方法[^2]。 ##### 4. 设置反向代理 (Nginx) 为了让外部能够访问到本地监听端口上的 API 数据接口,通常还需要设置 Nginx 反向代理规则。打开宝塔面板内的站点管理界面,找到对应域名下的配置文件选项卡,添加如下内容至 server {} 块内: ```nginx location / { proxy_pass http://127.0.0.1:<your_port>; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } ``` 记得替换 `<your_port>` 成实际使用的 gunicorn 绑定地址与端口号。 最后保存更改并重启 nginx 生效即可成功对外提供 fastapi web service 功能支持! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值