python flask项目搭建web server

来源:互联网 发布:网络机柜理线路图 编辑:程序博客网 时间:2024/06/06 20:08

一、flask的自带web server


这是最简单的方式,用法:

from flask import Flask

app = Flask(appname)

if __name__ == '__main__':

         app.run(host='0.0.0.0',port=8000,debug=True)

这语句是flask框架的初始化语句,也是框架webserver的启动语句,执行后,框架会自动监听指定的host和port,本例是监听所有来源IP对8000端口的请求,根据url作出回应

例如以上代码写在manage.py中

#python manage.py

此时访问浏览器http://localhost:8000就可以请求到项目了


二、uWSGI


uWSGI其实是现在python的专用cgi服务了,但是并不是说他仅仅能支持python项目。它类似php的php-fpm的作用,在python和前端代理(通常是nginx)之间建立起通讯的桥梁,由nginx接收请求,转发到uWSGI拉起的服务上,uWSGI启用python脚本解析器,解析对应代码执行后返回结果给nginx,最后呈现到用户面前。

安装

#pip install uwsgi

到项目根目录下创建uwsgi的配置文件uwsgi.xml

#vim uwsgi.xml

<uwsgi>
 
    <pythonpath>[你的工程的根目录]</pythonpath>
 
    <module>[模块名,就填flask的启动脚本名称,例如是manage.py此处就写manage]</module>
 
    <callable>[启动flask服务的入口,找启动脚本里Flask对象赋给的变量名称,例如app]</callable>
 
    <socket>0.0.0.0:8000</socket>      #注: 指定某个固定端口,原本项目flask监听的是哪个host和port就写哪个
 

    <master/>
 
    <processes>4</processes>                #注:跑几个进程,这里用4个进程
 
    <memory-report/>
 
</uwsgi>

配置nginx,修改nginx的配置文件

#vim nginx_vhost.conf

server {
        listen 80;
        server_name www.app.com; #写你的域名
 
        location / {
                include uwsgi_params;
                uwsgi_pass  0.0.0.0:8000;  #注:这里的端口8000和uwsgi的里配的是同一个端口,因为nginx和uwsgi需要通过这个端口进行交互
        }
 }

启动uswgi和重启nginx

#uwsgi -x uwsgi.xml

默认是前台运行,如果要后台运行,加一个-d参数

#uwsgi -d -x uwsgi.xml


#service nginx restart

现在打开浏览器,访问http://www.app.com:8000,就能看到你的项目了


二、Gunicorn


guincorn是一个支持wsgi协议的http server,它的出现是为了解决django、flask这些web框架自带wsgi server性能低下的问题。 用它来启动webserver非常简单,比uwsgi还要简单

#pip install guincorn

安装完其实就等于部署结束了,接下来只要打命令关联flask项目并启动guincorn就可以了

#gunicorn --chdir 项目根目录 --workers 10 --bind 0.0.0.0:8000 --user nobody --group nobody --worker-class gevent --threads 30 --timeout 30 manage:app

解释一下参数

chdir 启动时先切换到的目录

workers 启动工作进程的数量

bind 监听的host和port

user 工作进程用户

group 工作进程用户组

worker-class 工作模式,gevent是基于greenlet的网络库,greenlet是一个轻量级的协程库,总的来说,这个参数用gevent是比较好支持多线程的

threads 工作线程数量

timeout 请求超时时间

最后的manage:app,以冒号为分隔,分别表示flask启动脚本名称和启动脚本里Flask对象赋给的变量名称


现在打开浏览器,访问http://www.app.com:8000,就已经能看到你的项目了,这是gunicorn直接暴露给外网裸跑的最简单方式,如果没有什么性能要求,这样就可以了。

如果你的项目是大型项目,还是需要前端上一个nginx分流以下压力和负载均衡

#vim nginx_vhost.conf

server{
        listen 80;
        server_name www.app.com; #写你的域名

        location / {
            proxy_pass http://127.0.0.1:8000; # 这里是指向 gunicorn host 的服务地址
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

#service nginx restart

这样nginx就能转发请求到gunicorn了,另外为了减轻gunicorn压力,不需要把所有请求都转发,例如图片资源和静态文件的请求就可以在nginx中就路由到静态文件服务器上

0 0