我试图在同一台机器上设置2个Django网络应用程序,使用uWSGI皇帝和nginx,并监督管理启动和重新启动皇帝进程。我终于在互联网上进行了大量的搜索,终于得到了一个有效的部署。然而,在所有的拉头发过程中,我发现了一些奇怪的东西,如果有人能向我解释为什么会发生这种事,我会很感激的。
因此,我在皇帝模式下作为根运行我的uWSGI进程。vassal配置文件负责将特权丢弃到我的uid,并创建一个由我的用户拥有的套接字文件,其组为www-data (以便nginx可以向其写入)和权限660。下面是一个示例附属物配置:
[uwsgi]
uid = xxxx
chdir = %(project_dir)/%(project)
home = %(venv_base)/%(venv)
module = %(project).wsgi:application
master = true
processes = 4
socket = /tmp/%(project).sock
chown-socket = %(uid):www-data
chmod-socket = 660
stats = /tmp/%(project)_stat.sock
logto = %(project_dir)/logs/uwsgi.log
# Cleans up when the process is killed (includes deleting the socket file)
vacuum = true这很好,但是如果我尝试在/run中而不是/tmp中创建套接字,我就开始获得socket bind()调用的权限被拒绝的错误。套接字是用适当的所有权和权限创建的,但是附属者无法在其上调用bind()或unlink()。这一切为什么要发生?/tmp和/run有什么区别,我什么时候应该使用它们?任何帮助或指示都将不胜感激。
编辑:我刚刚尝试将套接字的权限设置为777,而uwsgi仍然给我一个拒绝权限的错误:(
发布于 2016-12-07 17:53:42
我在服务器故障上没有足够的声誉来发表评论,所以我必须给出一个“答案”:
bind()调用将套接字绑定到文件系统中的一个节点,因此您的用户可能在/run中没有写权限!?在我的系统中,/tmp有og+w,而/run有og-w。尝试在具有写权限的/run子文件夹中创建套接字。
您所说的“套接字创建得很好”是什么意思?你能用另一个进程连接到它吗?听起来好像插座在那儿。但是根据我上面写的,我不希望它出现在文件系统中。
https://serverfault.com/questions/819284
复制相似问题