nginx+gunicorn+django

WBOY
發布: 2016-08-08 09:30:07
原創
1537 人瀏覽過

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">官方地址:http://gunicorn.org/</span>
登入後複製
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">                  http://docs.gunicorn.org/en/19.2/</span>
登入後複製

參考網址:http://www.cnblogs.com/ArtsCrafts/p/gunicorn.html

               言介紹

    WSGI Server有哪些:

        Flask、webpy、Django、CherryPy 都附有WSGI Server 。當然效能都不好,自帶的web server更多的是測試用途, 線上發佈時,則使用高效能的 wsgi server或者是聯合nginx做uwsgi 。


    

二、安裝gunicorn

     ~$ sudo pip install gunicorn

        ~$ sudo pip install greenlet

     ~$ sudo pip install eventlet

     ~$ sudo pip install gevent

說明:如果安裝greenlet失敗的話,你需要安裝Python headers

    ~$ sudo apt-get llll python-devadm 可以看看orn - -version

          gunicorn (version 19.1.1)

二、gunicorn 指令使用

    成功安裝gunicorn 之後有以下三個指令使用或直接使用、用來啟動指令」,用來啟動指令。

    1. gunicorn


        Gunicorn server中最基本的指令,直接使用最基本的 wsgi application 。

        用法:gunicorn [OPTIONS] APP_MODULE

        OPTIONS 選用參數 運行gunicorn的設定選項,後面會講到。

        APP_MODULE 指定 wsgi application檔案,書寫格式 $(MODULE_NAME):$(VARIABLE_NAME)。其中 module_name用來指定將要執行的 wsgi application檔案,可是一個完整的點綴名稱。

        

例如目前目錄myapp目錄下有個python包gunicorn_app, gunicorn_app包下有一個wsgi application文件test.py。

        則module_name可以直接寫成gunicorn_app.test。

        variable_name表示在module_name檔案中要呼叫的物件(是一個WSGI callable,可以是一個函數)名稱。

        依照上面的例子,目前目錄為/home/workspace/myapp,myapp中有一個套件gunicorn_app,test.py程式碼如下:

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])
登入後複製
     我們會執行testtest.pyp. app

    2. gunicorn_django

        guniorn_django指令是用來將Django app部署到Gunicorn Server上的。

        其實也非常簡單,原理和 gunicorn一樣,只是gunicorn_django做了特殊處理,使得更加適合Django。


        基本用法:gunicorn_django [OPTIONS] [SETTINGS_PATH]

        OPTIONS 前面已經說過了。

        SETTINGS_PATH django app中 settings.py檔案所在的目錄,不寫的話預設在目前目錄下查找。

        不過這種用法適用於django1.4以前,對於Django1.4版本以後強烈建議使用gunicorn指令。

        

    3. gunicorn_paster

        此指令有興趣到官方文件中研究。


三、Gunicorn配置

     Gunicorn從三個不同的地方讀取設定資訊。

     第一個地方:從framework定義的設定資訊讀取,目前只對Paster架構有效。

     第二個地方:在命令列中定義,命令列中定義的設定資訊將會覆寫框架中定義的相同的參數名稱的值。

     第三個地方:建立一個設定文件,把設定資訊寫入文件(是一個python原始文件,所以你就像在寫python程式碼一樣)。

     透過gunicorn -h 查看所有指令設定資訊

      內容

     gunicorn --workers=4 --bind=127.0.0.1:8000 myapp.gunicorn_app.test:app

     上面的指令啟動4個workers,綁定至127.0.0.1:80是一個config.py設定檔原始碼:

     
import multiprocessing

bind = "127.0.0.1:8001"
workers = multiprocessing.cpu_count() * 2 + 1
登入後複製

     gunicorn --config=config.py myapp.gunicorn_app.test:app

四、gunicorn框架介紹

     Gunicorn是基于pre-fork模型的。也就意味着有一个中心管理进程(master process)用来管理worker进程集合。Master从不知道任何关于客户端的信息。所有请求

和响应处理都是由worker进程来处理的。

     Master(管理者)

     主程序是一个简单的循环,监听各种信号以及相应的响应进程。master管理着正在运行的worker集合。

     Worker类型

     1. Sync Workers

         最基本的也是默认的worker type。

         一个同步的worker class,同一时间只能控制一个request请求。

     2. Async Workers

        异步workers的使用是基于Greenlets(通过Eventlet和Gevent)。所以使用此worker type之前一定要安装好python对应的包。

        Greenlets是python多线程协作的一个实现。

     3. Tornado Workers  

         这是一个Tornado worker class。

     

五、Gunicorn部署

       使用Gunicorn必须基于一个代理服务器。

       1. Nginx Configuration

           虽然有很多HTTP代理可以使用,但是我们还是强烈推荐Nginx。如果你选择了其他代理服务器,你需要确认,当你使用默认的Gunicorn workers时,它能够buffers slow clients。没有buffering Gunicorn将很容易受 denial of service attacks的影响。也可使用 slowloris 去核实你的代理服务器是否工作良好。

         如下是一个nginx配置文件实例(假设127.0.0.1:8888端口已经被gunicorn绑定监听):

server {
        #listen   80; ## listen for ipv4; this line is default and implied
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6
        listen 80;
        client_max_body_size 4G;
        server_name www.android_stat.com

        keepalive_timeout 5;



        location / {
                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://127.0.0.1:8888;
        }
登入後複製
六、监控Gunicorn

       注意:要监控Gunicorn的时候,Gunicorn不能启动daemon模式,如果使用daemon模式会fork出一个进程,这样监控工具就没法监控这个进程。

       我在这只介绍supervisor

      1. Supervisor

          Supervisor可以用来监控进程,下面是一个简单的supervisor的配置文件:

[program:gunicorn]
command=/path/to/gunicorn main:application -c /path/to/gunicorn.conf.py
directory=/path/to/project
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
登入後複製

       

    

以上就介绍了nginx+gunicorn+django,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!