使用 pid/gid 发布 运行 uWsgi
Issue running uWsgi using pid/gid
我正在尝试 运行 uWsgi 在我的 wsgi ini 文件中使用 uid
/gid
参数,以便它在启动后放弃特权访问。
注意:当我从 ini 文件中删除这两个参数时,一切正常。另外,我的套接字没有问题。但是,当我 运行 使用指定的 uid
和 gid
(nginx 用户和组)时,我收到一个错误,表明我的虚拟环境加载有问题,
Traceback (most recent call last):
File "wsgi.py", line 14, in <module>
from app import app as application
File "/var/www/wsgi/flask-appbuilder/peds_registry/app/__init__.py", line 1, in <module>
import logging
ImportError: No module named logging
同样,在 运行 没有 gid/pid 的情况下,这个工作正常。另外,请注意用户和组 nginx 都存在并且都拥有 python 项目目录结构的所有权。
我的 Nginx 配置的 server/location 指令如下:
server {
listen 80;
server_name hostname.domain;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name hostname.domain;
ssl_certificate /etc/ssl/certs/host.chained.crt;
ssl_certificate_key /etc/ssl/certs/host.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location /test {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
}
我的 uwsgi 启动是:
#!/bin/sh
# chkconfig: - 99 10
FLASK_HOME=/var/www/wsgi/flask-appbuilder
export PEDS_HOME
ACTIVATE_CMD=/var/www/wsgi/flask-appbuilder/venv/bin/activate
case "" in
start)
cd $FLASK_HOME
source $ACTIVATE_CMD
uwsgi -s /tmp/uwsgi.sock -H ./venv/ --ini /var/www/wsgi/flask-appbuilder/test.ini --virtualenv /var/www/wsgi/flask-appbuilder/venv --chmod-socket=666 --manage-script-name --mount /test=run:app --wsgi-file wsgi.py --logto test.log &
;;
stop)
pkill uwsgi
;;
restart)
[=13=] stop
[=13=] start
;;
*)
echo "usage: [=13=] (start|stop|restart|help)"
esac
而我的 uWsgi 启动 ini 是:
[uwsgi]
socket = /tmp/uwsgi.sock
chdir = /var/www/wsgi/flask-appbuilder/peds_registry
wsgi-file = wsgi.py
pyhome = /var/www/wsgi/flask-appbuilder/venv
callable = app
manage-script-name = true
mount: /test=run.py
如前所述,在没有 gid/uid 参数的情况下加载正常,但是当我添加
uid = nginx
gid = nginx
到ini文件,我得到上面提到的错误。
我的所有搜索都产生了对套接字的权限,但我的问题似乎是从虚拟环境中加载模块。
旁注:我正在使用从 pip 安装到我的虚拟环境中的 uWsgi。
这完全不明显。作为测试,我尝试使用自己的 uid
/gid
来 运行 应用程序,你瞧,它成功了!
所以,考虑到 "I must have ownership on something that the app uid
/gid
does not have permission to run",我在我的用户名上搜索了 venv,瞧,答案出现了:该应用程序的要求之一是我需要 运行 python 2.7.6,我按照这个要点安装了它:Python Deployment。因此,将 DEPLOY
目录结构(在 venv 的目录结构之外)的所有权更改为应用程序的 user/group 是门票。
我正在尝试 运行 uWsgi 在我的 wsgi ini 文件中使用 uid
/gid
参数,以便它在启动后放弃特权访问。
注意:当我从 ini 文件中删除这两个参数时,一切正常。另外,我的套接字没有问题。但是,当我 运行 使用指定的 uid
和 gid
(nginx 用户和组)时,我收到一个错误,表明我的虚拟环境加载有问题,
Traceback (most recent call last):
File "wsgi.py", line 14, in <module>
from app import app as application
File "/var/www/wsgi/flask-appbuilder/peds_registry/app/__init__.py", line 1, in <module>
import logging
ImportError: No module named logging
同样,在 运行 没有 gid/pid 的情况下,这个工作正常。另外,请注意用户和组 nginx 都存在并且都拥有 python 项目目录结构的所有权。
我的 Nginx 配置的 server/location 指令如下:
server {
listen 80;
server_name hostname.domain;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name hostname.domain;
ssl_certificate /etc/ssl/certs/host.chained.crt;
ssl_certificate_key /etc/ssl/certs/host.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location /test {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
}
我的 uwsgi 启动是:
#!/bin/sh
# chkconfig: - 99 10
FLASK_HOME=/var/www/wsgi/flask-appbuilder
export PEDS_HOME
ACTIVATE_CMD=/var/www/wsgi/flask-appbuilder/venv/bin/activate
case "" in
start)
cd $FLASK_HOME
source $ACTIVATE_CMD
uwsgi -s /tmp/uwsgi.sock -H ./venv/ --ini /var/www/wsgi/flask-appbuilder/test.ini --virtualenv /var/www/wsgi/flask-appbuilder/venv --chmod-socket=666 --manage-script-name --mount /test=run:app --wsgi-file wsgi.py --logto test.log &
;;
stop)
pkill uwsgi
;;
restart)
[=13=] stop
[=13=] start
;;
*)
echo "usage: [=13=] (start|stop|restart|help)"
esac
而我的 uWsgi 启动 ini 是:
[uwsgi]
socket = /tmp/uwsgi.sock
chdir = /var/www/wsgi/flask-appbuilder/peds_registry
wsgi-file = wsgi.py
pyhome = /var/www/wsgi/flask-appbuilder/venv
callable = app
manage-script-name = true
mount: /test=run.py
如前所述,在没有 gid/uid 参数的情况下加载正常,但是当我添加
uid = nginx
gid = nginx
到ini文件,我得到上面提到的错误。
我的所有搜索都产生了对套接字的权限,但我的问题似乎是从虚拟环境中加载模块。
旁注:我正在使用从 pip 安装到我的虚拟环境中的 uWsgi。
这完全不明显。作为测试,我尝试使用自己的 uid
/gid
来 运行 应用程序,你瞧,它成功了!
所以,考虑到 "I must have ownership on something that the app uid
/gid
does not have permission to run",我在我的用户名上搜索了 venv,瞧,答案出现了:该应用程序的要求之一是我需要 运行 python 2.7.6,我按照这个要点安装了它:Python Deployment。因此,将 DEPLOY
目录结构(在 venv 的目录结构之外)的所有权更改为应用程序的 user/group 是门票。