fastApi 项目部署

方式一,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 uvicornapp = FastAPI()
'''
启动命令
uvicorn main:app --reload --port 8000#导出依赖
pip freeze >requirements.txtapi文档地址
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,停止服务

        查找进程  >> kill 进程

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 pip install --no-cache-dir --upgrade -r /code/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/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/bashimage_name='apiimage'
contrainer_name='apiproject'
git_url='https://gitee.com/daixxxxx/apidemo.git'
project_name='apidemo'
prot=900if [ ! -d "./${project_name}/" ];thenecho "项目目录不存在"# 克隆代码git clone ${git_url}# 进入项目目录cd ${project_name}# 制作镜像 apiimage:镜像名docker build -t ${image_name} .# 运行容器  apidemo:容器名docker run -d --name ${contrainer_name} -p ${prot}:80 ${image_name} elseecho "项目已经存在"# 进入dockerfile所在目录cd ./${project_name}# 拉取最新代码git pull ${git_url}# 停止apidemo容器docker stop ${contrainer_name}# 删除容器docker rm ${contrainer_name}# 制作镜像docker build -t ${image_name} .# 运行容器docker run -d --name ${contrainer_name} -p ${prot}:80 ${image_name}
fi# 检查容器运行状态
status=$(docker inspect --format='{{.State.Status}}' "$contrainer_name")
if [ "$status" = "running" ];thenecho "项目部署成功"
elseecho "项目部署失败"
fi

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

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

        5,停止项目        

# 停止容器apiproject
docker stop apiproject

Jenkins 持续集成

        持续更新。。。

k8s 持续集成

        持续更新。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/590417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode每日一题周汇总 (12.24-12.30)

Leetcode每日一题周汇总 (12.24-12.30) 1.Sunday (12.24) 题目链接:1954. 收集足够苹果的最小花园周长 - 力扣(LeetCode) 题目描述: 给你一个用无限二维网格表示的花园,每一个 整数坐标处都有一棵苹果树。整数坐标…

设计模式设计原则——依赖倒置原则(DIP)

DIP:Dependence Inversion Principle 原始定义:High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions。 官…

Stable Diffusion API入门:简明教程

Stable Diffusion 是一个先进的深度学习模型,用于创造和修改图像。这个模型能够基于文本描述来生成图像,让机器理解和实现用户的创意。使用这项技术的关键在于掌握其 API,通过编程来操控图像生成的过程。 在探索 Stable Diffusion API 的世界…

ROS TF坐标变换 - TF树

目录 一、TF树介绍二、TF2与TF三、构建TF树四、rviz查看TF坐标关系 一、TF树介绍 在机器人系统中,存在运动学模型和动力学模型。对于刚体机器人,动力学模型基于刚体动力学,代表机器人系统在运动过程中力/力矩与其运动状态的变化关系。而运动…

【索引的数据结构】第1章节:B+Tree存储结构

目录结构 之前整篇文章太长,阅读体验不好,将其拆分为几个子篇章。 本篇章讲解 BTree 存储结构。 什么是索引 可以简单理解为索引好比一本书的目录,通过目录我们可以快速定位到我们要查看的章节。 MySQL 中的数据同样也是根据索引分类&…

Vue中目录以及文件内容简单分析

src文件下目录分析&#xff1a; App.vue文件中内容&#xff1a; vue文件中基本的三个结构&#xff0c;template&#xff08;结构&#xff09;、script&#xff08;行为&#xff09; 、style&#xff08;样式&#xff09;。 <template><!-- html结构 --><div cl…

linux释放交换空间-Swap

确保剩余内存比swap内存空间大&#xff0c;再执行以下操作&#xff0c;否则会宕机&#xff01; 查看swap分区 swapon -s 会查看到你的swap分区位置 停止swap分区 停止swap分区是将swap内存释放到实际内存中 swapoff /dev/dm-1开启swap分区 swap分区内存成功释放到实际内…

C# 如何读取Excel文件

当处理Excel文件时&#xff0c;从中读取数据是一个常见的需求。通过读取Excel数据&#xff0c;可以获取电子表格中包含的信息&#xff0c;并在其他应用程序或编程环境中使用这些数据进行进一步的处理和分析。本文将分享一个使用免费库来实现C#中读取Excel数据的方法。具体如下&…

2 - 表结构 | MySQL键值

表结构 | MySQL键值 表管理1. 库的操作2. 表的操作表的创建与删除表的修改复制表 3. 管理表记录 数据类型数值类型字符类型&#xff08;汉字或者英文字母&#xff09;日期时间类型 表头存储与日期时间格式的数据枚举类型 数据批量处理 表管理 客户端把数据存储到数据库服务器上…

开始使用MEVN技术栈开发01 概述

开始使用MEVN技术栈开发01 概述 简介 Welcome to Beginning MEVN Stack! This book focuses on the key tasks and concepts to get you started to learn and build MEVN stack applications in a faster pace. 欢迎阅读《MEVN堆栈入门》&#xff01;本书重点介绍关键任务…

Serverless Framework:开发无服务器应用的最佳工具 | 开源日报 No.133

serverless/serverless Stars: 45.6k License: MIT 该项目是 Serverless Framework&#xff0c;它是一个命令行工具&#xff0c;使用简单易懂的 YAML 语法部署代码和云基础设施以满足各种无服务器应用程序需求。支持 Node.js、Typescript、Python、Go 等多种编程语言&#xff…

【AI】人类视觉感知特性与深度学习模型(1/2)

目录 一、关于人类视觉感知 1.1 视觉关注 1.自上而下&#xff08;Top-down&#xff09;的视觉关注 ​编辑 2.自下而上&#xff08;Bottom-up&#xff09;的视觉关注 3.区别和记忆点 1.2 视觉掩盖 1.常见的视觉掩盖效应 2.恰可识别失真&#xff08;Just Noticeable Dif…

概念解析 | Shapley值及其在深度学习中的应用

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:Shapley值及其在深度学习中的应用。 1 背景介绍 在机器学习和数据分析中,理解模型的预测是非常重要的。尤其是在深度学习黑盒模型中,我们往往难以直观地理解模型的预测行为。为…

软件测试/测试开发丨接口测试之Postman 安装与使用

Postman 安装 官网下载地址 www.postman.com/downloads Postman 使用 发送get请求 新建请求 填写请求方式&#xff1a;GET 填写请求 URL&#xff1a; ceshiren.com/httpbin.ceshiren.com/get 填写请求参数&#xff1a; para_key para_value 发送 POST 请求 请求方式&…

1. Spring概述

概述 Spring 是一个开源框架Spring 为简化企业级开发而生&#xff0c;使用 Spring&#xff0c;JavaBean 就可以实现很多以前要靠 EJB 才能实现的功能。同样的功能&#xff0c;在 EJB 中要通过繁琐的配置和复杂的代码才能够实现&#xff0c;而在 Spring 中却非常的优雅和简洁。…

2023年总结(2023年1月1日至2023年12月31日)

前言 时间过得真快啊&#xff0c;一年又过去了。 从去年11月换了家公司后&#xff0c;工作就稳定多了&#xff0c;做的工作也是我喜欢做的工作——摄像头驱动&#xff0c;平时也挺轻松的&#xff0c;偶尔有事儿的时候会压力大点&#xff0c;加点班&#xff0c;其他都还好&…

4年微博热搜数据,一次拿走

又是新的一年了&#xff0c;从2020年开始&#xff0c;就养成了定时备份各大平台热搜数据的习惯&#xff0c;微博&#xff0c;知乎都在备份&#xff0c;今天给大家看一下从2020年到2023年的微博热搜数据情况 这是2022年的备份数据&#xff0c;每天的热搜数据一个文件&#xff0c…

2.2 设计FMEA步骤二:结构分析

2.2.1 目的 设计结构分析的目的是将设计识别和分解为系统、子系统、组件和零件,以便进行技术风险分析。其主要目标包括: 可视化分析范围结构化表示:方块图、边界图、数字模型、实体零件识别设计接口、交互作用和间隙促进顾客和供应商工程团队之间的协作(接口责任)为功能分…

计算机组成原理——中央处理器cpu21-40

18、某计算机的指令流水线由4个功能段组成&#xff0c;指令流经各功能段的时间&#xff08;忽略各功能段之间的缓存时间&#xff09;分别为90ns、80ns、70ns和60ns&#xff0c;则该计算机的CPU时钟周期至少是多少。A A、 90ns     B、 80ns C、 70ns     D、 60ns …

【日常聊聊】解决深度学习模型挑战:解释性与鲁棒性的平衡

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 1. 数据偏见&#xff1a; 介绍和解释&#xff1a; 解决方法&#xff1a; 2. 复制训练数据&#xff1a; 介绍和解决方法&am…