Nginx+python: Difference between revisions

From TÜ Narva Kolledži Wiki
Jump to navigation Jump to search
Content deleted Content added
Ilia (talk | contribs)
No edit summary
Ilia (talk | contribs)
No edit summary
 
(19 intermediate revisions by the same user not shown)
Line 4: Line 4:
Nginx - эффективный инструмент по развертыванию веб-сервера. Если посмотреть точное определение, то nginx - это веб-сервер, обратный прокси-сервер и почтовый прокси-сервер с открытым исходным кодом и асинхронной архитектурой.
Nginx - эффективный инструмент по развертыванию веб-сервера. Если посмотреть точное определение, то nginx - это веб-сервер, обратный прокси-сервер и почтовый прокси-сервер с открытым исходным кодом и асинхронной архитектурой.
В отличие от обычного веб-сервера, Nginx не создает отдельный поток для каждого запроса, а разделяет его на более мелкие отдельные структуры типа, называемые рабочими соединениями. Каждое из этих соединений обрабатывается отдельным рабочим процессом, и после выполнения они объединяются в один блок, который возвращает результат основному процессу данных. Один рабочий может одновременно обрабатывать до 1024 запросов одного типа.
В отличие от обычного веб-сервера, Nginx не создает отдельный поток для каждого запроса, а разделяет его на более мелкие отдельные структуры типа, называемые рабочими соединениями. Каждое из этих соединений обрабатывается отдельным рабочим процессом, и после выполнения они объединяются в один блок, который возвращает результат основному процессу данных. Один рабочий может одновременно обрабатывать до 1024 запросов одного типа.
<br />

<br />
<br />
<br />
<br />
<br />
<br />
=Инструкция по развертыванию Python приложений на Nginx в Ubuntu=
=Инструкция по развертыванию Python приложений на Nginx в Ubuntu=
В этой инструкции я буду развертывать Django приложение на Nginx.
В этой инструкции я буду развертывать Python приложение на Nginx.
<br />Инструкция так же подойдет для абсолютно любого веб-приложения, написанного на языке Python.
<br />Инструкция подойдет для абсолютно любого веб-приложения, написанного на языке Python, например Django или Flask.
==Необходимые технологии==
==Необходимые технологии==
Для реализации нам потребуются следующие технологии:
Для реализации нам потребуются следующие технологии:
Line 13: Line 19:
* '''Python'''
* '''Python'''
* '''uWSGI''' - это одна из реализаций интерфейса WSGI для взаимодействия приложений на языке Python и самого веб-сервера.
* '''uWSGI''' - это одна из реализаций интерфейса WSGI для взаимодействия приложений на языке Python и самого веб-сервера.

* '''Django'''
<br /> Стек наших компонентов будет выглядеть следующим образом:
<br /> Стек наших компонентов будет выглядеть следующим образом:
<br />[[File:NginxStk.png|800px| Cтек]]
<br />[[File:Nginx2stk.png|800px| Cтек]]
==Устанавливаем Python ==
==Устанавливаем Python ==
Для начала работы нам нужен сам язык python и пакеты для работы с ним.
Для начала работы нам нужен сам язык python и пакеты для работы с ним.
Line 32: Line 38:
Активируем окружение:
Активируем окружение:
<pre>source ./bin/activate</pre>
<pre>source ./bin/activate</pre>
<br />[[File:scrnshotvirtualenv.png|800px| Cтек]]
<br />[[File:scrnshotvirtualenv.png|800px| venv]]

==uWSGI==
В окружение устанавливаем uwsgi:
<pre>sudo pip3 install uwsgi</pre>
Теперь нам нужно проверить, работает ли uWSGI. Для этого создадим наше тестовое приложение в одном файле testapp.py
<pre>sudo touch testapp.py
sudo nano testapp.py</pre>
<pre>
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"uWSGI works"]
</pre>
Теперь запускаем uWSGI на порт 8000
<pre>uwsgi --http :8000 --wsgi-file testapp.py</pre>
После этого можно перейти в браузер и перейти по адресу <ip-address>:8000 и убедиться, что все работает
<br />[[File:Srnshot2ilia.png|800px| Ccr]]
<br />На этом этапе мы реализовали такую связь компонентов:
<br />[[File:Nginx2tb.png|800px| Ccr]]
<br />В этом случае пользователь напрямую обращается к uWSGI. Теперь можно деактивировать виртуальную среду.
<pre> deactivate </pre>

Теперь настроим uWSGI так, чтобы не запускать каждое приложение в ручную:
<pre> sudo apt-get install uwsgi uwsgi-plugin-python3
sudo nano /etc/uwsgi/apps-enabled/python_app.ini </pre>

<pre>
sudo apt-get install uwsgi uwsgi-plugin-python3
sudo nano /var/testweb/wsgi-test/testapp.ini
</pre>

<pre>
[uwsgi]
module = wsgi:application
chdir = /var/testweb/wsgi-test
plugins = python3
max-requests = 5000

socket = testapp.sock
chmod-socket = 664
vacuum = true

die-on-term = true
</pre>

Теперь нам нужно создать свою программу uwsgislave со следующим скриптом:

