一般比较习惯使用uwsgi进行部署django, flask应用。但,有时受权限限制,无法安装uwsgi, 所以就使用gunicorn进行部署。
之前使用python3的使用,发现 supervisor是不支持。所以就不打算用supervisor了。
纯粹介绍gunicorn 简单部署方法,完整流程。
环境:
python2
centos 6
创建测试目录 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 [OPTIONS] APP_MODULE
以上例子中:
代表:$(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
这个参数对应两种使用方式,一种是命令行,一种是配置文件。
在网上见到的大多数部署方式都是采用命令行的方式:
除了例子中的-b参数设置ip与端口外。还有其他的一些参数。
见官网 http://docs.gunicorn.org/en/stable/settings.html :
使用思路:
根据需要,对照参数的功能介绍,选择合适参数,确定参数值。
比如,我要使用多进程:
文档介绍说命令行参数可以使 -w, 或者 –wokers ,值类型为 int, 范围 2到 4*(核数)。
如我想用 4 进程,例子中的部署命令可以改为:
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
还是以上面的配置 多进程 为例:
配置文件可以写成:
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采用此方法读取配置文件)检查配置文件是否有问题。
然后执行上面命令。
可以看到命令部署,文件配置中使用的参数不一样,
日志配置参数,命令行中使用 –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中配置 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