fastApi 项目部署

news2025/2/25 10:40:53

方式一,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,停止服务

        查找进程  >> 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/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 -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} .
	# 运行容器
	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 持续集成

        持续更新。。。

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

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

相关文章

机场信息集成系统系列介绍(6):机场协同决策支持系统ACDM*续集

目录 1、A-CDM实施效果评估背景 2、评估核心指标项 (1)机位效率 (2)登机效率 (3)推出效率 (4)滑行效率 (5)协同效率 3、其他指标项 (1&a…

使用 Hyper-V 创建虚拟机

使用 Hyper-V 创建虚拟机 官网教程修改存储目录Hyper-V管理器创建虚拟机启动虚拟机Win10安装教程Press any key to boot from CD or DVD...... 如何使用Windows自带的虚拟机工具来创建虚拟机, 快速创建虚拟机进行学习探讨,如果有环境问题可以立即创建一个…

Vue-Setup

一、setup概述 小小提示&#xff1a;vue3中可以写多个根标签。 Person.vue中内容 <template><div class"person"><h2>姓名&#xff1a;{{name}}</h2><h2>年龄&#xff1a;{{age}}</h2><!--定义了一个事件&#xff0c;点击这…

【Image】超硬核数学推导——WGAN的先“破”后“立”

GAN的实现 上一篇文章中我们说到了GAN的数学解释 min ⁡ G max ⁡ D V ( D , G ) E x ∼ p data ( x ) [ log ⁡ D ( x ) ] E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] − log ⁡ 4 2 J S D ( p data ∥ p g ) ≥ − log ⁡ 4 , where [ p d a t a p g ] \mi…

node相关的args属性与<param>子标签的区别

launch文件内&#xff1a;node标签内的<param>标签示例&#xff1a; 可以看到launch文件内的<param>标签在命令行内会转化为--ros-args -p 这样格式的命令&#xff0c;说明<param>标签指定的是ros2内的参数。不能用于传递非ros2的传入参数 如果要传入非ros2…

【测试基础】构造测试数据之 MySQL 篇

构造测试数据之 MySQL 篇 作为一名测试工程师&#xff0c;我们经常会构造测试数据进行一些功能验证。为了暴露更多的问题&#xff0c;在测试数据的构造上&#xff0c;我们应该尽可能的构造不同类型字段的数据&#xff0c;且一张表的字段最好不低于 10 10 10 个。 对于 MySQL …

在高并发场景下,缓存“雪崩”了怎么办

1. 缓存雪崩的常见原因 缓存“雪崩”是指&#xff0c;因为部分缓存节点不可用&#xff0c;而导致整个缓存系统&#xff08;甚至是整个服务系统&#xff09;不可用。缓存“雪崩”主要分为以下两种情况&#xff1a; 因缓存不支持 rehash 而导致的缓存“雪崩”缓存支持 rehash 时…

基于Vite创建简单Vue3工程

首先安装node.js环境&#xff0c;没有node.js环境&#xff0c;便没有npm命令。 1、Vue3创建执行命令 D:\TABLE\test>npm create vuelatestVue.js - The Progressive JavaScript Framework√ 请输入项目名称&#xff1a; ... vue_test √ 是否使用 TypeScript 语法&#xff…

很想写一个框架,比如,spring

很想写一个框架&#xff0c;比如&#xff0c;spring。 原理很清楚&#xff0c;源码也很熟悉。 可惜力不从心&#xff0c;是不是可以找几个小弟一起做。

Stata18软件安装包下载及安装教程

Stata 18下载链接&#xff1a;https://docs.qq.com/doc/DUm5pRlFJaWV5aWtY 1.选中下载好的安装包&#xff0c;右键选择解压到“Stata18”文件夹 2.选中“SetupStata18.exe”&#xff0c;右键以管理员身份运行 3.点击“Next” 4.选择“I accept.....”,选择“Next” 5.点击“Nex…

分布式系统架构设计之分布式数据存储的扩展方式、主从复制以及分布式一致性

三、水平扩展和垂直扩展 在分布式系统中&#xff0c;数据存储的扩展是为了适应业务的增长和提高系统的性能。分为水平扩展和垂直扩展两种方式&#xff0c;这两种方式在架构设计和应用场景上有着不同的优势和局限性。 水平扩展 水平扩展是通过增加节点或服务器的数量来扩大整…

【Vulnhub 靶场】【Looz: 1】【简单】【20210802】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/looz-1,732/ 靶场下载&#xff1a;https://download.vulnhub.com/looz/Looz.zip 靶场难度&#xff1a;简单 发布日期&#xff1a;2021年08月02日 文件大小&#xff1a;2.1 GB 靶场作者&#xff1a;mhz_cyber &…

开发Python网络爬虫应用,爬取链家新房楼盘信息保存到mongodb中,并分析相关数据

这里写自定义目录标题 爬取代码分析数据问题 爬取代码 import requests import time from lxml import html from pymongo import MongoClient import randomBASEURL https://cq.fang.lianjia.com/loupan/# 获取某市区域的所有链接 def get_areas(url):print(获取区县列表)# …

QT上位机开发(抽奖软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 用抽奖软件抽奖&#xff0c;是一种很常见的抽奖方式。特别是写这篇文章的时候&#xff0c;正好处于2023年12月31日&#xff0c;也是一年中最后一天…

蓝牙物联网智能门控系统设计方案

随着电子信息技术的飞速发展&#xff0c;物联网技术提升到国家战略高度&#xff0c;研发和应用进程加速并不断取得实质性进展。物联网核心技术包括传感测试技术、网络通信技术、云计算等&#xff0c;具有广域覆盖、大容量、超低功耗和低成本等特点&#xff0c;目前在远程监控、…

win11 电脑睡眠功能失效了如何修复 win11 禁止鼠标唤醒

1、win11睡眠不管用怎么办&#xff0c;win11电脑睡眠功能失效了如何修复 在win11系统中拥有许多令人激动的新功能和改进&#xff0c;有些用户在使用win11电脑时可能会遇到一个问题&#xff1a;睡眠模式不起作用。当他们尝试将计算机置于睡眠状态时&#xff0c;却发现系统无法进…

学习SpringCloud微服务

SpringCloud 微服务单体框架微服务框架SpringCloud微服务拆分微服务差分原则拆分商品服务拆分购物车服务拆分用户服务拆分交易服务拆分支付服务服务调用RestTemplate远程调用 微服务拆分总结 服务治理注册中心Nacos注册中心服务注册服务发现 OpenFeign实现远程调用快速入门引入…

Plantuml之JSON数据语法介绍(二十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Spring Cloud + Vue前后端分离-第10章 基于阿里云OSS的文件上传

源代码在GitHub - 629y/course: Spring Cloud Vue前后端分离-在线课程 Spring Cloud Vue前后端分离-第10章 基于阿里云OSS的文件上传 前面介绍的文件上传是基于本地文件服务器的文件上传&#xff0c;但是自己搭文件服务器会有很多运维的问题&#xff0c;比如磁盘满了要扩容…

VMware虚拟机之文件夹共享jdk和tomcat安装防火墙设置

目录 一. 配置文件夹共享功能 1.1 为什么需要配置文件夹共享功能 1.2 配置文件共享功能 1.3 普通共享和高级共享的区别 1.3.1 普通共享 1.3.2 高级共享 1.3.3 总结 二. jdk的配置 2.1 安装jdk 2.2 配置jdk的环境配置jdk 2.3 配置成功 三. TomCat的配置 四. 防火墙设置 4.1…