<pre>
description "uWSGI serving testapp"

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

setuid user
setgid www-data

script
cd /home/testweb/wsgi-test
. myappenv/bin/activate
uwsgi --ini testapp.ini
end script
</pre>

и запустим его
<pre>
sudo start uwsgislave
</pre>

==Hастройка nginx+uwsgi==
После установки nginx создадим файл для работы c нашим приложением
<pre>sudo nano /etc/nginx/sites-available/testapp</pre>

<pre>
server {
listen 80;
server_name <ip-address>;

location / {
include uwsgi_params;
uwsgi_pass unix:/home/testweb/wsgi-test/testapp.sock;
}
}
</pre>


Чтобы разрешить конфигурации мы должны сделать ссылку на разрешенные сайты:
<pre> sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled </pre>


Перезапускаем наш сервер
<pre>sudo service nginx restart </pre>

И убеждаемся, что все работает. Теперь подсоединение происходит не через порт, nginx перенаправляет через сокет на сервер uWSGI.

<br />[[File:finresultnginx.png|800px| Ccr]]

Latest revision as of 11:26, 8 December 2022

Что такое Nginx

Nginx logo
Nginx logo

Nginx - эффективный инструмент по развертыванию веб-сервера. Если посмотреть точное определение, то nginx - это веб-сервер, обратный прокси-сервер и почтовый прокси-сервер с открытым исходным кодом и асинхронной архитектурой. В отличие от обычного веб-сервера, Nginx не создает отдельный поток для каждого запроса, а разделяет его на более мелкие отдельные структуры типа, называемые рабочими соединениями. Каждое из этих соединений обрабатывается отдельным рабочим процессом, и после выполнения они объединяются в один блок, который возвращает результат основному процессу данных. Один рабочий может одновременно обрабатывать до 1024 запросов одного типа.






Инструкция по развертыванию Python приложений на Nginx в Ubuntu

В этой инструкции я буду развертывать Python приложение на Nginx.
Инструкция подойдет для абсолютно любого веб-приложения, написанного на языке Python, например Django или Flask.

Необходимые технологии

Для реализации нам потребуются следующие технологии:

  • Nginx
  • Python
  • uWSGI - это одна из реализаций интерфейса WSGI для взаимодействия приложений на языке Python и самого веб-сервера.


Стек наших компонентов будет выглядеть следующим образом:
Cтек

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

Для начала работы нам нужен сам язык python и пакеты для работы с ним.

sudo apt-get update
sudo apt-get install python3  python3-pip python3-dev
  • python3-pip- установщик пакетов python
  • python3-dev - стандартный набор библиотек для разработчика

Так же нам потребуется установить Python библиотеку для создания виртуального окружения:

sudo pip3 install virtualenv

Настраиваем виртуальное окружение

Создаем виртуальное окружение для uWSGI:

virtualenv uwsgi-test

Переходим в директорию

cd uwsgi-test/

Активируем окружение:

source ./bin/activate


venv

uWSGI

В окружение устанавливаем uwsgi:

sudo pip3 install uwsgi

Теперь нам нужно проверить, работает ли uWSGI. Для этого создадим наше тестовое приложение в одном файле testapp.py

sudo touch testapp.py
sudo nano testapp.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"uWSGI works"]

Теперь запускаем uWSGI на порт 8000

uwsgi --http :8000 --wsgi-file testapp.py

После этого можно перейти в браузер и перейти по адресу <ip-address>:8000 и убедиться, что все работает
Ccr
На этом этапе мы реализовали такую связь компонентов:
Ccr
В этом случае пользователь напрямую обращается к uWSGI. Теперь можно деактивировать виртуальную среду.

 deactivate 

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

 sudo apt-get install uwsgi uwsgi-plugin-python3
sudo nano /etc/uwsgi/apps-enabled/python_app.ini 
 
sudo apt-get install uwsgi uwsgi-plugin-python3
sudo nano /var/testweb/wsgi-test/testapp.ini
[uwsgi]
module = wsgi:application
chdir = /var/testweb/wsgi-test
plugins = python3
max-requests = 5000

socket = testapp.sock
chmod-socket = 664
vacuum = true

die-on-term = true

Теперь нам нужно создать свою программу uwsgislave со следующим скриптом:

description "uWSGI serving testapp"

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

setuid user
setgid www-data

script
    cd /home/testweb/wsgi-test
    . myappenv/bin/activate
    uwsgi --ini testapp.ini
end script

и запустим его

sudo start uwsgislave 

Hастройка nginx+uwsgi

После установки nginx создадим файл для работы c нашим приложением

sudo nano /etc/nginx/sites-available/testapp
server {
    listen 80;
    server_name <ip-address>;

    location / {
        include         uwsgi_params;
        uwsgi_pass      unix:/home/testweb/wsgi-test/testapp.sock;
    }
}


Чтобы разрешить конфигурации мы должны сделать ссылку на разрешенные сайты:

 sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled 


Перезапускаем наш сервер

sudo service nginx restart 

И убеждаемся, что все работает. Теперь подсоединение происходит не через порт, nginx перенаправляет через сокет на сервер uWSGI.


Ccr