Безопасен ли сервер в комплекте с Flask для использования в производстве?

Является ли сервер в комплекте с флаконом безопасным для развертывания в производственной среде? Если нет, что я должен использовать для развертывания Flask в процессе производства?

Ответ 1

Нет. Связанный сервер является сервером разработки. Он не разработан с учетом производственных условий.

  • По умолчанию не будет обрабатываться более одного запроса.
  • Если вы оставите режим отладки включенным и появится всплывающее окно, оно откроет оболочку, позволяющую выполнить произвольный код на вашем сервере (подумайте os.system('rm -rf /')).
  • Сервер разработки недостаточно масштабируется.

Flask использует сервер разработки Werkzeug, и в документации написано то же самое:

Сервер разработки не предназначен для использования в производственных системах. Он был разработан специально для целей разработки и плохо работает при высокой нагрузке. Для установок развертывания просмотрите страницы Application Deployment.

Рекомендуемый подход - использовать сервер WSGI для производства для запуска приложения Flask. Там весь раздел посвящен развертыванию в документах: Параметры развертывания


Если вы используете какие-либо статические активы, такие как изображения или видео, необходимо кэширование низкого уровня или иметь более высокие требования concurrency, рекомендуется использовать веб-сервер, например 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. Он автоматически перезапускает сервер, если он по какой-то причине не работает, сохраняет журналы и запускается как демон, поэтому ваш сервис запускается при загрузке сервера.

Ответ 2

В принципе, нет. Встроенный сервер разработки не безопасен для развертывания в рабочей среде.

Встроенный сервер разработки для этого. Для использования в производстве вы должны следовать одному из шагов, описанному ниже .

К ним относятся разные серверы, которые реализуют спецификацию WSGI, такие как Apache/mod_wsgi или один из этих автономных серверов wsgi http://flask.pocoo.org/docs/deploying/wsgi-standalone/

Есть также uWSGI и FastCGI доступные опции

Ответ 3

В то время как легкий и простой в использовании, встроенный сервер Flasks не подходит для производства, так как он плохо масштабируется и по умолчанию обслуживает только один запрос за раз. http://flask.pocoo.org/docs/0.12/deploying/