Gunicorn 是 Python的 一个 WSGI HTTP服务器,根据它的介绍说是它来自于 Ruby 的 Unicorn。可以方便的部署 Python 的 Web 程序,而且本身支持多种 Python 的框架,如 Django、Paster等。
通过介绍来看貌似很不错的样子,只可惜我现在不玩 Python 了,于是就简单体验一下。
简单应用 首先是安装,这个可以直接使用 pip
来完成:
然后再根据官方文档的介绍部署一个简单的例子试试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $ cd examples $ cat test.py # -*- coding: utf-8 - # # This file is part of gunicorn released under the MIT license. # See the NOTICE for more information. def app(environ, start_response): """Simplest possible application object""" data = 'Hello, World!\n' status = '200 OK' response_headers = [ ('Content-type','text/plain'), ('Content-Length', str(len(data))) ] start_response(status, response_headers) return iter([data]) $ gunicorn -b 0.0.0.0:8000 --workers=2 test:app
好的,现在程序运行起来了,可以访问 http://localhost:8000 看下效果。
gunicorn 也可以通过配置文件来设置一些内容, 一个配置文件是一个 python 脚本,格式类似 .ini
。通过 -c
参数指定要使用的配置文件。如:
1 2 3 # config.ini bind = ["0.0.0.0:8000", "unix:///tmp/gunicorn.sock"] workers = 3
gunicorn 还能与 Django 和 Paster 应用集成:
1 2 $ gunicorn --env DJANGO_SETTINGS_MODULE=myproject.settings myproject.wsgi:application $ gunicorn --paste development.ini -b :8080 --chdir /path/to/project
与 Nginx 部署 gunicorn 本身也是一个 WSGI 应用,可以与 Nginx 一同使用。 以下是 Nginx + Gunicorn 部署 Django 的事例, Nginx 配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 # nginx.conf http { include mime.types; default_type application/octet-stream; access_log /tmp/nginx.access.log combined; sendfile on; upstream app_server { server unix:/tmp/gunicorn.sock fail_timeout=0; # For a TCP configuration: # server 192.168.0.7:8000 fail_timeout=0; } server { listen 80 default; client_max_body_size 4G; server_name _; keepalive_timeout 5; # path for static files root /path/to/app/current/public; location / { # checks for static file, if not found proxy to app try_files $uri @proxy_to_app; } location @proxy_to_app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app_server; } error_page 500 502 503 504 /500.html; location = /500.html { root /path/to/app/current/public; } } }
Gunicorn 的配置文件:
1 2 3 4 5 6 7 8 9 10 11 # gunicorn.ini import os bind = ["0.0.0.0:8000", "unix:///tmp/gunicorn.sock"] workers = 3 chdir = os.path.dirname(os.path.realpath(__file__)) raw_env = ["DJANGO_SETTINGS_MODULE=app.settings"] accesslog = "/tmp/gunicorn-access.log" errorlog = "/tmp/gunicorn.log" daemon = True pidfile = "/tmp/gunicorn.pid"
运行:
1 2 $ gunicorn -c gunicorn.ini myproject.wsgi:application $ service nginx start
其他内容 与 WSGI 应用一样,如果之后配置有改动可以向 gunicorn 服务进程发送 HUP
信号让其重新加载配置: