Ich habe mit Flask + uWSGI + Nginx ein Backend für eine bestimmte App erstellt und zusammengefasst, was ich getan habe.
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.
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.
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!
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.
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
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
/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
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
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.