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


Posted in Python onJune 07, 2016

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 相关文章推荐
用python实现的去除win下文本文件头部BOM的代码
Feb 10 Python
Python 不同对象比较大小示例探讨
Aug 21 Python
详解python的webrtc库实现语音端点检测
May 31 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
Jun 13 Python
Python Pillow Image Invert
Jan 22 Python
详解Python中is和==的区别
Mar 21 Python
centos 安装Python3 及对应的pip教程详解
Jun 28 Python
Python进程池Pool应用实例分析
Nov 27 Python
Pandas实现dataframe和np.array的相互转换
Nov 30 Python
Python使用matplotlib绘制圆形代码实例
May 27 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 07 Python
Windows上使用virtualenv搭建Python+Flask开发环境
Jun 07 #Python
在Python的Flask中使用WTForms表单框架的基础教程
Jun 07 #Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
Jun 07 #Python
Python的Flask框架中配置多个子域名的方法讲解
Jun 07 #Python
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 #Python
python实现多线程的方式及多条命令并发执行
Jun 07 #Python
python多线程方式执行多个bat代码
Jun 07 #Python
You might like
11个PHPer必须要了解的编程规范
2014/09/22 PHP
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
javascript制作2048游戏
2015/03/30 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
javascript实现仿百度图片的瀑布流加载效果
2016/04/20 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
Nodejs + Websocket 指定发送及群聊的实现
2020/01/09 NodeJs
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
利用Pandas 创建空的DataFrame方法
2018/04/08 Python
浅述python中深浅拷贝原理
2018/09/18 Python
python字典嵌套字典的情况下找到某个key的value详解
2019/07/10 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
2014/03/07 HTML / CSS
会计专业毕业生求职信分享
2014/01/03 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
节约电力资源的建议书
2014/03/12 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
领导班子在批评与自我批评座谈会上的发言
2014/09/28 职场文书
教师群众路线心得体会
2014/11/04 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
你需要掌握的20个Python常用技巧
2022/02/28 Python