[PYTHON] UWSGI-Einstellungsnotiz bei ordnungsgemäßem Betrieb

Ich habe mit Flask + uWSGI + Nginx ein Backend für eine bestimmte App erstellt und zusammengefasst, was ich getan habe.

Zusammenarbeit mit Nginx

So verbinden Sie sich mit dem wsgi-Protokoll

nginx.conf


location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:3031;
}

uwsgi.ini


socket=127.0.0.1:3031

Übrigens kann ich mit dieser Einstellung nichts sehen, selbst wenn ich mit einem Browser auf http://127.0.0.1:3031 drücke und sage, dass nur uWSGI Debug-Debug ist. Ich war ein paar Minuten lang begeistert, ohne den Unterschied zwischen den Uwsgi-Optionen "Socket" und "http" zu kennen.

So stellen Sie eine Verbindung als http-Proxy her

nginx.conf


location / {
    include uwsgi_params;
    proxy_pass http://127.0.0.1:3031;
}

uwsgi.ini


http=127.0.0.1:3031

Intuitiver Proxy. Zuerst dachte ich, das sei der einzige Weg. Dies ist die, die Sie unter http://127.0.0.1:3031 sehen können.

Verbindungsmethode mit Steckdose (übernommen)

Grundsätzlich ist dies in Ordnung, da beim Veröffentlichen mehrerer Apps keine zusätzliche Portnummer benötigt wird. Dies wird angenommen.

nginx.conf


location / {
    include uwsgi_params;
    uwsgi_pass unix:/path/to/app/app.sock;
}

uwsgi.ini


socket=/path/to/app/app.sock

uWSGI Emperor

Verwenden Sie es, weil es praktisch ist, wenn Sie mehrere Apps mit uWSGI verwalten.

Referenz: http://qiita.com/5t111111/items/e170fead91261621b054#1-8

Der automatische Start ist auch einfacher geworden!

Feinabstimmung der Parameter

Prozesse, Limit-as, Max-Anfragen, Harakiri. Harakiri.

Referenz: http://docs.djangoproject.jp/en/latest/howto/deployment/wsgi/uwsgi.html

Es ist eine Django-Site, aber wenn es sich um eine WSGI-App handelt, ist Flask auch hilfreich. Übrigens verwenden "Daemonize" und "Master" Emperor, sodass sie nicht aktiviert sind. Ich denke, das ist wahrscheinlich der Fall, aber es tut mir leid, wenn es anders ist. Ich warte auf Tsukkomi.

Passen Sie die Einstellungen während eines Auslastungstests an.

UWSGI wird bei Bereitstellung neu geladen

Selbst wenn die Datei geändert wird, wird sie nicht wiedergegeben

uwsgi.ini


touch-reload=/path/to/app/reload.trigger

Wenn Sie zum Zeitpunkt der Bereitstellung "/ path / to / app / reload.trigger" berühren, wird uWSGI beim nächsten Anforderungsempfang neu geladen. Ich habe mich entschlossen, das Bereitstellungsskript zu berühren.

Referenz: http://field-notes.hatenablog.jp/entry/2012/05/09/115600

(Eine andere Lösung) Überwachen Sie die Datei. Referenz: http://d.hatena.ne.jp/dayflower/20121017/1350447805

Verlieren Sie nicht den Überblick über Protokolldateien, wenn Sie das Protokoll drehen

Der Typ, der nach der Freilassung ein Mädchen wird.

uwsgi.ini


touch-logreopen=/path/to/app/logreopen.trigger

Wie auch immer,

/path/to/uwsgi.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    sharedscripts
    size 1M
    postrotate
        touch /path/to/app/logreopen.trigger
    endscript
}

Referenz: http://taichino.com/memo/3843

(Ergänzung) Immerhin habe ich geschrieben, dass es so aussieht

/etc/nginx/conf.d/sample_nginx.conf

sample_nginx.conf


#Ich mag es nicht, wenn ich von IP getroffen werde. Das musst du nicht
server {
    listen  80 default_server;
    server_name _;
    root    /var/app/dummy;
    index index.html;
}

