• en
  • Language: ru
  • Documentation version: 1.1.x

uWSGI

uWSGI является вариантом развертывания на таких серверах, как nginx, lighttpd и cherokee; другие варианты см. в FastCGI и Автономные контейнеры WSGI. Для использования вашего приложения WSGI с протоколом uWSGI вам сначала понадобится сервер uWSGI. uWSGI - это и протокол, и сервер приложений; сервер приложений может обслуживать протоколы uWSGI, FastCGI и HTTP.

Наиболее популярным сервером uWSGI является uwsgi, который мы будем использовать в этом руководстве. Убедитесь, что он установлен, чтобы следовать дальше.

Осторожно

Пожалуйста, убедитесь заранее, что все вызовы app.run(), которые могут быть в вашем файле приложения, находятся внутри блока if __name__ == '__main__': или перенесены в отдельный файл. Просто убедитесь, что это не вызывается, потому что это всегда будет запускать локальный сервер WSGI, что нам не нужно, если мы развернем это приложение на uWSGI.

Запуск приложения с помощью uwsgi

uwsgi предназначен для работы с вызываемыми модулями WSGI, находящимися в модулях python.

Получив приложение flask в файле myapp.py, выполните следующую команду:

$ uwsgi -s /tmp/yourapplication.sock --manage-script-name --mount /yourapplication=myapp:app

Директива --manage-script-name переложит обработку запросов SCRIPT_NAME на uwsgi, поскольку он более умен в этом отношении. Она используется вместе с директивой --mount, которая заставит запросы к /yourapplication быть направленными к myapp:app. Если ваше приложение доступно на уровне root, вы можете использовать одну / вместо /yourapplication. myapp означает имя файла вашего flask-приложения (без расширения) или модуля, который предоставляет app. app - это вызываемый модуль внутри вашего приложения (обычно строка выглядит так app = Flask(__name__).

Если вы хотите развернуть ваше приложение flask внутри виртуальной среды, вам также необходимо добавить --virtualenv /path/to/virtual/environment. Вам также может понадобиться добавить --plugin python или --plugin python3 в зависимости от того, какую версию python вы используете для своего проекта.

Настройка nginx

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

location = /yourapplication { rewrite ^ /yourapplication/; }
location /yourapplication { try_files $uri @yourapplication; }
location @yourapplication {
  include uwsgi_params;
  uwsgi_pass unix:/tmp/yourapplication.sock;
}

Эта конфигурация привязывает приложение к /yourapplication. Если вы хотите иметь его в корне URL, это немного проще:

location / { try_files $uri @yourapplication; }
location @yourapplication {
    include uwsgi_params;
    uwsgi_pass unix:/tmp/yourapplication.sock;
}