虚位以待(AD)
虚位以待(AD)
首页 > 脚本专栏 > python > 在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程

在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
类别:python   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程,包括安装supervisor来管理进程的用法,整套配下来相当实用,需要的朋友可以参考下

Python基础环境搭建
CENTOS 6.X 系列默认安装的 Python 2.6 ,目前开发中主要是使用 Python 2.7 ,这两个版本之间还是有不少差异的,程序在 Python 2.6 下经常会出问题。

比如: re.sub 函数 ,2.7 支持 flags 参数,而 2.6 却不支持。

所以,打算安装 Python 2.7 来运行 Flask 应用程序,但 2.6 不能删除,因为系统对它有依赖。

1、安装 sqlite-devel
因为 Flask 应用程序可能使用能 Sqlite 数据库,所以这个得装上(之前因为没装这个,导致 Python 无法导入 sqlite3 库。
当然,也可以从源码编译安装。

    yum install sqlite-devel -y

2、安装 Python 2.7

    wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgztar xf Python-2.7.8.tgzcd Python-2.7.8./configure --prefix=/usr/localmake && make install

安装成功之后,你可以在 /usr/local/bin/python2.7 找到 Python 2.7。

3、安装 setuptools + pip
这里需要注意,一定要使用 python2.7 来执行相关命令。

    # First get the setup script for Setuptools:wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py# Then install it for Python 2.7 :python2.7 ez_setup.py# Now install pip using the newly installed setuptools:easy_install-2.7 pip# With pip installed you can now do things like this:pip2.7 install [packagename]pip2.7 install --upgrade [packagename]pip2.7 uninstall [packagename]

4、使用 virtualenv

    # Install virtualenv for Python 2.7 and create a sandbox called my27project:pip2.7 install virtualenvvirtualenv-2.7 my27project# Check the system Python interpreter version:python --version# This will show Python 2.6.6# Activate the my27project sandbox and check the version of the default Python interpreter in it:source my27project/bin/activatepython --version# This will show Python 2.7.Xdeactivate

基本就是这些了,网上很多教程都说要做软链接,但我感觉那样做或多或少会对系统有一些未知的影响。这个方法能尽量保持系统的完整性,很多自带 Python 程序其实在头部都指定了 #!/usr/bin/python ,所以它们用的其实是 Python 2.6 ,而不是新安装的 Python 2.7 。

Nginx+Supervisor+Gunicorn部署Flask应用程序

1.安装supervisor

    $ sudo pip install supervisor

创建一个Flask程序
创建虚拟环境:

    $ mkdir /tmp/wwwroot/web1$ cd /tmp/wwwroot/web1$ virtualenv deps$ source deps/bin/activate$ pip install flask gunicorn

创建一个简单的Flask程序:

    $ cat > myapp.py << EOF
    from flask import Flaskapp = Flask(__name__)@app.route("/")def index(): return "hello flask 01"

使用gunicorn执行Flask程序:

最简单的用法:

    $ gunicorn -b 127.0.0.1:3721 myapp:app

现在访问http://127.0.0.1:3721,应该可以看到"hello flask 01"。

这里3721端口只是一个演示。

2.配置supervisor
创建配置文件:

    $ cd /tmp/wwwroot$ echo_supervisord_conf > supervisor.conf$ cat >> supervisor.conf << EOF
    [program:myapp];
    user=digwtxcommand=/tmp/wwwroot/web1/deps/bin/gunicorn -b 127.0.0.1:3721 myapp:appdirectory=/tmp/wwwroot/web1process_name=%(program_name)s ;
    process_name expr (default %(program_name)s)numprocs=1 ;
    number of processes copies to start (def 1)stopsignal=QUIT ;
    signal used to kill process (default TERM)redirect_stderr=true ;
    redirect proc stderr to stdout (default false)stdout_logfile=/tmp/myapp.log ;
    stdout log path, NONE for none;
    default AUTO

启动进程:

    $ supervisord -c supervisor.conf

管理进程:

    $ supervisorctl -c supervisor.conf

3.配置nginx:
主要是把请求转交给gunicorn进行处理。

    server {
    listen 8080;
    #默认请求 location / {
    #请求转向本机ip:3721 proxy_pass http://127.0.0.1:3721;
    # 这里是gunicorn监听的地址 proxy_redirect off;
    proxy_set_header Host $host:8080;
    #如果端口不是80要写上 proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }

现在重启nginx,访问http://127.0.0.1:8080应该可以看到"hello flask 01"。

自动启动:
那么,如果想开机时自动启动怎么办呢?或者说,如果机器重启了,那WEB服务就断了。

其实呢,也很简单,只要在/etc/rc.d/rc.local中加入一句就可以了:

    supervisord -c /tmp/wwwroot/supervisor.conf

相关热词搜索: CentOS Nginx Python Flask