在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程

 更新时间:2016年06月07日 17:34:57   作者:digwtx  
这篇文章主要介绍了在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.tgz
tar xf Python-2.7.8.tgz
cd Python-2.7.8
./configure --prefix=/usr/local
make && 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 virtualenv
virtualenv-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/activate
python --version
# This will show Python 2.7.X
deactivate

基本就是这些了,网上很多教程都说要做软链接,但我感觉那样做或多或少会对系统有一些未知的影响。这个方法能尽量保持系统的完整性,很多自带 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 Flask
app = 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=digwtx
command=/tmp/wwwroot/web1/deps/bin/gunicorn -b 127.0.0.1:3721 myapp:app
directory=/tmp/wwwroot/web1
process_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

相关文章

  • Python利用keyboard模块实现键盘记录操作

    Python利用keyboard模块实现键盘记录操作

    模拟键盘操作执行自动化任务,我们常用的有pyautowin等自动化操作模块。今天介绍的这个模块叫做keyboard,它是纯Python原生开发,编译时完全不需要依赖C语言模块。一行命令就能完成安装,非常方便,需要的可以了解一下
    2022-10-10
  • 详解Python字符串原理与使用的深度总结

    详解Python字符串原理与使用的深度总结

    本文将学习字符串数据类型相关知识,将讨论如何声明字符串数据类型,字符串数据类型与 ASCII 表的关系,字符串数据类型的属性,以及一些重要的字符串方法和操作,超级干货,不容错过
    2022-05-05
  • Python基于Pytorch的特征图提取实例

    Python基于Pytorch的特征图提取实例

    在利用深度学习进行分类时,有时需要对中间的特征图进行提取操作,下面这篇文章主要给大家介绍了关于Python基于Pytorch的特征图提取的相关资料,需要的朋友可以参考下
    2022-03-03
  • Python中的__slots__示例详解

    Python中的__slots__示例详解

    在python新式类中,可以定义一个变量__slots__,它的作用是阻止在实例化类时为实例分配dict,下面这篇文章主要给大家介绍了关于Python中__slots__的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • Python的os包与os.path模块的用法详情

    Python的os包与os.path模块的用法详情

    这篇文章主要介绍了Python的os包与os.path模块,主要介绍os常用方法和os.path 常用方法展开相关资料,需要的小伙伴可以参考一下,希望对你的工作或学习有所帮助
    2022-03-03
  • 关于python 跨域处理方式详解

    关于python 跨域处理方式详解

    这篇文章主要介绍了关于python 跨域处理方式详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 用Matlab读取CSV文件出现不匹配问题及解决

    用Matlab读取CSV文件出现不匹配问题及解决

    这篇文章主要介绍了用Matlab读取CSV文件出现不匹配问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Python创建一个功能齐全的随机验证码生成器

    Python创建一个功能齐全的随机验证码生成器

    验证码通过生成一张包含难以识别的文本、数字或图像的图像,要求用户正确输入其中的内容,用于验证用户身份,本篇教程将带领您一步步使用Python创建一个功能齐全的随机验证码生成器,我们将通过导入必要的库、定义辅助函数以及编写主函数check_code()
    2024-04-04
  • Python Queue模块详解

    Python Queue模块详解

    这篇文章主要介绍了Python Queue模块详解,需要的朋友可以参考下
    2014-11-11
  • python实现颜色rgb和hex相互转换的函数

    python实现颜色rgb和hex相互转换的函数

    这篇文章主要介绍了python实现颜色rgb和hex相互转换的函数,可实现将rgb表示的颜色转换成hex值的功能,非常具有实用价值,需要的朋友可以参考下
    2015-03-03

最新评论