gunicorn 部署 flask 应用

一般比较习惯使用uwsgi进行部署django, flask应用。但,有时受权限限制,无法安装uwsgi, 所以就使用gunicorn进行部署。

之前使用python3的使用,发现 supervisor是不支持。所以就不打算用supervisor了。

纯粹介绍gunicorn 简单部署方法,完整流程。

环境:
python2
centos 6

1 实例

创建测试目录 temp
进入目录:
创建文件 testapp.py

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'hello world'
if __name__ == '__main__':
    app.debug = True
    app.run()

在该目录下的命令窗口中执行:

gunicorn -b 127.0.0.1:7200 testapp:app

然后在本机的其他的地方访问(curl 或者浏览器) http://127.0.0.1:7200/ 即可看到返回 “hello world”。

gunicorn命令使用解释

$ gunicorn [OPTIONS] APP_MODULE

以上例子中:

APP_MODULE 对应 testapp:app

   代表:$(MODULE_NAME):$(VARIABLE_NAME). MODULE_NAM也可以是路径。VARIABLE_NAME一般是wsgi文件中的变量。
   给以上实例增加一个wsgi文件(与uwsgi一样), wsgi.py
#coding:utf-8
#!/usr/bin/python
import sys
import os

cwd = os.path.split(os.path.realpath(__file__))[0]

sys.path.append(cwd)
print cwd
from spotsearch  import app

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5004)

那么以上命令可以改为

gunicorn -b 127.0.0.1:7200 wsgi:app

[OPTIONS] 对应 -b 127.0.0.1:7200

这个参数对应两种使用方式,一种是命令行,一种是配置文件。

2 部署方式

2.1 命令行部署

在网上见到的大多数部署方式都是采用命令行的方式:
除了例子中的-b参数设置ip与端口外。还有其他的一些参数。
见官网 http://docs.gunicorn.org/en/stable/settings.html :
使用思路:
根据需要,对照参数的功能介绍,选择合适参数,确定参数值。
比如,我要使用多进程:
这里写图片描述
文档介绍说命令行参数可以使 -w, 或者 –wokers ,值类型为 int, 范围 2到 4*(核数)。
如我想用 4 进程,例子中的部署命令可以改为:

扫描二维码关注公众号,回复: 1464555 查看本文章
 gunicorn -b 127.0.0.1:7200 -w 4  testapp:app 

或者

gunicorn -b 127.0.0.1:7200 --wokers 4  testapp:app

再例如添加日志目录

gunicorn -b 127.0.0.1:7200 --wokers 4 --access-logfile /path/to/log testapp:app

2.2 配置文件部署

还是以上面的配置 多进程 为例:
配置文件可以写成:
gunicorn.conf

bind = "127.0.0.1:7200"
workers =4 

执行命令:

gunicorn -c  gunicorn.conf   testapp:app

即可

如果加上配置文件为:
gunicorn.conf

import os
cwd = os.path.split(os.path.abspath(__file__))[0]
bind = "127.0.0.1:7200"
workers =4 
accesslog = os.path.join(cwd, "gunicorn_log")

除了整数,其他值为字符串的都应该使用引号。
可以在python命令行中执行 execfile(gunicorn.conf) (gunicorn采用此方法读取配置文件)检查配置文件是否有问题。

然后执行上面命令。

2.3 note:

可以看到命令部署,文件配置中使用的参数不一样,
日志配置参数,命令行中使用 –access-logfile ,而在文件配置中使用 accesslog。
这里写图片描述

如图中,第一行的参数用于文件配置中,
第二行表示命令行中参数以及,参数值类型。
第三行表示该参数默认值。

根据以上的参数使用方法,其他参数的使用也有这样的规律。

参考文件:
Gunicorn setting
http://docs.gunicorn.org/en/stable/settings.html

用gunicorn和gevent提高python web框架的性能
http://xiaorui.cc/2014/11/22/%E7%94%A8gunicorn%E5%92%8Cgevent%E6%8F%90%E9%AB%98python-web%E6%A1%86%E6%9E%B6%E7%9A%84%E6%80%A7%E8%83%BD/

django 使用gunicorn 部署方式

在django中配置 wsgi.py 文件,该文件防置在 与setting.py 同一目录下。
比如网站名叫 checker, 那么 wsgi.py 与setting.py 问价在 checker/checker 目录下面。
wsgi.py

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "checker.settings")

application = get_wsgi_application()

类似配置flask一样,写完 gunicorn的 配置文件 gunicorn.conf 并放在 checker 目录下面。
部署django的执行命令:

gunicorn -c gunicorn.conf checker.wsgi:application

猜你喜欢

转载自blog.csdn.net/a1368783069/article/details/78665531