Я пытаюсь настроить 2 веб-приложения Django на одном компьютере с использованием uWSGI emperor и nginx, и супервизор управляет запуском и перезапуском процесса emperor. Наконец, после долгих поисков в Интернете мне удалось получить рабочее развертывание. Однако во время всего этого выдергивания волос я обнаружил что-то странное, и был бы признателен, если бы кто-нибудь объяснил мне, почему это происходит.
Итак, я запускаю свой процесс uWSGI в режиме императора от имени пользователя root. Конфигурационные файлы вассала ini позаботятся об отказе от прав для моего 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, я начну получать ошибки отказа в разрешении для вызова сокета bind (). Сокет создается нормально с соответствующими правами собственности и разрешениями, но вассал не может вызвать для него bind () или unlink (). Почему это происходит? В чем разница между / tmp и / run и когда их использовать? Любая помощь или указатели будут оценены.
РЕДАКТИРОВАТЬ: Я просто попытался установить разрешения сокета на 777, но uwsgi по-прежнему выдает мне ошибку с отказом в разрешении :(
У меня недостаточно репутации на serverfault для комментариев, поэтому я должен дать «ответ»:
Вызов bind () связывает сокет с узлом файловой системы, поэтому, вероятно, у вашего пользователя нет прав на запись в / run !? В моей системе / tmp имеет og+w
в то время как / run имеет og-w
. Попробуйте создать сокет в подпапке / run с разрешениями на запись.
Что вы имеете в виду, говоря «сокет создан нормально»? Можете ли вы подключиться к нему с помощью другого процесса? Похоже, розетка есть. Но, судя по тому, что я написал выше, я не ожидаю, что он появится в файловой системе.