Spec-Zone.ru › Flask 2.3

uWSGI

uWSGI — это быстрое, компилируемое серверное решение с расширенными настройками и возможностями, выходящими за рамки базового сервера.

  • Благодаря компиляции программа может быть очень производительной.
  • Настройка, выходящая за рамки базового приложения, является сложной, а множество опций затрудняет понимание для начинающих.
  • Не поддерживает Windows (но работает в WSL).
  • В некоторых случаях требуется компилятор для установки.

Эта страница описывает основы запуска uWSGI. Обязательно ознакомьтесь с его документацией, чтобы понять доступные функции.

Установка

Существует несколько способов установить uWSGI. Самый простой способ — установить пакет pyuwsgi, который предоставляет предварительно скомпилированные исполняемые файлы для распространённых платформ. Однако он не поддерживает SSL, который можно обеспечить с помощью обратного прокси.

Создайте виртуальную среду, установите приложение, затем установите pyuwsgi.

$ cd hello-app
$ python -m venv .venv
$ . .venv/bin/activate
$ pip install .  # install your application
$ pip install pyuwsgi

Если у вас есть доступный компилятор, вы можете установить пакет uwsgi вместо этого. Или установите пакет pyuwsgi из sdist вместо wheel. Любой из этих методов включит поддержку SSL.

$ pip install uwsgi

# or
$ pip install --no-binary pyuwsgi pyuwsgi

Запуск

Самый простой способ запустить uWSGI — указать ему начать HTTP-сервер и импортировать ваше приложение.

$ uwsgi --http 127.0.0.1:8000 --master -p 4 -w hello:app

*** Starting uWSGI 2.0.20 (64bit) on [x] ***
*** Operational MODE: preforking ***
mounting hello:app on /
spawned uWSGI master process (pid: x)
spawned uWSGI worker 1 (pid: x, cores: 1)
spawned uWSGI worker 2 (pid: x, cores: 1)
spawned uWSGI worker 3 (pid: x, cores: 1)
spawned uWSGI worker 4 (pid: x, cores: 1)
spawned uWSGI http 1 (pid: x)

Если вы используете шаблон фабрики приложений, вам нужно создать небольшой Python-файл для создания приложения, а затем указать uWSGI на него.

wsgi.py
from hello import create_app

app = create_app()
$ uwsgi --http 127.0.0.1:8000 --master -p 4 -w wsgi:app

Опция --http запускает HTTP-сервер на 127.0.0.1 порту 8000. Опция --master указывает стандартный менеджер рабочих процессов. Опция -p запускает 4 рабочих процесса; начальное значение может быть CPU * 2. Опция -w указывает uWSGI, как импортировать ваше приложение.

Внешнее связывание

uWSGI не следует запускать от имени root с конфигурацией, показанной в этом документе, так как это заставит код вашего приложения работать от имени root, что небезопасно. Однако это означает, что будет невозможно связаться с портом 80 или 443. Вместо этого следует использовать обратный прокси, такой как nginx или Apache httpd, перед uWSGI. Безопасный запуск uWSGI от имени root возможен, но выходит за рамки этого документа.

uWSGI оптимизирован для интеграции с Nginx uWSGI и Apache mod_proxy_uwsgi, и, возможно, с другими серверами, вместо использования стандартного HTTP-прокси. Такая конфигурация выходит за рамки этого документа; см. ссылки для получения дополнительной информации.

Вы можете связаться со всеми внешними IP-адресами на порту без привилегий, используя опцию --http 0.0.0.0:8000. Не делайте этого при использовании конфигурации обратного прокси, в противном случае будет возможность обойти прокси.

$ uwsgi --http 0.0.0.0:8000 --master -p 4 -w wsgi:app

0.0.0.0 — это не допустимый адрес для перехода по нему; вы должны использовать определённый IP-адрес в вашем браузере.

Асинхронная работа с gevent

Стандартный синхронный рабочий процесс подходит для многих случаев использования. Если вам нужна асинхронная поддержка, uWSGI предоставляет рабочий процесс gevent. Это не то же самое, что Python’s async/await, или спецификация ASGI-сервера. Вы должны фактически использовать gevent в собственном коде, чтобы получить какие-либо преимущества от использования рабочего процесса.

При использовании gevent требуется greenlet>=1.0, в противном случае локальные переменные контекста, такие как request, не будут работать должным образом. При использовании PyPy требуется PyPy>=7.3.7.

$ uwsgi --http 127.0.0.1:8000 --master --gevent 100 -w wsgi:app

*** Starting uWSGI 2.0.20 (64bit) on [x] ***
*** Operational MODE: async ***
mounting hello:app on /
spawned uWSGI master process (pid: x)
spawned uWSGI worker 1 (pid: x, cores: 100)
spawned uWSGI http 1 (pid: x)
*** running gevent loop engine [addr:x] ***

© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/2.3.x/deploying/uwsgi/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API