在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
标签:CentOS,Nginx,Flask
0
投稿

猜你喜欢

  • 解析:轻松掌握在 Mac OS X中安装MySQL

    2009-01-14 11:51:00
  • Python中使用wxPython开发的一个简易笔记本程序实例

    2021-09-07 22:06:22
  • Vue如何引入远程JS文件

    2023-07-02 16:34:13
  • python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例

    2021-08-14 20:28:28
  • python如何重载模块实例解析

    2021-10-13 03:47:56
  • JS模拟实现京东快递单号查询

    2024-04-18 09:45:44
  • asp添加数据实现代码

    2011-02-05 10:42:00
  • win2008 r2安装SQL SERVER 2008 R2 不能打开1433端口设置方法

    2024-01-20 05:49:20
  • Python爬虫实现自动登录、签到功能的代码

    2023-01-29 12:15:37
  • 基于python3 类的属性、方法、封装、继承实例讲解

    2022-12-09 17:54:02
  • SQL中from_unixtime函数的使用方法实例

    2024-01-14 12:45:01
  • MySQL中的随机抽取的实现

    2024-01-17 21:07:42
  • 通过实例解析python描述符原理作用

    2021-01-15 03:14:57
  • SQL Server如何才能访问Sybase中的表

    2009-01-08 13:33:00
  • golang图片处理库image基本操作

    2024-04-26 17:32:04
  • pytorch加载自定义网络权重的实现

    2022-06-16 14:39:10
  • 对Python subprocess.Popen子进程管道阻塞详解

    2022-10-30 07:59:49
  • 《Python学习手册》学习总结

    2021-09-17 08:55:01
  • Git的简单理解及基础操作命令详解

    2023-01-17 11:03:35
  • SQLServer中数据库文件的存放方式,文件和文件组

    2012-01-05 18:56:33
  • asp之家 网络编程 m.aspxhome.com