在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实现的监测服务器硬盘使用率脚本分享
Nov 07 Python
使用Python写一个贪吃蛇游戏实例代码
Aug 21 Python
python实现用户答题功能
Jan 17 Python
实例讲解Python中浮点型的基本内容
Feb 11 Python
PyQt5 QListWidget选择多项并返回的实例
Jun 17 Python
Python实现某论坛自动签到功能
Aug 20 Python
python安装本地whl的实例步骤
Oct 12 Python
python实现监控阿里云账户余额功能
Dec 16 Python
python 用 xlwings 库 生成图表的操作方法
Dec 22 Python
python 画条形图(柱状图)实例
Apr 24 Python
python如何导出微信公众号文章方法详解
Aug 31 Python
Python3爬虫ChromeDriver的安装实例
Feb 06 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
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
PHP EOT定界符的使用详解
2008/09/30 PHP
PHP strtok()函数的优点分析
2010/03/02 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
PHP爆绝对路径方法收集整理
2012/09/17 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
2020/03/03 PHP
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
点击弹出层效果&amp;弹出窗口后网页背景变暗效果的实现代码
2014/02/10 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
javascript Function函数理解与实战
2017/12/01 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
[02:46]解说DC:感谢430陪伴我们的DOTA2国际邀请赛岁月
2016/06/29 DOTA
Python判断文本中消息重复次数的方法
2016/04/27 Python
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
您的网上新华书店:文轩网
2016/08/24 全球购物
汤米巴哈马官方网站:Tommy Bahama
2017/05/13 全球购物
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
ktv总经理岗位职责
2014/02/17 职场文书
股份合作协议书
2014/04/12 职场文书
2014年冬季防火方案
2014/05/21 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python