折腾:
【已解决】把Python3的pipenv的Flask部署到CentOS服务器上
期间,需要先去搞清楚,部署Flask的基本的逻辑和大概的步骤是什么,然后才能接着去操作。
deploy flask centos
flask 部署 centos
“Gunicorn(独角兽)是一个高效的Python WSGI Server,通常用它来运行 wsgi application(由我们自己编写遵循WSGI application的编写规范) 或者 wsgi framework(如Django,Paster),地位相当于Java中的Tomcat。 WSGI就是这样的一个协议:它是一个Python程序和用户请求之间的接口。WSGI服务器的作用就是接受并分析用户的请求,调用相应的python对象完成对请求的处理,然后返回相应的结果。 简单来说gunicorn封装了HTTP的底层实现,我们通过gunicorn启动服务,用户请求与服务相应都经过gunicorn传输
nginx 是一个高性能的web服务器。通常用来在前端做反向代理服务器。所谓正向与反向(reverse),只是英文说法翻译。代理服务,简而言之,一个请求经过代理服务器从局域网发出,然后到达互联网上服务器,这个过程的代理为正向代理。如果一个请求,从互联网过来,先进入代理服务器,再由代理服务器转发给局域网的目标服务器,这个时候,代理服务器为反向代理(相对正向而言)。
gunicorn和nginx关系:
gunicorn 可以单独提供服务,但生产环境一般不这样做。首先静态资源(jscssimg)会占用不少的请求资源,而对于 gunicorn 来讲它本身更应该关注实际业务的请求与处理而不应该把资源浪费在静态资源请求上;此外,单独运行 gunicorn 是没有办法起多个进程多个端口来负载均衡的。
nginx 的作用就是弥补以上问题,首先作为前端服务器它可以处理一切静态文件请求,此时 gunicorn 作为后端服务器,nginx 将会把动态请求转发给后端服务器,因此我们可以起多个 gunicorn 进程,然后让 nginx 作均衡负载转发请求给多个 gunicorn 进程从而提升服务器处理效率与处理能力。最后,nginx 还可以配置很多安全相关、认证相关等很多处理,可以让你的网站更专注业务的编写,把一些转发规则等其它业务无关的事情交给 nginx 做。
supervisor
如果你需要进程一直执行,若该进程因各种原因中断,也会自动重启的话,supervisor是一个很好的选择。 supervisor管理进程,是通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动,所以我们只需要将要管理进程的可执行文件的路径添加到supervisor的配置文件中就好了。此时被管理进程被视为supervisor的子进程,若该子进程异常终端,则父进程可以准确的获取子进程异常终端的信息,通过在配置文件中设置autostart=true,可以实现对异常中断的子进程的自动重启。”
在 CentOS 上使用 Nginx/uWSGI 部署 Flask 网站应用
在 CentOS 云服务器上使用 Nginx + uWSGI 部署 Flask 程序
How To Serve Flask Applications with Gunicorn and Nginx on CentOS 7 | DigitalOcean
How To Deploy Flask Web Applications Using uWSGI Behind Nginx on CentOS 6.4 | DigitalOcean
How To Serve Flask Applications with uWSGI and Nginx on CentOS 7 | DigitalOcean
Deploying a Python app on Red Hat 7 / CentOS 7 (with RPM) on a Linux/Unix production server with Passenger open source in Apache mode – Passenger + Python deployment tutorial – Passenger Library
还是先看看官网
flask deploy
Deployment Options — Flask Documentation (0.12)
The Flask Mega-Tutorial Part XVII: Deployment on Linux – miguelgrinberg.com
How to Deploy your Flask Application
Kickstarting Flask on Ubuntu – Setup and Deployment – Real Python
先看看官网:
http://flask.pocoo.org/docs/0.12/deploying/
用gunicorn和gevent提高python web框架的性能 | 峰云就她了
深入理解uwsgi和gunicorn网络模型[上] | 峰云就她了
【总结】
截止目前,算懂了点:
【Flask的Python代码如何和用户的web的http请求互相通信】
作为Flask,是Python代码,想要在服务器上跑,需要一个容器? 用于让Python代码能和服务器沟通
-》让Python代码能和服务器的http的请求互相沟通
-〉而WSGI(Web Server Gateway Interface)服务器,就是用来让Python能和服务器沟通的
-》而gunicorn就是一个WSGI服务器
而web服务器:nginx
而web服务器是没法直接和Python(的Flask)通信的,所以需要借助于:gunicorn
Flask application object 就是一个 WSGI application
-》
Flask开发期间的代码:
<code>app = Flask(__name__) if __name__ == "__main__": app.run() </code>
中的app,就是Flask的示例
-》也就是一个遵循了WSGI的application应用
再说Flask部署:
【为何要部署Flask】
因为本身的Flask的内置的server(比如你代码中的app.run),是不适合生产环境的
【那生产环境有什么特点和需要呢?】
生产环境中,可能会同时并发多个请求,希望服务器能够及时处理
-》内在要求Flask的服务器能够同时处理多个请求,且尽量占用少的资源
-〉希望运行了Flask的进程能够有多个,便于同时处理多个请求
同时也希望生产环境的服务器更有效率:
对于静态资源,比如html,css,js等文件,希望提高服务的效率
-》作为Flask的Application Server,就没有Nginx等Web Sever直接返回,更有效率
-》所以还需要一个Web Server,比如Nginxi
【而Flask和Nginx和WSGI服务器(gunicorn或uWSGI)等之间的关系】
目标是:
入:用户的http的请求,从web服务器路由到了Flask
出:相应的,Flask处理请求,返回响应,回到web服务器,再返回给用户
【总体逻辑和大概流程步骤】
先去本地把gunicorn和supervisor(甚至nginx)都先尝试通过后,再去服务器上弄
需要处理CentOS中的pipenv 以及python3
然后再去处理WSGI的服务器,比如gunicorn或uWSGI
再去处理 管理进程的,比如supervisor
再去处理nginx代理
至于代码部署,可以不用fabric,直接用PyCharm中的远程代码拷贝即可
转载请注明:在路上 » 【已解决】部署Flask到生产环境服务器上的基本逻辑和大概步骤流程