2

Pyramid Web アプリケーションをデプロイする際に若干の問題があるようです。問題は、起動時に Web アプリケーションを起動するために使用している init スクリプトにあるようです。何らかの理由で、ソケットが「nobody.nobody」の許可を持つように設定されていないか、uwsgi init スクリプトの後に Nginx が開始されない限り、uWSGI は機能しません。これらの変更を反映するように init スクリプトを変更しましたが、機能していないようです。init スクリプト (または uwsgi を開始する部分) は次のようになります。

#!/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 $?
}

私のNginx構成は次のようになります:

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

私のiniファイルには以下が含まれています:

[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

何が起こるかというと、Nginx が起動し、次に uwsgi が起動します。/var/tmp/proxy で「ls -la」を実行すると、uwsgi.sock の権限が「nobody nobody」ではなく「root root」に設定されていることがわかります。ただし、ソケットのアクセス許可に関係なく、Nginx を再起動すると問題が解決します (ただし、最初に Nginx を起動する必要があります)。

したがって、これを機能させる方法は次のとおりです。

  • uwsgiを起動
  • nginxを起動
  • nginxを再起動する

また

  • nginxを起動
  • uwsgiを起動
  • nginxを再起動する

なぜこれが機能しないのか、私は完全に途方に暮れています。誰かアドバイスがあれば、とてもありがたいです!

4

2 に答える 2

0

次の設定を使用して、ini ファイルでソケットのアクセス許可を変更できます。

chmod-socket = 777 # socket permission
gid = www-data # socket group 
uid = www-data # socket user
于 2013-07-11T16:43:35.347 に答える