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を再起動する
なぜこれが機能しないのか、私は完全に途方に暮れています。誰かアドバイスがあれば、とてもありがたいです!