Я пытаюсь найти оптимальный способ настроить свой сервер для использования 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