Установка и настройка Python uWSGI

В этой статье в основном рассказывается, как развернуть простые WSGI-приложения и распространенные веб-фреймворки.

На примере Ubuntu/Debian сначала установите пакеты зависимостей:

apt-get install build-essential python-dev

Установка uWSGI с Python

1. С помощью команды pip:

pip install uwsgi

2. Скачайте скрипт установки:

curl http://uwsgi.it/install | bash -s default /tmp/uwsgi

Установите бинарный файл uWSGI в /tmp/uwsgi, вы можете изменить его.

3. Установка из исходного кода:

wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz
cd uwsgi-latest
make

После завершения установки вы получите бинарный файл uwsgi в текущем каталоге.


Первое WSGI-приложение

Давайте начнем с простого "Hello World", создав файл foobar.py со следующим кодом:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

Функция по умолчанию, которую будет искать загрузчик Python в uWSGIapplication 。

Затем мы запускаем uWSGI для работы HTTP-сервера, развертывая программу на HTTP-порту 9090:

uwsgi --http :9090 --wsgi-file foobar.py

Добавление параллелизма и мониторинга

По умолчанию uWSGI запускает один процесс и один поток.

Вы можете использовать опцию--processes, чтобы добавить больше процессов, или использовать опцию--threads, чтобы добавить больше потоков, или и то, и другое одновременно.

uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2

Приведённая выше команда создаст 4 процесса, каждый с 2 потоками.

Если вам нужно выполнять задачи мониторинга, вы можете использовать подсистему stats. Формат данных мониторинга — JSON:

uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

Мы можем установить uwsgitop (аналогично команде top в Linux), чтобы просматривать данные мониторинга:

pip install uwsgitop

Использование с веб-серверами

Мы можем использовать uWSGI вместе с веб-сервером Nginx для достижения более высокой производительности при конкурентной работе.

Типичная конфигурация nginx выглядит следующим образом:

location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:3031;
}

Приведённый выше код показывает, что веб-запросы, полученные nginx, передаются службе uWSGI на порт 3031 для обработки.

Теперь мы можем настроить uWSGI на использование протокола uwsgi локально:

uwsgi --socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

Если ваш веб-сервер использует HTTP, вы должны указать uWSGI использовать протокол http локально (это отличается от --http, который создаёт собственный прокси):

uwsgi --http-socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

Развёртывание Django

Django — наиболее часто используемый веб-фреймворк для Python. Предположим, проект Django находится в /home/foobar/myproject:

uwsgi --socket 127.0.0.1:3031 --chdir /home/foobar/myproject/ --wsgi-file myproject/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

--chdirИспользуется для указания пути к проекту.

Мы можем поместить приведённую выше команду в файл конфигурации yourfile.ini:

[uwsgi]
socket = 127.0.0.1:3031
chdir = /home/foobar/myproject/
wsgi-file = myproject/wsgi.py
processes = 4
threads = 2
stats = 127.0.0.1:9191

Далее вам нужно всего лишь выполнить следующую команду:

uwsgi yourfile.ini

Развёртывание Flask

Flask — популярный веб-фреймворк для Python.

Создайте файл myflaskapp.py со следующим кодом:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "<span style='color:red'>I am app 1</span>"

Выполните следующую команду:

uwsgi --socket 127.0.0.1:3031 --wsgi-file myflaskapp.py --callable app --processes 4 --threads 2 --stats 127.0.0.1:9191
Другие расширения