Когда и как создается файл .sock для стека uWSGI, nginx и Django - PullRequest
0 голосов
/ 07 сентября 2018

Я знаю, что существуют десятки вопросов по этому поводу, которые в основном вытекают из следования официальному Руководству uWSGI . У меня тоже были проблемы с разрешениями, но другие ответы покрывали их. Я хочу лучше понять, как и когда создается файл сокетов / сокетов Unix. К вашему сведению, это экземпляр AWS ec2 под управлением Amazon Linux 2 AMI.

Руководство uWSGI предлагает вам установить nginx, Django и uwsgi. Затем протестируйте сервер разработки Django и nginx по отдельности. Затем в этом разделе вы проверяете, что uWSGI и nginx работают вместе с сокетом tcp / ip для связи. После этого, все еще не задействовав проект Django, они описывают, как использовать сокеты Unix, а не сокет tcp / ip для связи между nginx и uWSGI. Следуя всей конфигурации nginx / uWSGI, вы запускаете команду из домашнего каталога (по крайней мере для моей конкретной файловой структуры и проекта Django, ~/test_project):

uwsgi --socket test_project/test_project.sock --wsgi-file test.py

Это прекрасно работает, когда решаются некоторые проблемы с разрешениями. Мои вопросы: что такое test_project.sock, когда он создан и какой процесс его создает. Мое лучшее текущее понимание - то, что uWSGI создает его, но почему тогда мы вообще должны включать проект Django (здесь test_project)? Почему бы просто не создать сокет вне папки проекта Django? Используем ли мы синтаксис python, и он является членом какого-то test_project объекта или модуля?

Я знаю, что test_project.sock связан с сокетом Unix. Я думал, что это будет настоящий файл, но это не так. Даже когда я запускаю uWSGI в фоновом режиме и смотрю в соответствующем каталоге, его там нет. Это настолько эфемерно, что оно существует только тогда, когда запрос фактически передается из nginx в uWSGI?

Кроме того, не имея возможности увидеть файл (test_project.sock), как я могу узнать, какие разрешения необходимы для доступа к нему? Я провел несколько тестов и теперь подозреваю, что это связано с разрешениями для файла ~/test_project/test_project/wsgi.py, но у меня нет прямых доказательств.

1 Ответ

0 голосов
/ 07 сентября 2018

Вы можете создать сокет, файл *.sock вне проекта Django.Когда вы сделаете это, файл сохранится после завершения процесса uWSGI.Затем вы можете посмотреть файл и определить разрешения.

Я был сбит с толку, потому что многие учебники, включая [официальный uWSGI] 1 , заставили пользователя поместить файл *.sock в проект Django.Я до сих пор не уверен, почему это необходимо и почему файл в этом случае не сохраняется.

...