menu Chancel's blog
rss_feed
Chancel's blog
有善始者实繁,能克终者盖寡。

Linux部署Gunicorn+Flask

作者:Chancel Yang, 创建:2018-09-26, 字数:2593, 已阅:643, 最后更新:2024-03-10

由于国内常用的生产环境系统Cent7OS仍然处在Python2.5-2.7的版本之间,在此总结下如何从Python2.5过渡到Python3.x版本

1. 准备

1.1. 更新Python版本

下载Python3的包,在Python官网选择合适的安装包,我这里选择的是Python3.5版本(下载地址)

下载完成之后解压并编译

Bash
tar -xf Python-3.5.1.tgz /tmp/python3.5
cd /tmp/python3.5
mkdir /usr/python3.5
./configure --prefix=/usr/python3.5
sudo make & make install

1.2. 修改默认的Python版本(可选)

修改系统默认使用的Python

Bash
cd /usr/bin
sudomv python python.bak
sudo ln -s /usr/python3.5/bin/python3 /usr/bin/python

验证Python的版本

TEXT
python -v

确认无误之后要修改yum包管理器的配置文件,因为yum默认是使用2.7版本的,我们更改了系统的默认版本2.7->3.5会引起安装软件报错

使用 sudo vim /usr/bin/yum,将头部的 #!/usr/bin/python改成 #!/usr/bin/python2.7

使用 sudo vim /usr/libexec/urlgrabber-ext-down,将头部的 #!/usr/bin/python改成 #!/usr/bin/python2.7

2. 配置

2.1. 安装Flask/Gunicorn

创建并启用虚拟目录virtualenv

TEXT
sudo pip install virtualenv
mkdir /opt/python_test/
virtualenv venv
source venv/bin/activate

在虚拟环境中安装 Flask/Gunicorn

TEXT
pip install flask gunicorn

2.2. 创建配置文件

创建gunicorn的配置文件,详细参数可以参考Gunicorn官网文档,这里有一个简单的例子

vim /opt/python_test/gunicorn.conf

TEXT
import os
bind='127.0.0.1:5000' #运行的地址
workers=4 #处理请求的进程数
proc_name='online-test' #进程名称
accesslog = "/home/chancel/proxyDownload/logs/access.log"    #访问日志文件的路径
errorlog = "/home/chancel/proxyDownload/logs/error.log"        #错误日志文件的路径

2.3. 运行你的应用

编写一个简单的Flask实例来运行,使用 vim /opt/python_test/app.py并输入下列代码

Python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello world!'
if __name__ == '__main__':
    app.run(port=5000)

尝试直接运行 python /opt/python_test/app.py,访问 http://127.0.0.1:5000,看到 “Hello world"后说明Flask实例正常运行,关闭运行

使用Gunicorn运行程序

Bash
# config 定义的是配置文件,manage是指运行的文件,app则是指manage.py内的flask对象。(manage不带扩展名)
gunicorn --config gunicorn.conf app:app

访问 http://127.0.0.1:5000,看到 “Hello world"后说明Gunicorn实例正常运行

3. Question

3.1. bash:gunicorn: command not found?

运行 ‘gunicorn --config gunicorn.conf app:app’ 出现 ‘-bash:gunicorn: command not found’

在StackOverFlow上找到一个解决方案,sudo vim /opt/python_test/run_gunicorn.py

TEXT
#-*- coding: utf-8 -*-

import re
import sys

from gunicorn.app.wsgiapp import run


if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$','',sys.argv[0])
    sys.exit(run())

重新运行gunicorn python run_gunicorn.py -w 4 -b 0.0.0.0:5000 main:app

3.2. bash:pip:command not found

解决方法

  1. 安装相关的依赖包,重新编译安装python
  2. 添加pip路径到系统路径中

[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]