Блог экспериментатора инженера-разработчика: Infanty.
Я пишу how-to статьи на редкие темы или статьи обзоры - для себя и тех кто со мной работает.
Блог существует при поддержке: "Оккупационных сил Марса".

Для того, что бы обращаться к скриптам Python в Ubuntu 14.04 используя веб-интерфейс, установим связку: Nginx -> uWSGI -> Virtualenv -> Python 3.3. Где Nginx - веб сервер, uWSGI - сервер приложений который позволяет наиболее простым способом взаимодействовать веб-серверу и Python, Virtualenv - создаёт виртуальное окружение для запуска Python скрипта с использованием определённых версий библиотек нужных именно запускаемому скрипту.

В статье "Установка Python 2.7 / Python 3.3 в Ubuntu для работы с NLTK и кириллицей (русские буквы)" был показан пример установки Python 3.3 (он должен быть уже установлен у Вас).

Для установки Nginx наберём в консоли:

sudo apt-get update
sudo apt-get install nginx 

Установим Virtualenv, набрав в консоли:

sudo pip3 install virtualenv 

Создадим папку для приложения, перейдём в неё и создадим в ней виртуальную окружение с именем environment. Для этого наберём в консоли:

mkdir /home/example.com
cd /home/example.com
virtualenv -p python3.3 environment 

Виртуальная среда активируется с помощью команды консоли (находясь в папке приложения):

. environment/bin/activate 

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

. environment/bin/deactivate 

Активируем виртуальную среду, установим uWSGI и проверим его версию, для этого наберём в консоли:

. environment/bin/activate
pip3 install uwsgi
uwsgi --version

Для создания WSGI приложения, создадим файл скрита - wsgi.py (в папке приложения) следующего содержания:

 def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    # Python3, в python2: return ["Hello World"].
    return [b"Hello World"] 

Запустим uWSGI, с помощью команды консоли (находясь в папке приложения):

uwsgi --http :9090 --wsgi-file wsgi.py  --uid www-data 

После чего можно проверить работу скрипта открыв в браузере URL: "http://example.com:9090/".

Для того, что бы каждый раз при необходимости не запускать uWSGI из консоли, настроим его автозапуск. Для этого создадим файл "uwsgiapp.ini" в папке приложения следующего содержания:

[uwsgi]
# Указывает uWSGI о необходимости взаимодействия 
# с Python приложением используя WSGI стандарт.
module = wsgi:application

# Указывает uWSGI о работе в режиме мастер-процесса.
master = true
# Максимальное количество процессов.
processes = 5

# Полный путь к файлу сокета.
socket = /tmp/uwsgiapp.sock
# Права доступа к файлу сокета.
chmod-socket = 664
# Указывает uWSGI о необходимости очистки окружения
# от служебных файлов uwsgi по завершению.
vacuum = true

# Указывает uWSGI о возможности обращения
# к скриптам по заданному имени
# перезаписывая SCRIPT_NAME и PATH_INFO.
mount = /testuwsgiapp=wsgi.py
manage-script-name = true

# Позволяет Upstart выключать uWSGI.
die-on-term = true

# Путь к файлу для логирования.
logto = /home/example.com/log/%n.log 

Описание: назначаем uWSGI главным процессом и порождаем 5 процессов от него, с Nginx будем взаимодействовать через сокеты используя разрешение 664 и удаляем сокет при завершении работы с ним, а так же запретим WSGI процессу перезапускаться так как этим будет управлять стартовый скрипт.

Создадим стартовый скрипт uwsgiapp.conf в директории: /etc/init/ следующего содержания:

description "uWSGI instance to serve uwsgiapp"

start on runlevel [2345]
stop on runlevel [!2345]

setuid www-data
setgid www-data

script
    cd /home/example.com
    . environment/bin/activate
    uwsgi --ini uwsgiapp.ini
end script 

Описание: задаём уровень разрешения запуска и остановки приложения, пользователя и группу от которого оно будет выполняться, а так же запускаем Virtualenv и uWSGI.

Запустим uWSGI через Upstart, с помощью команды консоли:

sudo start uwsgiapp 

Проверим работу запущенного uWSGI через Upstart, с помощью команды консоли:

ps aux | grep uwsgiapp 

Остановить запущенный uWSGI через Upstart, можно с помощью команды консоли:

sudo stop uwsgiapp 

Настроим виртуальный домен для Nginx. Для этого создадим файл "example.com" в директории: "/etc/nginx/sites-available/" следующего содержания:

 server {
  listen ip_вашего_сервера:80;
  server_name example.com;
 
  charset utf-8;
  client_max_body_size 32M;
 
  location / {
    include uwsgi_params;
    uwsgi_pass unix:/tmp/uwsgiapp.sock;
    uwsgi_read_timeout 300;
  }
} 

Содержимое файла "uwsgi_params" в директории "/etc/nginx/":

uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_ADDR $server_addr;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name; 

Создадим символическую ссылку, для того что бы Nginx увидел настройки виртуального домена, проверим его конфигурацию и перезагрузим Nginx, с помощью команд консоли:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled
sudo service nginx configtest
sudo service nginx restart 

После чего можно проверить работу приложения открыв в браузере URL: "http://example.com/testuwsgiapp".