我试图用nginx连接到由ubuntu-server上运行的supervisord控制的uwsgi服务应用程序来testing一个试验系统。 应用程序是用virtualenv中的Flask编写的,虽然我不确定这是否相关。 为了testing系统,我用flask创build了一个简单的hello world。 我希望nginx和uwsgi都以www数据用户的身份运行。
如果我从root shell“手动”启动uwsgi我可以看到uwsgi进程在适当的用户(www-data)下运行。 虽然,如果我让supervisor启动应用程序发生了一些奇怪的事情 – uwsgi进程正在我的用户(friendzis)下运行。 因此,套接字文件被创build在错误的用户下,nginx无法与我的应用程序通信。
注意:在Windows Server 2008下,linux服务器作为Hyper-V VM运行。
相关configuration:
[uwsgi] socket = /var/www/sockets/cowsay.sock chmod-socket = 666 abstract-socket = false master = true workers = 2 uid = www-data gid = www-data chdir = /var/www/cowsay/cowsay pp = /var/www/cowsay/cowsay pyhome = /var/www/cowsay module = cowsay callable = app
监
[program:cowsay] command = /var/www/cowsay/bin/uwsgi -s /var/www/sockets/cowsay.sock -w cowsay:app directory = /var/www/cowsay/cowsay user = www-data autostart = true autorestart = true stdout_logfile = /var/www/cowsay/log/supervisor.log redirect_stderr = true stopsignal = QUIT
我确定我错过了一些小的细节,但我无法注意到它。 将不胜感激任何build议。
您应该在程序部分指定一个environment选项。 例如:
user=chrism environment=HOME="/home/chrism",USER="chrism"
有关详细信息,请参阅子stream程环境 。
此外,在stackoverflow上提出了一个类似的解决scheme
你的跑步怎么样supervisord? 你确定你没有从shell(和你的uid)运行吗?
你确定你需要supervisord? 你可以很容易地将uWSGI附加到新贵或systemd(最终与uWSGI皇帝)