Flask+uWGSI+Nginx的部署

Flask+uWGSI+Nginx的部署

0. 使用该框架部署目的:

  1. 提高并发访问支持(-p 进程数, –threads 线程数)
  2. 提高服务运行稳定性

1. 安装uwsgi

(如果用系统默认的Python环境,pip install uwsgi 安装即可)
如果系统有多个Python版本,且项目需要执行在某个指定Python版本时,按照如下安装

下载安装包并解压
$ wget http://projects.unbit.it/downloads/uwsgi-1.4.10.tar.gz
$ tar -zxvf uwsgi-1.4.10.tar.gz
$ cd uwsgi-1.4.10
修改配置文件

修改文件夹下 buildconf/core.ini 文件,设置uwsgi执行文件(bin)及Python编译版本插件文件目录(plugin_dir)

plugin_dir = /usr/lib/uwsgi #自定义目录
bin_name = /usr/bin/uwsgi   #自定义目录
编译 uWSGI
$ python uwsgiconfig.py --build core
编译各Python版本的plugins

例如系统中有python2和python3,可分别编译:

$ python2 uwsgiconfig.pu --plugin plugins/python core python2
$ python3 uwsgiconfig.py --plugin plugins/python core python3

然后调用uwsgi时,添加以下参数即可

--plugin <directory> <buildprofile> <pluginname>
启动测试程序foobar

foobar.py:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

启动程序代码脚本如下,根据选择绝对路径(uwsgi、python2、foobar.py),打开本地浏览器http://ip:3902查看是否安装成功

$ uwsgi --http-socket :3902 --plugin python2 --wsgi-file foobar.py

创建配置文件uwsgiconfig.ini,启动时通过 uwsgi –ini uwsgiconfig.ini 调用配置即可
更多配置详解可查看 UWSGI配置中文说明
[uwsgi]

socket = 127.0.0.1:5051                # 如果通过Nginx调用, 启动与Nginx进行通信的socket服务的ip和端口
# http = 10.90.243.37:3701          # 如果不通过Nginx调用, 启动服务的ip端口设置
pythonpath = /home/users/work/grammar_dingbang     # 代码目录  
module = run_model_dingbang                                      # 启动服务的脚本模块
wsgi-file =/home/users/work/grammar_dingbang/run_model_dingbang.py       # 启动服务的脚本文件
callable = app                              # 一般指app=Flask(__name__)的变量名app
processes = 4                              # 进程数【似乎存在问题,看文末】
threads = 2                                  # 每个进程的线程数
plugin = python2                          # python版本,如需要请用绝对路径
daemonize = /home/users/work/grammar_dingbang/log/server.log   # 日志文件
pidfile = uwsgi.pid                      # 保存pid信息,方便停止服务和重启的时候用

特别提醒:如果需要调用别的gcc库,可通过在之前uwsgi命令前将库加入,如下所示
/opt/compiler/gcc-4.8.2/lib/ld-linux-x86-64.so.2 –library-path /opt/compiler/gcc-4.8.2/lib /home/users/work/python2.7/bin/uwsgi –ini uwsgiconfig.ini

2. 安装Nginx

下载安装包并解压安装
$ wget http://nginx.org/download/nginx-1.15.2.tar.gz
$ tar -zxvf nginx-1.15.2.tar.gz
$ cd nginx-1.15.2
$ ./configure
$ sudo make & make install
修改配置文件,./conf/nginx.conf
server {
listen 3701;                               //服务端口
server_name 10.90.243.37;     //服务器ip

location / {
include uwsgi_params;           //这里是导入的uwsgi配置
uwsgi_pass 127.0.0.1:5051;     //需要和uwsgi的配置文件里socket项的地址相同,否则无法让uwsgi接收到请求。
uwsgi_param UWSGI_CHDIR  /home/users/work/grammar_dingbang;               //项目根目录
uwsgi_param UWSGI_SCRIPT run_model_dingbang:app;                                //启动项目的主程序【flask】
}
}

启动程序:先启动nginx,再启动uwsgi

$ nginx -c ./nginx/conf/nginx.conf
$ uwsgi --ini ./uwsgi/uwsgiconfig.ini

实测发现,uwsgi似乎不能充分的利用cpu和内存来达到无上限的并发。有一定瓶颈,并且到达瓶颈后,还有大量的计算资源剩余!故而为了充分利用资源不妨多开几个uwsgi服务,与其让一个uwsgi服务跑10个进程,不如开10个uwsgi服务,然后用nginx做负载均衡!

参考
https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html
https://www.cnblogs.com/franknihao/p/7202253.html
https://blog.csdn.net/hit0803107/article/details/53264066

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值