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

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#
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

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

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

        5,停止项目        

# 停止容器apiproject
docker stop apiproject

Jenkins 持续集成

        持续更新。。。

k8s 持续集成

        持续更新。。。

相关文章:

fastApi 项目部署

方式一,Uvicorn部署 Run a Server Manually - Uvicorn - FastAPI 1,linux服务器安装 python>3.8 2,安装 uvicorn : pip install "uvicorn[standard]" 3,上传项目到服务器 main.py from typing imp…...

python操作mysql数据库

说明:这里仅仅为了演示python操作MySQL数据库,真实环境中,最好把CURD分别封装为对应的方法。并将这些方法在类中封装,体现python面向对象的特征。python链接MySQL数据库 建表 create database mydb; use mydb; create table EMP…...

Redis6.0 Client-Side缓存是什么

前言 Redis在其6.0版本中加入了Client-side caching的支持,开启该功能后,Redis可以将指定的key-value缓存在客户端侧,这样当客户端发起请求时,如果客户端侧存在缓存,则无需请求Redis Server端。 Why Client-side Cac…...

Leetcode—1572.矩阵对角线元素的和【简单】

2023每日刷题&#xff08;七十三&#xff09; Leetcode—1572.矩阵对角线元素的和 实现代码 class Solution { public:int diagonalSum(vector<vector<int>>& mat) {int n mat.size();if(n 1) {return mat[0][0];}int sum 0;int i 0, j n - 1;while(i &…...

基于SpringBoot的二手手机商城系统的设计与实现

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的二手手机商城系统的设计…...

OpenFeign相关面试题及答案

1、什么是OpenFeign&#xff0c;它如何简化远程服务调用&#xff1f; OpenFeign是一个声明式的Web服务客户端&#xff0c;它使得编写HTTP客户端变得更加容易。它属于Spring Cloud Netflix项目的一部分&#xff0c;可以与Spring Boot应用轻松集成。通过使用OpenFeign&#xff0…...

c盘扩容时,d盘无法删除卷问题

C盘扩容时&#xff0c;磁盘管理中D盘右键无法删除卷的原因 首先&#xff0c;D盘下文件夹为空&#xff0c;但是显示可用空间不是100%&#xff0c;经过排查&#xff0c;发现是虚拟内存设置在了D盘导致无法删除卷&#xff0c;这里只需要将虚拟内存放到其他盘&#xff0c;如E盘即可…...

NumPy 中级教程——广播(Broadcasting)

Python NumPy 中级教程&#xff1a;广播&#xff08;Broadcasting&#xff09; 在 NumPy 中&#xff0c;广播是一种强大的机制&#xff0c;它允许不同形状的数组在进行操作时&#xff0c;自动进行形状的调整&#xff0c;使得它们能够完成一致的运算。广播使得对数组的操作更加…...

python-39-flask+nginx+Gunicorn的组合应用

flask nginx Gunicorn 王炸 1 flasknginxgunicornsupervisor 1.1 myapp.py from flask import Flask app Flask(__name__)app.route("/") def test_link():return "the link is very good"if __name__"__main__":app.run()默认是5000端口…...

C#-CSC编译环境搭建

一.Microsoft .NET Framework 确保系统中安装Microsoft .NET Framework相关版本下载 .NET Framework 4.7 | 免费官方下载 (microsoft.com)https://dotnet.microsoft.com/zh-cn/download/dotnet-framework/net47 二.编译环境搭建 已经集成编译工具csc.exe,归档至gitcode,实现us…...

【JVM】一文掌握JVM垃圾回收机制

作为Java程序员,除了业务逻辑以外,随着更深入的了解,都无法避免的会接触到JVM以及垃圾回收相关知识。JVM调优是一个听起来很可怕,实际上很简单的事。 感到可怕,是因为垃圾回收相关机制都在JVM的C++层实现,我们在Java开发中看不见摸不着;而实际很简单,是因为它说到底,也…...

【AIGC风格prompt】风格类绘画风格的提示词技巧

风格类绘画风格的提示词展示 主题&#xff1a;首先需要确定绘画的主题&#xff0c;例如动物、自然景观、人物等。 描述&#xff1a;根据主题提供详细的描述&#xff0c;包括颜色、情感、场景等。 绘画细节&#xff1a;描述绘画中的细节&#xff0c;例如表情、纹理、光影等。 场…...

vue exceljs json数据转excel

json数据转excel 有时候我们会遇到这样一个需求&#xff0c;就是将数据转成excel下载&#xff0c;这一般都是由后端来处理&#xff0c;使用插件poi轻松搞定。如果只有少量数据&#xff0c;那么能不能避免调用后端接口&#xff0c;前端直接处理呢&#xff1f; 答案是&#xff…...

Navicat for MySQL 创建函数——报错1418

解决方法 1查看是否开启了创建函数的功能 输入下面语句查看是否开启了创建函数的功能 show variables like %func%; 下面为创建函数功能为开启的查询结果 如果不是上面的结果可以用下面的语句修改为开启 set GLOBAL log_bin_trust_function_creatorstrue; //或 set GLOBAL …...

java球队信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web球队信息管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5…...

设计模式(4)--对象行为(7)--观察者

1. 意图 定义对象间的一种一对多的依赖关系&#xff0c; 当一个对象的状态改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 2. 四种角色 抽象目标(Subject)、具体目标(Concrete Subject)、抽象观察者(Observer)、 具体观察者(Concrete Observer) 3. 优点 3.1 …...

MySQL所有常见问题

一、事务 定义:一组操作要么全部成功,要么全部失败,目的是为了保证数据最终的一致性 在MySQL中,提供了一系列事务相关的命令: start transaction | begin | begin work:开启一个事务commit:提交一个事务rollback:回滚一个事务事务的ACID 原子性(Atomicity):当前事…...

锐捷交换机配置 SNMP

配置步骤 ( SNMP v2 ) 步骤一 -- 创建共同体(Community) ruijie(config)#snmp-server community test rw # rw 为读和写口令ruijie(config)#snmp-server community public ro # ro 为只读和写口令这里的共同体为“test”,通常只读口令和读写口令单独配置,提升安…...

Windows 10 安装和开启VNCServer 服务

Windows 10 安装和开启VNCServer 服务 登录云服务器 使用本地RDP登录到配置VNCServer服务的Windows10系统的云服务器。 下载VNC Server安装包 打开官网下载VNCServer安装包 URL&#xff1a;https://www.realvnc.com/en/connect/download/vnc/windows/ 安装VNC Server 双击…...

js遍历后端返回的集合将条件相同的放入同一个数组内

项目场景&#xff1a; echarts折线图需要根据条件动态展示多条不同曲线 解决方案&#xff1a; 后端直接将使用sql将数据查询出来返回即可,因为我这里不是Java使用的C#不是很熟练后台不好写逻辑,所以在前端js完成的 代码如下: function createline(villagename, buildingname…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

CppCon 2015 学习:REFLECTION TECHNIQUES IN C++

关于 Reflection&#xff08;反射&#xff09; 这个概念&#xff0c;总结一下&#xff1a; Reflection&#xff08;反射&#xff09;是什么&#xff1f; 反射是对类型的自我检查能力&#xff08;Introspection&#xff09; 可以查看类的成员变量、成员函数等信息。反射允许枚…...

Java中HashMap底层原理深度解析:从数据结构到红黑树优化

一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一&#xff0c;是基于哈希表的Map接口非同步实现。它允许使用null键和null值&#xff08;但只能有一个null键&#xff09;&#xff0c;并且不保证映射顺序的恒久不变。与Hashtable相比&#xff0c;Hash…...