|
文章目录前言&需求描述1.本地FastAPI1.1Python环境准备1.2本地Pycharm创建FastAPI项目2.PythonFastAPI部署2.1服务器配置Python环境2.2.1下载与配置Git、Pyenv等工具2.2.2下载与配置Python2.2FastAPI打包成镜像2.2.1项目准备所需环境文件2.2.2编写DockerFile2.2.3服务器拉取代码2.2.4制作镜像2.3Docker挂载3.补充与总结3.1补充:Swaggerui显示问题3.2pyenv常用命令及下载过慢问题3.2总结4.唠嗑4.1为啥一上来就是项目4.2为啥没写东西就开始部署参考资料来自JAVA程序猿对Pythonfastapi的探索前言&需求描述需求描述构建Python环境与服务创建Python项目,部署到服务器上,能以Web的方式访问需求目标当前阶段不需要马上实现若干功能,直接创建FastAPI项目,输出HelloWorld,并能通过Web访问即可。学习目标基于Java技术栈的基础,拐弯学习PythonFastAPI如何使用,第一步是要将PythonFastAPI在本地可用。创建远程仓库用于保存代码,方便日后接着开发。将FastAPI项目部署到服务器,浏览器访问。1.本地FastAPI现学现用!1.1Python环境准备时间关系,这里就不赘述了。2024年初,我记得我2023年时曾经试过2022年收藏过的优秀博主JackCui于2021年发布的教程里的Python环境准备。抱着试一试的态度,cmd下执行python--version:C:\Users\97635>python--versionPython3.9.712成功显示当前我的python版本为3.9.7。说明我本地已经OK了。如果是初学或想参考的读者,可参阅下面链接记述的配置方式:jackcui-Anaconda+Vscode链接参考链接的文章来自JackCui,一位非常优秀的技术博主,我是他的粉丝。1.2本地Pycharm创建FastAPI项目对着文末的B站优秀教程,现学现用,直接开始。创建项目参照下图,创建fastapi项目:参考如图所示,填写项目信息,路径,python解释器等。编辑启动之后,我们在main.py得到如下代码:fromfastapiimportFastAPIapp=FastAPI()@app.get("/")asyncdefroot():return{"message":"HelloWorld"}@app.get("/hello/{name}")asyncdefsay_hello(name:str):return{"message":f"Hello{name}"}12345678910111213看起来像Java一开始给了咱HelloWorld启动类一样,但是有所不同的是,我们需要写一个启动方法方便启动:importuvicornif__name__=="__main__":uvicorn.run("main:app",host="0.0.0.0",port=8080)1234为什么这么写,先不管,但至少我们能读懂:启动端口是8080嘛,经典!启动项目如下图所示,点击启动:有JavaWeb的基础,我们可以直接地址访问:http://localhost:8080/出现{"message":"HelloWorld"}说明成功2.PythonFastAPI部署以前只懂Java部署,会一点Docker部署。现在要部署FastAPI项目咯。2.1服务器配置Python环境第一步,服务器要有相应的Python环境。检查服务器python版本python--version1一般情况下,很多LinuxOS都自带了python,因此我这里:[root@iZwz99y2tt0dh6vqymy7e6Z~]#python--versionPython2.7.512发现当前服务器的python版本与我们所需的3.9.x不一致,此时我们需要用一些管理工具来管理服务器python版本。配置git我们想执行curlhttps://pyenv.run|bash来使用pyenv工具管理服务器python。但贸然执行这句,若服务器无git,会报:pyenv:Gitisnotinstalled,can'tcontinue.因此还需要一个前置工作,在服务器上配置git2.2.1下载与配置Git、Pyenv等工具检查gitgit--version1出现以下则说明要先下载git[root@iZwz99y2tt0dh6vqymy7e6Z~]#git–version-bash:git:commandnotfound12yum下载gityum-yinstallgit1git配置依次配置用户名、邮箱、编辑器,gitconfig--listgitconfig--globaluser.nameusernamegitconfig--globaluser.emailemail@email.com12345生成SSHkey并获取ssh-keygen-trsa-C"email@email.com"1如果没有指定SSHkey目录,root下默认在/root/.ssh/id_rsa.pub1下载pyenv如果服务器用了魔法,或者网络环境非常非常好,使用:curlhttps://pyenv.run|bash下载pyenvpython版本管理工具即可。但一般情况下,懂的都懂,需要想别的方案,例如,参考文末的参考文章,依次执行:环境依赖相关yum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgccmakegdbm-develdb4-devellibpcap-develxz-devellibffi-develliblzma-devel1git克隆:gitclone--depth1https://github.com/pyenv/pyenv.git/usr/local/.pyenv1vim编辑/etc/profile#forpyenvexportPYENV_ROOT="/usr/local/.pyenv"exportPATH="$PYENV_ROOT/binPATH"eval"$(pyenvinit--path)"eval"$(pyenvinit-)"12345让命令生效source/etc/profile12.2.2下载与配置Python有了pyenv,执行pyenvinstall1下载过慢或下载失败解决方案,下文的补充章节会提到。2.2FastAPI打包成镜像2.2.1项目准备所需环境文件由于这是初始化项目,只需要fastapi[all](新手友好,方便)即可,因此,requirements.txt文件只需要:fastapi[all]12.2.2编写DockerFileFROMpython:3.9.7#设置工作目录WORKDIR/home#复制项目文件到工作目录COPY..#安装项目依赖RUNpipinstall--no-cache-dir-rrequirements.txt#对外暴露的端口号EXPOSE18082#启动FastAPI应用CMD["uvicorn","main:app","--host","0.0.0.0","--port","18082"]123456789101112131415162.2.3服务器拉取代码既然在上一小节都下载了git了,那么索性创建仓库,上传代码,再从服务器上将代码拉下拉吧。gitclone12.2.4制作镜像服务器进入项目目录,执行dockerbuilddockerbuild-t.1注意实际执行时将镜像名称换成自己的,之后,等待build即可。2.3Docker挂载我们本地刚刚build的image并未上传到dockerhub,属于本地image,因此我们直接执行dockerrun命令即可在服务器跑起来:dockerrun-d--name-p8000:80001浏览器访问,完成!3.补充与总结3.1补充:Swaggerui显示问题通常,由于fastapi自带的Swaggerui相关js是由国外CDN加载进来的,本地Swagger无法正确显示是十分正常的现象。因此国内很多大佬都出了解决方案教程,我参考的是博客园-fastapiSwagger无法正确显示解决方案CV一通大佬的代码之后,访问http://localhost:8080/docs,Swagger3成功显示:main.py整体代码importuvicornfromfastapiimportFastAPI,applicationsfromfastapi.openapi.docsimportget_swagger_ui_htmldefswagger_monkey_patch(*args,**kwargs):"""fastapi的swaggerui默认使用国外cdn,所以导致文档打不开,需要对相应方法做替换在应用生效前,对swaggeruihtml做替换:paramargs::paramkwargs::return:"""returnget_swagger_ui_html(*args,**kwargs,swagger_js_url='https://cdn.staticfile.org/swagger-ui/4.15.5/swagger-ui-bundle.min.js',#改用国内cdnswagger_css_url='https://cdn.staticfile.org/swagger-ui/4.15.5/swagger-ui.min.css')applications.get_swagger_ui_html=swagger_monkey_patchapp=FastAPI()#指定Swagger版本为3.0.0app.openapi_version="3.0.0"@app.get("/")asyncdefroot():return{"message":"HelloWorld"}@app.get("/hello/{name}")asyncdefsay_hello(name:str):return{"message":f"Hello{name}"}if__name__=="__main__":uvicorn.run("main:app",host="0.0.0.0",port=8080)12345678910111213141516171819202122232425262728293031323334353637383940413.2pyenv常用命令及下载过慢问题常用命令pyenvversions#显示所有已经安装的python版本pyenvversion#显示当前设置的python版本pyenvinstall--list#显示可以安装的python版本pyenvinstall#安装版本的pythonpyenvglobal#设置全局状态的python版本pyenvlocal#设置当前目录(或其子目录)下的python的版本pyenvshell#仅为当前shell会话选择pyenvuninstall#卸载版本的python12345678下载过慢解决方案在下文的参考文章里,大佬们已经总结过解决方案。但我觉得这是很多像我一样的新手也会遇到的问题。我们在服务器pyenv的项目根目录下创建一个cache文件夹,然后在python官网下载指定python.tar.xz文件手动上传到服务器Python官网gzip包下载路径3.2总结本文,通过一个实际需求的契机,我们完成了这几件件小白也可以直接开干的事:Python环境配置(主要是服务器)+FastAPI创建+部署。现在来总结一些小重点:本地创建FastAPI项目:首先要有本地Python解释器,本地先用Python解释器执行pipinstall命令下载FastAPI所需依赖,接着,使用集成工具创建FastAPI项目。创建项目后,需要测试本地运行,以及内置swagger显示。服务器Python环境配置。使用pyenv工具来管理服务器python版本。Docker部署:DockerFile、Docker命令。4.唠嗑4.1为啥一上来就是项目别的教程一开始都是语法helloworld噻,况且我是python小白,为啥你这一上来就是项目?是的,我确实是python小白,语法都没完全掌握。但需求是直接构建一个基于Python的Web服务,便于功能独立与后续开发,作为Java服务端程序猿,日常与Web打交道比较多,应该能触类旁通吧。于是我在没什么Python语法与技术栈的基础上直接开始了项目。4.2为啥没写东西就开始部署为了先跑通流程。毕竟咱从隔壁JAVA跑过来,还没正儿八经部署过python项目。那么既然有需要,先整一遍创建-部署流程还是很有必要的,方便日后开发部署,甚至进行CI/CD。因此第一时间部署一遍,熟悉Python项目部署流程(主要是DockerFile的编写与服务器环境配置),日后更分支,部署就方便多了。参考资料jackcui-Anaconda+VscodePycharm下载链接博客园-fastapiSwagger无法正确显示解决方案CSDN-服务器pyenv配置优秀参考文章1CSDN-服务器pyenv配置优秀参考文章2
|
|