server {
    listen      80;
    server_name sample.com;
    charset     utf-8;
    client_max_body_size 75M;

    location / { try_files $uri @uwsgi; }
    #Überlassen wir die statische Aufladung Nginx
    location /static/ {
        root /var/app/sample/webapp;
    }
   location @uwsgi {
        include uwsgi_params;
        uwsgi_pass unix:/var/app/sample/sample_uwsgi.sock;
    }
}

/etc/uwsgi/vassals/sample_uwsgi.ini

Fügen Sie uwsgi.ini in / etc / uwsgi / vassals / für uWSGI Emperor ein.

sample_uwsgi.ini


[uwsgi]
base = /var/app/sample

app = main #Flasche ist die Haupt zu starten.Wenn es py ist, main
#Probe für Django.wsgi:Ich fühle mich wie eine Anwendung

module = %(app)

#Pfad zu virtualenv, auf dem diese App ausgeführt wird
#Wenn Sie rohes Python verwenden, ist dies der Pfad zum Python-Verzeichnis?
home = /home/www-data/venvs/sampleapp

pythonpath = %(base)

socket = %(base)/%n.sock

chmod-socket    = 666

#the variable that holds a flask application inside the module imported at line #6
callable = app

#Protokollierung
logto = /var/log/uwsgi/%n.log
#Der Typ, der die Postrotate von Logrotate einsetzt
touch-logreopen = %(base)/.logreopen_trigger

#Auslöser zum Neuladen von uwsgi
touch-reload = %(base)/.uwsgi_touch

max-requests = 1000
harakiri = 60

#Ich habe es vom Kaiser benutzt, also habe ich es auskommentiert
#master=True
#daemonize=/var/log/uwsgi/sample.log

/etc/init/uwsgi.conf (zum Starten von uWSGI Emperor) (für CentOS6)

uwsgi.conf


description "uWSGI"
start on runlevel [2345]
stop on runlevel [06]
respawn

#Ich habe nur uwsgi für uwsgi emperor installiert und die virtuelle Umgebung mit dem Namen uwsgi deaktiviert. ICH.
#Wenn nicht, geben Sie das Installationsziel für uwsgi an und es sollte funktionieren.
env UWSGI=/home/www-data/venvs/uwsgi/bin/uwsgi
env LOGTO=/var/log/uwsgi/emperor.log

#Ändern Sie UID und GID entsprechend
exec $UWSGI --master --emperor /etc/uwsgi/vassals --die-on-term --uid www-data --gid www-data --logto $LOGTO
start uwsgi

Starten Sie alle uwsgi-Apps unter / etc / uwsgi / vassals. Führen Sie gegebenenfalls einen automatischen Start durch

/etc/systemd/system/uwsgi.service (zum Starten von uWSGI Emperor) (für CentOS 7)

uwsgi.service


[Unit]
Description=uWSGI
After=syslog.target

[Service]
#Ich habe nur uwsgi für uwsgi emperor installiert und die virtuelle Umgebung mit dem Namen uwsgi deaktiviert. ICH.
#Wenn nicht, geben Sie das Installationsziel für uwsgi an und es sollte funktionieren.
#Ändern Sie auch UID und GID nach Bedarf
ExecStart=/home/www-data/venvs/uwsgi/bin/uwsgi --master --emperor /etc/uwsgi/vassals --die-on-term --uid www-data --gid www-data --logto /var/log/uwsgi/emperor.log
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target
systemctl start uwsgi

Starten Sie alle uwsgi-Apps unter / etc / uwsgi / vassals. Ein automatischer Start ist angemessen.

Recommended Posts

UWSGI-Einstellungsnotiz bei ordnungsgemäßem Betrieb
Hinweise zur Verwendung beim Kombinieren von pandas.DataFrame
Pycharm Einstellung Memo schreiben
Arbeitsnotizen bei der Installation von mitmproxy
[WSL2] CentOS 8 VS-Codeeinstellungsnotiz