Gunicorn
Gunicorn — это чистый Python WSGI-сервер с простой конфигурацией и несколькими реализациями рабочих процессов для настройки производительности.
- Он, как правило, легко интегрируется с платформами хостинга.
- Он не поддерживает Windows (но работает под WSL).
- Его легко установить, так как он не требует дополнительных зависимостей или компиляции.
- Он имеет встроенную поддержку асинхронных рабочих процессов с использованием gevent или eventlet.
Эта страница описывает основы запуска Gunicorn. Обязательно ознакомьтесь с его документацией и используйте gunicorn --help для понимания доступных функций.
Установка
Gunicorn легко установить, так как он не требует внешних зависимостей или компиляции. Он работает на Windows только под WSL.
Создайте виртуальную среду, установите ваше приложение, а затем установите gunicorn.
$ cd hello-app $ python -m venv .venv $ . .venv/bin/activate $ pip install . # install your application $ pip install gunicorn
Запуск
Единственный обязательный аргумент для Gunicorn указывает, как загрузить ваше приложение Flask. Синтаксис: {module_import}:{app_variable}. module_import — это импортированное имя модуля с вашим приложением. app_variable — это переменная с приложением. Это также может быть вызов функции (с любыми аргументами), если вы используете шаблон фабрики приложения.
# equivalent to 'from hello import app' $ gunicorn -w 4 'hello:app' # equivalent to 'from hello import create_app; create_app()' $ gunicorn -w 4 'hello:create_app()' Starting gunicorn 20.1.0 Listening at: http://127.0.0.1:8000 (x) Using worker: sync Booting worker with pid: x Booting worker with pid: x Booting worker with pid: x Booting worker with pid: x
Опция -w задаёт количество процессов для выполнения; начальное значение может быть CPU * 2. По умолчанию используется только 1 рабочий процесс, что, вероятно, не подходит для типа рабочего процесса по умолчанию.
Логи для каждого запроса по умолчанию не отображаются, отображается только информация о рабочих процессах и ошибки. Чтобы отобразить логи доступа на стандартном выводе, используйте опцию --access-logfile=-.
Внешнее связывание
Gunicorn не следует запускать от имени root, так как это приведет к запуску кода вашего приложения от имени root, что небезопасно. Однако это означает, что невозможно будет привязаться к порту 80 или 443. Вместо этого необходимо использовать обратный прокси, такой как nginx или Apache httpd перед Gunicorn.
Вы можете привязаться ко всем внешним IP-адресам на не привилегированном порту, используя опцию -b 0.0.0.0. Не делайте этого при использовании конфигурации обратного прокси, в противном случае будет возможность обойти прокси.
$ gunicorn -w 4 -b 0.0.0.0 'hello:create_app()' Listening at: http://0.0.0.0:8000 (x)
0.0.0.0 — это не допустимый адрес для перехода, вы будете использовать определённый IP-адрес в вашем браузере.
Асинхронный режим с использованием gevent или eventlet
Синхронный рабочий процесс по умолчанию подходит для многих случаев. Если вам нужна асинхронная поддержка, Gunicorn предоставляет рабочие процессы с использованием либо gevent, либо eventlet. Это не то же самое, что Python’s async/await, или спецификация ASGI-сервера. Вы должны фактически использовать gevent/eventlet в собственном коде, чтобы получить выгоду от использования этих рабочих процессов.
При использовании gevent или eventlet требуется greenlet>=1.0, в противном случае контекстные локальные переменные, такие как request, не будут работать должным образом. При использовании PyPy требуется PyPy>=7.3.7.
Для использования gevent:
$ gunicorn -k gevent 'hello:create_app()' Starting gunicorn 20.1.0 Listening at: http://127.0.0.1:8000 (x) Using worker: gevent Booting worker with pid: x
Для использования eventlet:
$ gunicorn -k eventlet 'hello:create_app()' Starting gunicorn 20.1.0 Listening at: http://127.0.0.1:8000 (x) Using worker: eventlet Booting worker with pid: x
© 2010 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/stable/deploying/gunicorn/