Nginx+python: Difference between revisions
Created page with "Ilia B" |
No edit summary |
||
| (27 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
__TOC__ |
|||
Ilia B |
|||
=Что такое Nginx= |
|||
[[File:Logonginxil.png|250px|right| Nginx logo]] |
|||
Nginx - эффективный инструмент по развертыванию веб-сервера. Если посмотреть точное определение, то nginx - это веб-сервер, обратный прокси-сервер и почтовый прокси-сервер с открытым исходным кодом и асинхронной архитектурой. |
|||
В отличие от обычного веб-сервера, Nginx не создает отдельный поток для каждого запроса, а разделяет его на более мелкие отдельные структуры типа, называемые рабочими соединениями. Каждое из этих соединений обрабатывается отдельным рабочим процессом, и после выполнения они объединяются в один блок, который возвращает результат основному процессу данных. Один рабочий может одновременно обрабатывать до 1024 запросов одного типа. |
|||
<br /> |
|||
<br /> |
|||
<br /> |
|||
<br /> |
|||
<br /> |
|||
<br /> |
|||
<br /> |
|||
=Инструкция по развертыванию Python приложений на Nginx в Ubuntu= |
|||
В этой инструкции я буду развертывать Python приложение на Nginx. |
|||
<br />Инструкция подойдет для абсолютно любого веб-приложения, написанного на языке Python, например Django или Flask. |
|||
==Необходимые технологии== |
|||
Для реализации нам потребуются следующие технологии: |
|||
* '''Nginx''' |
|||
* '''Python''' |
|||
* '''uWSGI''' - это одна из реализаций интерфейса WSGI для взаимодействия приложений на языке Python и самого веб-сервера. |
|||
<br /> Стек наших компонентов будет выглядеть следующим образом: |
|||
<br />[[File:Nginx2stk.png|800px| Cтек]] |
|||
==Устанавливаем Python == |
|||
Для начала работы нам нужен сам язык python и пакеты для работы с ним. |
|||
<pre>sudo apt-get update</pre> |
|||
<pre>sudo apt-get install python3 python3-pip python3-dev</pre> |
|||
*'''python3-pip'''- установщик пакетов python |
|||
*'''python3-dev''' - стандартный набор библиотек для разработчика |
|||
Так же нам потребуется установить Python библиотеку для создания виртуального окружения: |
|||
<pre>sudo pip3 install virtualenv</pre> |
|||
==Настраиваем виртуальное окружение== |
|||
Создаем виртуальное окружение для uWSGI: |
|||
<pre>virtualenv uwsgi-test</pre> |
|||
Переходим в директорию |
|||
<pre>cd uwsgi-test/</pre> |
|||
Активируем окружение: |
|||
<pre>source ./bin/activate</pre> |
|||
<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 - эффективный инструмент по развертыванию веб-сервера. Если посмотреть точное определение, то nginx - это веб-сервер, обратный прокси-сервер и почтовый прокси-сервер с открытым исходным кодом и асинхронной архитектурой.
В отличие от обычного веб-сервера, Nginx не создает отдельный поток для каждого запроса, а разделяет его на более мелкие отдельные структуры типа, называемые рабочими соединениями. Каждое из этих соединений обрабатывается отдельным рабочим процессом, и после выполнения они объединяются в один блок, который возвращает результат основному процессу данных. Один рабочий может одновременно обрабатывать до 1024 запросов одного типа.
Инструкция по развертыванию Python приложений на Nginx в Ubuntu
В этой инструкции я буду развертывать Python приложение на Nginx.
Инструкция подойдет для абсолютно любого веб-приложения, написанного на языке Python, например Django или Flask.
Необходимые технологии
Для реализации нам потребуются следующие технологии:
- Nginx
- Python
- uWSGI - это одна из реализаций интерфейса WSGI для взаимодействия приложений на языке Python и самого веб-сервера.
Стек наших компонентов будет выглядеть следующим образом:
Устанавливаем 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
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 и убедиться, что все работает
На этом этапе мы реализовали такую связь компонентов:
В этом случае пользователь напрямую обращается к 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.
