fastapi入门八部署到服务器虚拟环境上

fastapi入门八部署到服务器虚拟环境上

启动文件如何写

import uvicorn
from fastapi import FastAPI, HTTPException, Query

app = FastAPI()

people_id_str = {"1": "2"}
people_id_int = [1, 2, 3, 4, 5]


@app.post("/fastapi/{people_idone}")
async def postdate(
        people_idone: int,
        people_id_three: str = Query("1")
):
    if people_idone not in people_id_int:
        raise HTTPException(status_code=400, detail="people_idone不在范围里",headers={"nice":"what"})
        # 如果people_idone不在列表people_id_int里,那就报错400,并新增一个headers
    if people_id_three not in people_id_str:
        raise HTTPException(status_code=401, detail="people_id_three不在范围里")
        # 如果people_id_three不在people_id_str里,那就报错401
    return {"people_id": people_idone, "people_id_three": people_id_str[people_id_three]}


if __name__ == "__main__":
    uvicorn.run(app='start:app', host='0.0.0.0', port=8091, reload=True, debug=True)

需要注意的是,host一定要修改为0.0.0.0,不能是127.0.0.1,如果你设置为了127.0.0.1,那你就会发现,只有你自己可以访问的到(通过curl访问),为什么。看一下这篇文章
传送门

严格说来,0.0.0.0已经不是一个真正意义上的IP地址了。它表示的是这样一个集合:所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一律送进去。

本机地址,主要用于测试。用汉语表示,就是“我自己”。

生成requirements.txt

首先,我们代码开发完成之后

(venv) ZHR:fastapitest zc$ pip3 freeze > requirements.txt

然后会在项目的根目录下生成一个requirements.txt,里面有所有的这个项目依赖的包,比如下面的这样

anyio==3.4.0
asgiref==3.4.1
click==8.0.3
fastapi==0.70.0
h11==0.12.0
idna==3.3
pydantic==1.8.2
sniffio==1.2.0
starlette==0.16.0
typing_extensions==4.0.0
uvicorn==0.15.0

生成ignore文件

我们项目中很多文件都是不需要上传到github上的,所以我们需要将没必要上传的文件不上传
在这里插入图片描述
在plugins里搜索ignore,安装,然后重启
在这里插入图片描述
重启后
在这里插入图片描述
注意,如果你的项目已经上传过github了,这个ignore文件是对已经上传的东西不管用的,需要清除缓存之后才可以使用

(venv) ZHR:fastapitest zc$ git rm -r --cached .

这样之后上传到github上就不会有venv等用不到的内容上传上去

推送到github上

在github上新建了项目之后会有怎么上传到github的指导

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NRx672Wh-1639039071311)(/Users/zc/Library/Application Support/typora-user-images/image-20211209155235131.png)]

但是,推荐不要执行(据说新增了这个世因为黑命贵,master,slave,让人想起黑奴)

git branch -M main

然后将

git push -u origin main

替换为

git push -u origin mastrt

部署到jenkins上

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于github经常链接不上,就很烦,那么我们可以链接github的镜像地址
就例如上面的这个地址,将
https://github.com/
修改为
https://hub.fastgit.org/
就可以了
在这里插入图片描述
着重讲一下这个SSH Publishers,因为之前我也对这个理解的比较敷衍
要知道这个的逻辑,要先知道当初我们怎么配置的Publish over SSH
在这里插入图片描述
还需要知道我们新建的这个项目是保存在哪里的,随便找一个之前部署过的其他的项目,从控制台输出就知道项目在哪里了
在这里插入图片描述
比如说上面这个,说明我们的jenkins项目是在Jenkins所在主机

/var/lib/jenkins/workspace/大风起兮云飞扬

那我们新建的fastapitest项目就会在远程主机(也就是Jenkins部署完成后,将部署出来的内容推送到另一台主机上部署,这才是真实的生产部署方式)的

/var/lib/jenkins/workspace/fastapitest

在这里插入图片描述
接下来我们看一下脚本的内容

base_dir=/usr/local/JenkinsAndSpring/
project_dir=fastapitest
url_dir=/usr/local/JenkinsAndSpring/fastapitest/venv/bin/python3
pid=$(ps -ef | grep "${url_dir}" | grep -v grep | awk '{print $2}')
$(kill -9 ${pid})
$(cd ${base_dir}${project_dir})
$(rm -rf *)
virtualenv -p python3 --system-site-packages  ${base_dir}${project_dir}/venv
$(source ${base_dir}${project_dir}/venv/bin/activate)
$(pwd)
if [ -f ${base_dir}${project_dir}/requirements.txt ];then
    ${base_dir}${project_dir}/venv/bin/python3 -m pip install -r ${base_dir}${project_dir}/requirements.txt --default-timeout=10000 && echo 0 || echo 0
