Установка и настройка 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Другие расширения