在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
作者:digwtx 发布时间:2021-09-04 07:31:23
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 xxx执行吧。以下操作同时适用于windows和Linux下的
- 从PHP的5.4.0版本开始,PHP提供了一种全新的代码复用的概念,那就是Trait。Trait其字面意思是”特性”、”特点”,我们可以理解
- bs4的安装要使用BeautifulSoup4需要先安装lxml,再安 * s4pip install lxmlpip install bs4
- 函数重载的替代方法-伪重载,下面看一个具体的实例代码。<? php//函数重载的替代方法-伪重载////确实,在PHP中没有函数重载这
- CSS入门很简单,规则不多,写法也比较灵活,因此也带来了很多有创意的写法。跟IE一样,很好的容错性,像《 边框样式写法总结 》所说的bord
- python处理json文本文件主要是以下四个函数:函数作用json.dumps对数据进行编码,将python中的字典 转换为 字符串jso
- 如下所示:try:a=1except Exception as e: print (e)import tracebackimport sys
- 为了庆祝自己的博客重新开放,我在这里放一个自己刚刚写的jquery日期插件, 也许人们会说:日期选取插件已
- KindEditor简介: KindEditor是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用
- 1、之前那个说淘宝交易评价“有问题”的文章已经有了一百多个评论。(某些开口就骂的评论已被删除)近期去评论的人都是从搜索引擎过来的,他们不是产
- 研究好多天了,也试过好多办法了,总结出目前发现最好的方法:先说一下基本的东西:<%@ codepage=65001%>
- 以前在介绍SQL2k的时候已经提到了SQL2k对XML的支持,使用for XML语句就可以很容易的把执行的结果转化为一个XML,这样可以在很
- 喜欢Gucci的优雅吗?或者痴迷美国普普艺术?谷歌中国最近改版的谷歌个性化首页iGoogle集中了近1500个主题,包括近120多位全球顶级
- 我们已经在Python运算中看到Python最基本的数学运算功能。此外,math包补充了更多的函数。当然,如果想要更加高级的数学功能,可以考
- 最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在
- 很多时候关心的是优化SELECT 查询,因为它们是最常用的查询,而且确定怎样优化它们并不总是直截了当。相对来说,将数据装入数据库是直截了当的
- 不论什么语言,我们都需要注意性能优化问题,提高执行效率。选择了脚本语言就要忍受其速度,这句话在某种程度上说明了Python作为脚本语言的不足
- 问题一:安装模块时出现报错 Microsoft Visual C++ 14.0 is required,也下载安装了运行库依然还是
- CAS 全称集中式认证服务(Central Authentication Service),是实现单点登录(SSO)的一中手段。CAS 的通
- 原来工作中曾经碰到过UL列表里一些异常的表现,加上昨天看到了http://bbs.blueidea.com/thread-2984871-1