Назад | Перейти на главную страницу

UWSGI и NGINX для приложений Python в Ubuntu 11.10

Я пытаюсь найти оптимальный способ настроить свой сервер для использования NGINX и UWSGI для обслуживания приложений Python. До сих пор работало следующее:

Начальная настройка:

sudo apt-get install nginx uwsgi uwsgi-plugin-http uwsgi-plugin-python python-setuptools

easy_install pip

pip install web.py

/ etc / nginx / sites-available / default:

server {
    listen 80;
    server_name localhost;
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:9090;
    }
}

И затем у меня есть базовый myapp.py (местоположение не имеет значения для текущей настройки):

import web

urls = (
    '/', 'index'
)

app = web.application(urls, globals())

class index:
    def GET(self):
        return "Hello from Web.py!"

application = app.wsgifunc()

Затем я могу выполнить следующие команды, и все работает:

sudo service nginx restart

uwsgi --plugins http,python -s 127.0.0.1:9090 myapp

Так работает, но не очень красиво. Я заметил, что когда я установил UWSGI с apt-get что были созданы два каталога: /etc/uwsgi/apps-available и /etc/uqsgi/apps-enabled. Это соответствует соглашению для серверов Debian с NGINX или Apache только с apps вместо того sites.

Вот что было бы замечательно: я хотел бы иметь возможность добавлять конфигурации приложений в apps-available (создание символических ссылок в apps-enabled по мере необходимости) и попросите службу UWSGI забрать их. Но я не совсем знаю, с чего начать. Какие файлы конфигурации я вставляю apps-available? И как выглядит конфигурация NGINX для передачи в службу uwsgi вместо передачи в сокет, созданный командой, которую я ввел ранее?

У меня все заработало! Вот что я сделал:

Создано /etc/uwsgi/apps-available/myapp.xml:

<uwsgi>
    <socket>/tmp/uwsgi-myapp.sock</socket>
    <plugins>http, python</plugins>
    <chdir>/path/to/directory/containing/python/app</chdir>
    <module>myapp</module><!-- myapp.py from before -->
</uwsgi>

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

ln -s /etc/uwsgi/apps-available/myapp.xml /etc/uwsgi/apps-enabled/myapp.xml
sudo service uwsgi restart

Обновлен / etc / nginx / sites-available / default:

server {
    listen 80;
    server_name localhost;
    location / {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/uwsgi-myapp.sock;
    }
}

Перезапустил NGINX:

sudo service nginx restart

И все золотое! Очевидно, что приведенная выше конфигурация очень проста, и перед запуском в производство необходимо просмотреть доступные параметры UWSGI и NGINX.

Что также работало, так это в конфигурации UWSGI, имеющей <socket>127.0.0.1:9090</socket> и оставив конфигурацию NGINX без изменений.

В заключение: UWSGI поддерживает несколько форматов конфигурации: (INI, XML и YAML). Первоначально я пробовал YAML, но сервер не запускался, поэтому я попробовал XML, и все работало нормально.

РЕДАКТИРОВАТЬ:

Я просто попробовал конфигурацию INI, и она тоже сработала. Эквивалентный файл INI, как и XML-файл выше, выглядит следующим образом:

[uwsgi]
socket = /tmp/uwsgi-myapp.sock
plugins = http, pythong
chdir = /path/to/directory/containing/python/app
module = myapp