Spec-Zone.ru › Werkzeug 2.3

uWSGI

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

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

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

Установка

uWSGI имеет несколько способов установки. Самый простой — установить пакет pyuwsgi, который предоставляет предварительно скомпилированные wheel-пакеты для распространённых платформ. Однако он не поддерживает 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. Это не то же самое, что async/await Python или спецификация 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 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/latest/deployment/uwsgi/

Spec-Zone.ru

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