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

最终运行成功效果:

在后台运行项目

成功运行后关闭cmd窗口会杀掉进程(我的不会杀进程,但是接口依然不能使用)。
所以要想办法让进程在后台运行,命令如下:

gunicorn -b post.py app:app --daemon

只要在后面加一个--daemon就可以了,这段命令运行后是没有任何提示的,不过可以通过以下命令查看正在运行的进程:

sudo lsof -iTCP -sTCP:LISTEN -P | grep gunicorn

可以看到在gunicorn -b post.py app:app --daemon输入后虽然没有任何提示,但是会有进程被生成,命令已经生效了,如果想要关闭可以运行以下命令:

sudo kill -9 【进程号】

ps: 百度到的命令都是奇奇怪怪而且没有用,甚至有一段命令nohup还是啥,运行后没有啥子用的同时进程号还是动态的,没法用命令关闭,害得我只能重启服务器。。。

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

谢谢大家

image.png
05745415.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容