fi
nohup ${url_dir} ${base_dir}${project_dir}/start.py  >${base_dir}${project_dir}/log.log 2>&1 &
echo "+++++++++++++ 开始运行 +++++++++++++"

这里面需要注意的点
1、由于项目是占用端口的,所以每次部署的时候要先杀死原来的端口才可以,我们只需要将/usr/local/JenkinsAndSpring/fastapitest/venv/bin/python3的端口停掉即可。
2、不知道为什么,最后执行start.py的时候就一直提示找不到文件,明明已经cd到了项目目录,没办法,在脚本里新增了一个url_dir,手动将目录定位到start.py的路径

部署验证

在这里插入图片描述
对,没有看错,我尝试过100多次,才将项目部署保持稳定,太难了,还是知识储备不够。
在这里插入图片描述
尝试着请求接口
在这里插入图片描述
再检查一下日志

[root@hecs-82454 fastapitest]# cat log.log 
INFO:     Will watch for changes in these directories: ['/root']
INFO:     Uvicorn running on http://0.0.0.0:8091 (Press CTRL+C to quit)
INFO:     Started reloader process [9052] using statreload
INFO:     Started server process [9056]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     222.249.228.194:25938 - "POST /fastapi/1?people_id_three=1 HTTP/1.1" 200 OK
[root@hecs-82454 fastapitest]# pwd
/usr/local/JenkinsAndSpring/fastapitest

完美,多部署几次也没问题,大功告成

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 可以使用 Docker 部署 FastAPI 应用程序,也可以使用 uWSGI 或 Gunicorn 部署。在 Ubuntu 上,可以使用 Nginx 作为反向代理服务器来处理请求。具体的部署步骤可以参考 FastAPI 的官方文档。 ### 回答2: 在Ubuntu上部署FastAPI可以按照以下步骤进行: 1. 首先,确保已经安装了Python和pip。 ``` $ sudo apt update $ sudo apt install python3 $ sudo apt install python3-pip ``` 2. 创建一个新的虚拟环境(可选但推荐)。 ``` $ python3 -m venv myenv $ source myenv/bin/activate ``` 3. 安装FastAPI和uvicorn。 ``` $ pip3 install fastapi $ pip3 install uvicorn ``` 4. 编写一个FastAPI应用程序。 ```python from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"} ``` 5. 使用uvicorn运行应用程序。 ``` $ uvicorn main:app --host 0.0.0.0 --port 8000 ``` 这将在本地主机的8000端口上运行应用程序。 6. 若要在生产环境中使用FastAPI,您可以使用Gunicorn作为反向代理服务器。 ``` $ pip3 install gunicorn $ gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app ``` 这将在8000端口上运行FastAPI应用程序,并使用4个工作进程进行请求处理。 通过按照以上步骤,在您的Ubuntu服务器部署FastAPI应用程序应该是比较简单的。您可以根据您的需求进行进一步配置和调整。 ### 回答3: 要将FastAPI部署在Ubuntu上,可以按照以下步骤进行操作: 1. 确保Ubuntu系统已正确安装和配置。确保系统处于最新更新状态,可以通过运行`sudo apt update && sudo apt upgrade`命令来更新系统。 2. 安装Python和相关依赖。FastAPI是用Python编写的,因此需要在Ubuntu上安装Python及其相关依赖。在终端中运行以下命令安装Python: ``` sudo apt install python3-dev python3-pip ``` 3. 创建并激活虚拟环境(可选)。为了避免与系统中的其他Python软件包发生冲突,可以创建一个虚拟环境来安装和运行FastAPI。在终端中运行以下命令创建虚拟环境: ``` python3 -m venv myenv source myenv/bin/activate ``` 4. 安装FastAPI和其它软件包。在虚拟环境中运行以下命令来安装FastAPI和相应的依赖: ``` pip install fastapi[all] ``` 这将安装FastAPI及其所有附带的依赖,包括uvicorn作为默认的Web服务器。 5. 编写FastAPI应用程序。创建一个Python文件,例如`main.py`,使用FastAPI编写你的应用程序逻辑。例如,你可以创建一个简单的接口,显示一个Hello World消息。示例代码如下: ```python from fastapi import FastAPI app = FastAPI() @app.get("/") async def read_root(): return {"Hello": "World"} ``` 6. 启动FastAPI应用程序。在终端中运行以下命令,启动FastAPI应用程序: ``` uvicorn main:app --host 0.0.0.0 --port 8000 ``` 这将使FastAPI应用程序在本地主机的8000端口上运行。 7. 在浏览器中测试。使用浏览器或任何HTTP客户端工具,访问`http://localhost:8000`,你将看到FastAPI应用程序返回的Hello World消息。 通过按照以上步骤,在Ubuntu上成功部署和运行FastAPI应用程序。这使你能够构建高性能、现代化的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值