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上的,所以我们需要将没必要上传的文件不上传
fastapi入门八部署到服务器虚拟环境上_第1张图片
在plugins里搜索ignore,安装,然后重启
fastapi入门八部署到服务器虚拟环境上_第2张图片
重启后
fastapi入门八部署到服务器虚拟环境上_第3张图片
注意,如果你的项目已经上传过github了,这个ignore文件是对已经上传的东西不管用的,需要清除缓存之后才可以使用

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

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

推送到github上

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

fastapi入门八部署到服务器虚拟环境上_第4张图片

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

git branch -M main

然后将

git push -u origin main

替换为

git push -u origin mastrt

部署到jenkins上

fastapi入门八部署到服务器虚拟环境上_第5张图片

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

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

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

/var/lib/jenkins/workspace/fastapitest

fastapi入门八部署到服务器虚拟环境上_第12张图片
接下来我们看一下脚本的内容

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的路径

部署验证

fastapi入门八部署到服务器虚拟环境上_第13张图片
对,没有看错,我尝试过100多次,才将项目部署保持稳定,太难了,还是知识储备不够。
fastapi入门八部署到服务器虚拟环境上_第14张图片
尝试着请求接口
fastapi入门八部署到服务器虚拟环境上_第15张图片
再检查一下日志

[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

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

你可能感兴趣的:(Python,持续集成,服务器,运维,http)