NGINX: uWSGI для запуска Python на CentOS

Автор: | 10/11/2014

nginx_logoДля “связки” NGINX и Python-скриптов будем использовать протокол WSGI, котором хорошо написано тут>>>.

Передачей данных в данном случае будет заниматься сервер uWSGI, домашняя страница проекта тут>>>.

Т.е., в нашей схеме на “входе” будет принимать соединения NGINX, передавать их uWSGI, который в свою очередь будет вызывать Python-скрипты.

Установка выполняется на:

# cat /etc/redhat-release
CentOS release 6.5 (Final)

Устанавливаем необходимые для сборки пакеты:

# yum -y install python python-pip python-devel libxml2 libxml2-devel python-setuptools zlib-devel wget openssl-devel pcre pcre-devel gcc make autoconf automake

Устанавливаем сам uWSGI:

# pip install uwsgi
...
    *** uWSGI is ready, launch it with /usr/bin/uwsgi ***
Successfully installed uwsgi
Cleaning up...

Проверяем:

# uwsgi --version
2.0.8

Отключаем фаервол на время настройки:

# service iptables stop

Создаём тестовый файл hello.py с таким содержимым:

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

Запускаем uWSGI:

# uwsgi --http :9090 --wsgi-file hello.py
*** Starting uWSGI 2.0.8 (32bit) on [Sat Nov  8 18:59:03 2014] ***
compiled with version: 4.4.7 20120313 (Red Hat 4.4.7-11) on 08 November 2014 18:51:18
os: Linux-2.6.32-504.el6.i686 #1 SMP Wed Oct 15 03:02:07 UTC 2014
nodename: centos_1
machine: i686
clock source: unix
pcre jit disabled
detected number of CPU cores: 1
current working directory: /home/setevoy/python_application
*** running under screen session 1353.pts-0.centos_1 ***
detected binary path: /usr/bin/uwsgi
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
...

Открываем в браузере:

$ curl http://localhost:9090
Hello World

uWSGI работает. Переходим к NGINX.

Устанавливаем:

# yum -y install nginx

Под обычным пользователем создаём директорию хоста:

# su -l setevoy
$ mkdir python_application
$  cd python_application/

Создаём такой же файл, как и раньше:

$ vim hello.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return ["Hello World"]

Создаём файл настроек хоста:

# cd /etc/nginx/conf.d
# mv default.conf default.conf.bkp
# vim newhost.conf
server {
    listen        80 default_server;
    server_name   newhost.com  www.inewhost.com;
    access_log    /var/log/nginx_access.log;
    error_log     /var/log/nginx_error.log;
    root          /home/setevoy/python_application;

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

Проверяем и запускаем:

 # nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# service nginx start
Starting nginx:                                            [  OK  ]

Так как это тестовая установка – в файл /etc/hosts добавляем строку 127.0.0.1 newhost.com:

# cat /etc/hosts
127.0.0.1   localhost
127.0.0.1 newhost.com

Проверяем.

От пользователя запускаем uWSGI:

$ uwsgi --socket 127.0.0.1:9090 --wsgi-file hello.py --master --processes 1 --threads 2

Открываем браузер:

$ curl http://newhost.com:80
Hello World

Что бы упростить запуск uWSGI – создадим ini-файл:

$ cat hello.ini
[uwsgi]
socket = 127.0.0.1:9090
chdir = /home/setevoy/python_application
wsgi-file = hello.py
processes = 1
threads = 2

Теперь, для запуска, достаточно выполнить:

$ uwsgi hello.ini

Ссылки по теме

http://monicalent.com

http://uwsgi-docs.readthedocs.org

https://www.digitalocean.com

http://uwsgi-docs.readthedocs.org

http://spouk.ru

http://www.nginxtips.com