Является ли сервер в комплекте с флаконом безопасным для развертывания в производственной среде? Если нет, что я должен использовать для развертывания 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/
Ответ 3
В то время как легкий и простой в использовании, встроенный сервер Flasks не подходит для производства, так как он плохо масштабируется и по умолчанию обслуживает только один запрос за раз. http://flask.pocoo.org/docs/0.12/deploying/