Heim  >  Artikel  >  Backend-Entwicklung  >  Nginx Gunicorn Django

Nginx Gunicorn Django

WBOY
WBOYOriginal
2016-08-08 09:30:071555Durchsuche

<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>

Referenzadresse: http://www.cnblogs.com/ArtsCrafts/p/gunicorn.html

                                                      .com/1030776/1276364

1. Einführung

Was sind die WSGI-Server:
Beispielsweise werden Flask, Webpy, Django und CherryPy alle mit WSGI-Server geliefert. Natürlich ist die Leistung nicht gut. Wenn Sie online veröffentlichen, verwenden Sie einen Hochleistungs-WSGI-Server oder kombinieren Sie ihn mit Nginx, um UWSGI auszuführen.

2. Gunicorn installieren

~$ sudo pip install gunicorn

Wenn Sie möchten, dass Gunicorn asynchrone Worker unterstützt, müssen Sie drei Python-Pakete installieren 🎜>

~$ sudo pip install greenlet

~$ sudo pip install eventlet

~$ sudo pip install gevent

Hinweis: Wenn die Installation von Greenlet fehlschlägt, Sie müssen Python-Header installieren


~$ sudo apt-get install python-dev

Wir können die Version von Gunicorn überprüfen

~$ Gunicorn -- Version

Gunicorn (Version 19.1.1)

2. Verwenden Sie den Gunicorn-Befehl

Nach der erfolgreichen Installation von Gunicorn können Sie die folgenden drei Befehle direkt verwenden, um Gunicorn zu starten und die wsgi-Anwendung oder wsgi auszuführen Rahmen.

1. gunicorn

Der grundlegendste Befehl des Gunicorn-Servers, der direkt zum Ausführen der grundlegendsten Wsgi-Anwendung verwendet wird.

Verwendung: gunicorn [OPTIONS] APP_MODULE

OPTIONS Optionale Parameter Konfigurationsoptionen für die Ausführung von Gunicorn, die später besprochen werden.

APP_MODULE gibt die WSGI-Anwendungsdatei an und schreibt das Format $(MODULE_NAME):$(VARIABLE_NAME). Unter diesen wird Modulname verwendet, um die auszuführende WSGI-Anwendungsdatei anzugeben, es handelt sich jedoch um einen vollständigen Verschönerungsnamen.

Beispielsweise gibt es ein Python-Paket gunicorn_app und das Paket gunicorn_app im aktuellen Verzeichnis. Das MyApp-Verzeichnis enthält eine WSGI-Anwendungsdatei test.py.

Dann kann module_name direkt als gunicorn_app.test geschrieben werden.

Variablenname stellt den Namen des Objekts (ein aufrufbares WSGI, das eine Funktion sein kann) dar, das in der Datei module_name aufgerufen werden soll.

Gemäß dem obigen Beispiel ist das aktuelle Verzeichnis /home/workspace/myapp, und in myapp gibt es ein Paket gunicorn_app. Der test.py-Code lautet wie folgt:

Wir werden die Test-App ausführen

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])

in .py gunicorn gunicorn_app.test:app

2. gunicorn_django

Der Befehl guniorn_django wird verwendet, um die Django-App bereitzustellen Gunicorn-Server.

Eigentlich ist das Prinzip das gleiche wie bei gunicorn, außer dass gunicorn_django speziell verarbeitet wurde, um es besser für Django geeignet zu machen.

Grundlegende Verwendung: gunicorn_django [OPTIONS] [SETTINGS_PATH]

OPTIONS wurde bereits erwähnt.

SETTINGS_PATH Das Verzeichnis, in dem sich die Datei „settings.py“ in der Django-App befindet. Wenn sie nicht geschrieben wird, wird sie standardmäßig im aktuellen Verzeichnis gesucht.


Diese Verwendung gilt jedoch für Django1.4 und höher. Es wird dringend empfohlen, den Befehl gunicorn für Django1.4 und höher zu verwenden.

3. gunicorn_paster

Wenn Sie an diesem Befehl interessiert sind, können Sie ihn in der offiziellen Dokumentation studieren.

3. Gunicorn-Konfiguration

Gunicorn liest Konfigurationsinformationen von drei verschiedenen Orten.

Der erste Platz: Lesen Sie die vom Framework definierten Konfigurationsinformationen aus, die derzeit nur für das Paster-Framework gültig sind.

Zweiter Platz: In der Befehlszeile definiert. Die in der Befehlszeile definierten Konfigurationsinformationen überschreiben den im Framework definierten Wert desselben Parameternamens.

Der dritte Ort: Erstellen Sie eine Konfigurationsdatei und schreiben Sie die Konfigurationsinformationen in die Datei (es handelt sich um eine Python-Quelldatei, Sie sind also so, als würden Sie Python-Code schreiben).

Alle Befehlskonfigurationsinformationen über gunicorn -h anzeigen

Detailliertere Informationen können Sie auch in der offiziellen Dokumentation anzeigen: http://docs.gunicorn.org/en/19.2/

Zum Beispiel basierend auf dem Myapp-Beispiel oben

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

oben Der Befehl startet 4 Worker und bindet an 127.0.0.1:8000

Oder Sie können die Konfigurationsdatei verwenden:

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

import multiprocessing

bind = "127.0.0.1:8001"
workers = multiprocessing.cpu_count() * 2 + 1
Einführung in das Gunicorn-Framework

     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教程有兴趣的朋友有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn