2 Stimmen

Probleme bei der Bereitstellung von Pyramid mit uWSGI auf Nginx

Ich scheine einige leichte Probleme bei der Bereitstellung einer Pyramid-Webanwendung zu haben. Das Problem scheint in meinem Init-Skript zu liegen, das ich zum Starten meiner Webanwendung beim Booten verwende. Aus irgendeinem Grund funktioniert uWSGI nur, wenn mein Socket auf die Berechtigung "nobody.nobody" gesetzt ist ODER Nginx nach meinem uwsgi-Init-Skript gestartet wird. Ich habe mein Init-Skript geändert, um diese Änderungen zu berücksichtigen, aber es scheint nicht zu funktionieren. Das Init-Skript (oder der Teil, der uwsgi startet) sieht wie folgt aus:

#!/sbin/runscript
args="--ini-paste /var/www/pyramid/app1/development.ini"
command="/var/www/pyramid/bin/uwsgi"
pidfile="/var/run/uwsgi.pid"
sock="/var/tmp/proxy/uwsgi.sock"
nobody="nobody.nobody"

start() {
  ebegin "Starting app1"
  chown $nobody $sock
  start-stop-daemon --start --exec $command -- $args \
      --pidfile $pidfile 
  chown $nobody $sock
  einfo "app1 started"
  eend $?
}

Meine Nginx-Konfiguration sieht folgendermaßen aus:

location / { 
    include uwsgi_params;
    uwsgi_pass unix:///var/tmp/proxy/uwsgi.sock;
    uwsgi_param SCRIPT_NAME "" ;
}  

Meine ini-Datei enthält Folgendes:

[uwsgi]
socket = /var/tmp/proxy/uwsgi.sock
pidfile = /var/run/uwsgi.pid
master = true
processes = 1
home = /var/www/pyramid
daemonize = /var/log/uwsgi.log
virtualenv = /var/www/pyramid/
pythonpath = /var/www/pyramid/bin

Was passiert, ist, dass Nginx startet und dann uwsgi startet. Ein "ls -la" in /var/tmp/proxy zeigt, dass die Berechtigungen von uwsgi.sock auf "Root Root" statt auf "nobody nobody" gesetzt sind. Ein Neustart von Nginx behebt das Problem jedoch, unabhängig davon, welche Berechtigungen der Socket hat (Nginx muss jedoch zuerst gestartet werden).

Die Möglichkeiten, wie ich das zum Laufen bringen kann, sind also:

  • uwsgi starten
  • nginx starten
  • nginx neu starten

ou

  • nginx starten
  • uwsgi starten
  • nginx neu starten

Ich bin völlig ratlos, warum das nicht funktioniert. Wenn jemand einen Rat hat, wäre ich sehr dankbar!

0voto

Sie können die folgenden Einstellungen verwenden, um die Berechtigung des Sockets in Ihrer Ini-Datei zu ändern:

chmod-socket = 777 # socket permission
gid = www-data # socket group 
uid = www-data # socket user

0voto

Hungry Bastard Punkte 111

Eine weitere Überlegung ist, ob Sie uWSGI tatsächlich als Root laufen lassen wollen. Wenn Sie --uid und --gid Argumente an uwsgi übergeben, wird sich uwsgi als ein anderer (vorzugsweise nicht-Root) Benutzer ausgeben.

Zum Beispiel läuft nginx normalerweise unter dem Benutzer www-data und der Gruppe www-data. Wenn Sie also Ihre wsgi-Anwendung so einrichten, dass sie mit "--gid www-data" läuft, und dann Ihrer Socket-Datei mit "--chmod-socket 020" mindestens Gruppen-Schreibrechte hinzufügen, kann nginx in den Socket schreiben, und Sie sind im Geschäft.

Siehe meinen Blogbeitrag zu diesem Thema: http://blog.jackdesert.com/common-hurdles-to-deploying-uwsgi-apps-part-1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X