Spec-Zone.ru › Flask

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. Это не то же самое, что 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] ***

© 2010 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/stable/deploying/uwsgi/

Spec-Zone.ru

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