Nginx + GUnicorn + Flask + www-data user - блокировка файла
У меня есть несколько довольно простых вопросов о том, что я развертываю приложение Flask в Gunicorn (19.0-1) на Ubuntu (14.10) в сочетании с Nginx.
Поскольку это приложение расположено рядом с Web2Py, я следовал руководству по блокировке веб-сайта, созданного Web2Py, и применил ту же стратегию для своего приложения Flask.
В этом примере работники Gunicorn запускаются как пользователь www-данных, а файлы и источник в /var/www блокируются, помещая группу www-data в качестве владельца, а www-data - в группу.
Однако несколько моментов смущают меня:
- Хотя работники Gunicorn работают как www-data, демон сервера Gunicorn работает как root. Будет ли это поводом для беспокойства?
- Поиск Nginx + Gunicorn + Flask приводит к сайтам, которые рекомендуют запускать Gunicorn через supervisord, а не как службу init.d. Должен ли я рассмотреть вопрос о переключении?
- Так как учетная запись www-data заблокирована (без оболочки / без пароля), где разработчики, использующие виртуальную машину, могут выполнить свой код так, чтобы среда соответствовала производству как можно ближе?
1 ответ
Я сам использую Flask с Nginx и Gunicorn, поэтому постараюсь ответить как можно лучше:
1). Возможно, но из моих собственных исследований и опыта лучше вообще не запускать Gunicorn в режиме демона и использовать вместо этого какой-то специальный менеджер процессов (например, Supervisor).
2). Supervisor и init.d не служат строго одной и той же цели. Init.d - это "Демон инициализации", его целью является служба, которая запускает все другие службы (например, Gunicorn). Supervisor - это диспетчер управления процессами, который можно использовать для запуска других служб, а также для мониторинга и перезапуска их, если что-то идет не так. Однако Supervisor по-прежнему нужен init.d (или его преемник Upstart), чтобы запустить его при загрузке. Я предпочитаю использовать Supervisor, потому что он прост в использовании и позволяет мне быстро запускать, останавливать и / или перезапускать работников Gunicorn.
3). У вас обычно есть какая-то специальная среда разработки, которая является копией производства. Я лично использую 3 облачных сервера, 1 для производства, 1 для подготовки (иначе говоря, полигон для проверки правильности развертывания приложения) и 1 для разработки. Постановка и разработка являются копиями постановки.