Безопасен ли сервер в комплекте с Flask для развертывания в производственной среде? Если нет, что мне использовать для развертывания Flask в производстве?
Безопасен ли сервер в комплекте с Flask для использования в производстве?
Ответы (3)
Нет. Связанный сервер является сервером разработки. Он не разработан с учетом производственной среды.
- По умолчанию он не будет обрабатывать более одного запроса за раз.
- Если вы оставляете режим отладки включенным и появляется всплывающая ошибка, она открывает оболочку, которая позволяет выполнять произвольный код на вашем сервере (подумайте
os.system('rm -rf /')
). - Сервер разработки плохо масштабируется.
Flask использует сервер разработки Werkzeug, и в документации говорится то же самое:
Сервер разработки не предназначен для использования в производственных системах. Он был разработан специально для целей разработки и плохо работает при высокой нагрузке. Настройки развертывания см. на страницах Application Deployment.
Рекомендуемый подход — использовать рабочий сервер WSGI для запуска вашего Flask. заявление. В документации есть целый раздел, посвященный развертыванию: Параметры развертывания.
Развернуть ваше приложение так же просто, как установить сервер WSGI, такой как uWSGI или gunicorn, и запустить его вместо сервера разработки Flask:
gunicorn -w 4 -b 127.0.0.1:4000 myproject:app
Если вы обслуживаете какие-либо статические ресурсы, такие как изображения или видео, нуждаетесь в низкоуровневом кэшировании или имеете более высокие требования к параллелизму, рекомендуется использовать веб-сервер, например nginx и пусть он обрабатывает все ваши запросы.
В дрянной форме ASCII:
+----------+
| Client 2 |
+----------+
|
V
+----------+ +-------+ +----------+
| Client 1 |----->| nginx |<-----| Client 3 |
+----------+ +-------+ +----------+
^
|
V
/--------------------\
| useful nginx stuff |
| like asset serving |
| and rate limiting |
\--------------------/
|
V
+-------------+
| WSGI server |
+-------------+
Чтобы фактически запустить серверный процесс WSGI, вы можете использовать Supervisor. Он автоматически перезапускает сервер, если он по какой-то причине выходит из строя, ведет журналы и работает как демон, поэтому ваша служба запускается при загрузке сервера.
supervisor
+ gunicorn
+ nginx
. Это действительно легко настроить и поддерживать.
- person Anton Egorov; 14.10.2013
threaded
. 2) Если вы оставляете режим отладки включенным и появляется всплывающая ошибка, он открывает оболочку, которая позволяет выполнять произвольный код => это можно легко отключить с помощью нескольких строк кода. 3) Сервер разработки плохо масштабируется. =› тест (если у кого-то есть) было бы интересно добавить конкретные факты, чтобы помочь людям понять, почему связанный сервер действительно так плох. Я доверяю вам, но все, кажется, повторяют это без источника.
- person Basj; 11.04.2018
pip install uwsgi && uwsgi --http :8000 -w yourapp:app
работает так же хорошо и фактически адаптирован для этого варианта использования?
- person Blender; 11.04.2018
В принципе, нет. Встроенный сервер разработки небезопасен для развертывания в производственной среде.
Встроенный сервер разработки предназначен именно для этого. Для использования в рабочей среде вы должны выполнить один из шагов, подробно описанных здесь.
К ним относятся различные серверы, реализующие спецификацию WSGI, такие как Apache/mod_wsgi или один из этих автономных серверов wsgi. http://flask.pocoo.org/docs/deploying/wsgi-standalone/ а>
Также есть uWSGI и FastCGI доступны параметры
Хотя легкий и простой в использовании, встроенный сервер Flask не подходит для производства, поскольку он плохо масштабируется и по умолчанию обслуживает только один запрос за раз. http://flask.pocoo.org/docs/0.12/deploying/