flask服务器部署全流程

开始前的逼逼赖赖

本人前端,在学校学过点PHP,用原生PHP写过接口,写了很多重复代码。后尝试学习thinkPHP,没学下去。

0123CD3B.jpg

之后接触了Python,感觉Python语法还挺简洁的,又看了看Python的后端框架,选中了flask,或许flask不是主流,但管他呢,自己用的舒服就行了。

flask或许确实有点小众了,网上没多少教程,很多东西还是得靠自己摸索。我为了学习规范一点的代码,跑到Gitee上找一些成熟的项目看源码。

一路摸索过来踩了无数雷,所以想留下一点教程帮助后来的人吧。


正文:

部署flask项目网上其实也有一些教程,我也尝试过很多不同的方法,主要就是两种方法:

  • 常规方法,把项目搬到服务器上,安装环境,使用uWSGIgunicorn启动项目,这里使用的就是这种方法。
  • 懒人方法,把项目搬到服务器上,生成环境配置清单文件,使用宝塔的Python项目管理器一键部署。

宝塔的一键部署我也试过(毕竟是懒人,能一键部署谁不想试试呢~)。不过要说的是,体验极差,极不推荐。一键部署虽然简单安逸,但bug极多,而且没有log,宝塔的log只在项目启动的时候有输出,项目运行后就消无声息了,这意味着一旦报错连报错提示都没有。更别说一些莫名其妙的bug,我尝试了很久最后还是放弃了。不过bug只是暂时的,但愿宝塔能越做越好,让每个用户都能真正地一键部署吧。

所以这里是教大家,使用一种尽可能 简单便捷少报错方便管理 的方式部署flask项目。所以各位懒人,如果真的想少花点时间少花点精力,建议使用以下看起来有点复杂方法,千万不要轻易尝试宝塔一键部署。

开心
首先要同步代码到云端,这里使用Pycharm同步代码

我用的是pycharm2021.3.1,最好使用比较新的版本,老版本不支持一键生成flask项目,SSH也是较新版本才有的功能。

  • 点击tools->Deployment->Configuration
设置
  • 配置服务器的公网ip,端口号一般是22,可以在宝塔的安全里看到:
ssh 端口
image.png

上面这个框框,点SSH configuration右边的三个点填写ssh配置,需要输入账号密码

ssh config

image.png
  • 再配置项目在服务器中的位置,以下配置项目将更新到该指定路径 /tmp/pycharn_project_30

    配置项目路径
  • 配置好后可以点击菜单tools->Deployment->Upload to ...更新当前打开文件的代码
    Upload All Opened Files to ...是更新所有文件

    image.png

配置云端的Python环境

将项目上传到服务器后,由于服务器没有Python的环境,所以通过以下方式为服务器安装环境。

  • 点击settings->project
image.png

image.png
  • 点击Python版本右边的设置按钮,点add,在弹出来的窗口左边选ssh,填写服务器公网IP和端口,点Next

    image.png
image.png
  • 配置好后变成这样:

    image.png

这里可以不应用,在这里为服务器安装Python版本和插件就行了,安装了Python后在服务器也可以使用pip安装插件,但大概率会出现报错,而且无法更新到最新版本(亲身经历)。在这里可以轻松地安装和管理插件。

  • 点击左上角的加号安装插件。

    image.png
  • 上方输入插件名,就会显示插件的最新版本,一键安装

    image.png
  • 这里会显示当前版本和最新版本,三角箭头表示可以升级。

    image.png

配置好服务器环境后,就要运行项目了

其实配置好服务器环境后,可以在项目根目录下启动终端,像在本地运行项目一样输入python app.py启动项目,但会打印一个警告:

image.png

翻译过来就是这是一个开发服务器。不要在生产部署中使用它
百度之后,说说我的理解:
flask本身的服务器容器性能非常弱,记住是非常,只能在本地开发用用,不推荐在生产环境下使用,注意这只是个警告而不是报错,实际还可以用用。我自己测试过,代码写一点简单的逻辑还可以用,稍微复杂一点,验证了一下token就芭比Q了,直接报超时。所以还是非常有必要使用第三方的容器提升一下性能的。

目前有两大独立WSGI容器,uWSGIgunicorn

这里只讲如何使用gunicorn,感兴趣的可以看看这篇文章:https://zhuanlan.zhihu.com/p/50857407


使用gunicorn运行flask项目

  • 首先打开终端安装gunicorn
    老配方
pip install gunicorn

安装完成可以使用-h命令查看帮助

gunicorn -h
  • 直接运行项目gunicorn 启动文件名:flask实例名
    此处app:app中,第一个app为flask项目实例所在的包(就是启动文件app.py),第二个app为生成的flask项目实例(就是你app.py里定义的flask实例)。
    flask实例:
app = Flask(__name__)

所以我这里是:

gunicorn app:app
  • gunicorn默认的host是127.0.0.1也就是本地,我试了一下运行后,访问不了。也就需要手动改一下配置。有两种方法,个人感觉都挺扯淡的。
  • 一种是直接上命令,使用-b host:port
gunicorn -b 123.456.7.8:5000 app:app

这样就直接运行了,下次运行还得重新输入host:port

无语
  • 还有一种方法,首先手动创建一个配置文件gunicorn_config.py,其实名字随便取,然后在文件内输入私网ip地址加端口,注意端口号要在安全组放行。
bind = '123.0.2.3:8000'

更多的配置可以看这篇文章:
https://blog.csdn.net/u012856866/article/details/119384985

注意一定要是私网ip,不能使用公网,不知道私网可以看控制台,这里是阿里云的控制台

image.png

然后就可以输入命令,让gunicorn根据配置文件启动gunicorn -c 文件名.py 启动文件名:实例名

gunicorn -c gunicorn_config.py app:app

而然,每次启动都还是要敲一遍文件名,(为什么不能让配置永远生效!!!),所以我建议各位,配置文件名越短越好,比如gun.pyconf.pya.py... 简短的名字能一定程度上少敲一点代码

如果运行后一直重复连接,可以换个端口,注意安全组要放行,配置要使用私网ip,访问要使用公网ip,其他应该没什么要注意的了。

这样就是ip无效或端口未放行导致连接不上:

image.png

最终运行成功效果:

至此项目运行成功,圆满结束

谢谢大家

image.png
05745415.gif

版权声明:
作者:感冒的梵高
链接:https://www.techfm.club/p/43206.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>