Linux web server python

Развертывание приложений Python с помощью Gunicorn

В этой статье мы покажем, как настроить сервер с Ubuntu 20.04, установить и настроить компоненты, необходимые для развертывания приложений Python . Настроим WSGI-сервер Gunicorn для взаимодействия с нашим приложением. Он предоставит нам интерфейс, обеспечивающий преобразование клиентских запросов по протоколу HTTP в вызовы Python, исполняемые приложением. Потом мы настроим Nginx как обратный прокси-сервер для Gunicorn, чтобы перенаправлять запросы на Gunicorn-сервер, а также при необходимости защитить HTTP-соединения с помощью SSL-сертификата или воспользоваться другими полезными функциями: балансировкой нагрузки, кэшированием и другими. Все эти тонкости могут оказаться полезными при настройке работы с облачными сервисами, которые предоставляет cloud.timeweb.com .

Обновление системы

Для начала необходимо обновить все пакеты. Когда вы создаете новый экземпляр виртуальной машины стоит обновить ОС и её пакеты до последней версии, чтобы защитить вашу виртуальную машину от эксплойтов, а также использовать самый новый функционал ОС.

Для обновления системы воспользуемся пакетным менеджером apt (advanced packaging tool) — утилитой для установки, обновления и удаления программных пакетов в операционных системах Linux.

Обновление происходит с помощью команды:

Установка Python и сопутствующих компонентов

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

Создание виртуальной среды Python

Настроим виртуальную среду. Это позволит нашему проекту иметь свои собственные зависимости, отдельные от тех, что есть у других проектов. Устанавливаем пакет virtualenv, который позволит создавать виртуальные среды:

sudo apt-get install python3-venv python3-dev

Создаём папку для нашего проекта и перейдем в нее:

Создаём виртуальную среду:

В папке нашего проекта должно быть два объекта — app и venv .

Проверить это можно с помощью стандартной для Linux систем команды для просмотра содержимого каталога:

Читайте также:  Linux detect file system

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

Установка и настройка Gunicorn

Gunicorn (Green Unicorn) — это HTTP-сервер Python WSGI для UNIX. Сервер Gunicorn легко совместим с различными веб-фреймворками, быстрый, прост в реализации, требует мало ресурсов сервера .

Установка Python Gunicorn :

WSGI Python

WSGI (Web Server Gateway Interface) — стандарт взаимодействия между Python -программой, выполняющейся на стороне сервера, и самим веб-сервером , например Nginx.

WSGI-сервер вызывается приложением, которое позволяет нам запускать программный код в рамках обработки запросов. Обычно программный код предоставляется как объект с именем application в модуле Python, доступном для сервера. Стандартно в файле wsgi.py содержится такое вызываемое приложение.

Для примера создадим такой файл с помощью текстового редактора nano:

И поместим в него простой пример кода:

from aiohttp import web
async def index(request):
return web.Response(text="Welcome home!")

app = web.Application()
app.router.add_get('/', index)

В коде выше импортируется aiohttp. Библиотека aiohttp предоставляет асинхронный HTTP-клиент, построенный поверх asyncio. HTTP-запросы — классический пример того, что хорошо подходит для асинхронности, поскольку они предполагают ожидание ответа от сервера, в течение которого было бы удобно и эффективно выполнять другой код. Данная библиотека предоставляет возможность отправлять запросы последовательно, но не дожидаясь первого ответа, прежде чем отправлять новый. Удобно запускать серверы aiohttp за Nginx .

Запустить сервер можно с помощью команды построенной по шаблону:

gunicorn [OPTIONS] [WSGI_APP]

Где [WSGI_APP] состоит из $(MODULE_NAME):$(VARIABLE_NAME) , a [OPTIONS] — набор параметров для настройки Gunicorn .

Простейшая команда будет выглядеть так:

Если потребуется перезапустить Gunicorn можно использовать команду restart gunicorn :

sudo systemctl restart gunicorn

Systemd

Systemd — менеджер системных служб, который позволяет строго управлять процессами, ресурсами и разрешениями. Создадим сокет, который systemd будет прослушивать и автоматически запускать Gunicorn в ответ на трафик.

Добавим конфигурации для службы и сокета соответственно:

sudo nano /etc/systemd/system/gunicorn.service

В этот файл с помощью текстового редактора добавим следующее:

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
Type=notify
User=someuser
Group=someuser
RuntimeDirectory=gunicorn
WorkingDirectory=/home/someuser/myapp
ExecStart=/путь/до/исполняемого/файла/gunicorn wsgi:app
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target

В строке ExecStart необходимо указать путь до исполняемого файла gunicorn в виртуальном окружении. Вероятно, он будет выглядеть примерно так: / home/someuser/myapp/venv/bin/gunicorn .

Читайте также:  Узнать ip адрес linux терминал

А в /etc/systemd/system/gunicorn.socket добавим :

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock
SocketUser=www-data

[Install]
WantedBy=sockets.target

Включаем и запускаем сокет:

systemctl enable --now gunicorn.socket

Настройка Gunicorn

Рассмотрим полезные параметры Gunicorn в Python 3 . Все возможные параметры можно посмотреть в официальной документации .

Сокеты

-b BIND , —bind=BIND — указание серверного сокета. Можно указать в форматах: $(HOST), $(HOST):$(PORT) .

gunicorn --bind=127.0.0.1:8080 wsgi:app

Эта команда запустит наше приложение локально на порту 8080.

Рабочие процессы

-w WORKERS , —workers=WORKERS — количество рабочих процессов. Обычно это число должно составлять от 2 до 4 на ядро сервера.

gunicorn --workers=2 wsgi:app

Тип процесса

-k WORKERCLASS , —worker-class=WORKERCLASS — тип рабочего процесса для запуска.

sync — тип процесса по умолчанию. Это самый простой тип — синхронный рабочий процесс, который обрабатывает один запрос за раз. Другие типы может потребоваться устанавливать как зависимости.

Доступные асинхронные рабочие процессы основаны на Greenlets (через Eventlet и Gevent). Greenlets — это реализация совместной многопоточности для Python. Соответствующие параметры — eventlet и gevent .

Мы будем использовать асинхронный тип процесса, совместимый с aiohttp:

gunicorn wsgi:app --bind localhost:8080 --worker-class aiohttp.GunicornWebWorker

Журнал доступа

Также возможно использовать фла г —access-logfile , чтобы разрешить заполнение журнала доступа.

gunicorn wsgi:app --access-logfile access.log

Журнал ошибок

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

gunicorn wsgi:app --error-logfile error.log

Степень детализации выходных данных журнала ошибок можно установить с помощью флага —log-level.

При работе с log в Gunicorn доступны следующие уровни:

По умолчанию установлен уровень ‘info’ , отрезающий информацию, относящуюся к ‘ debug’ .

Установка и настройка Nginx

Запустим команду для установки Nginx:

Давайте проверим сможет ли демон Nginx подключиться к созданному ранее сокету:

sudo -u www-data curl --unix-socket /run/gunicorn.sock http

Таким образом служба Gunicorn будет автоматически запущена, и мы увидим HTML-код от сервера в терминале.

Настройка Nginx

Настройка Nginx происходит путем добавления конфигурационных файлов для виртуальных хостов.

Читайте также:  Terminal in mac and linux

Стоит хранить конфигурацию каждого прокси в директории /etc/nginx/sites-available .

Запуск каждого из прокси серверов осуществляется через создание ссылки на него в директорию /etc/nginx/sites-enabled . При запуске Nginx автоматически пробегается по этой директории и включает нужные прокси сервера.

Таким образом, создадим конфигурационный файл:

sudo nano /etc/nginx/sites-available/myconfig.conf

Далее создадим ссылку через команду:

sudo ln -s /etc/nginx/sites-available/myconfig.conf /etc/nginx/sites-enabled

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

Сначала проверим корректность синтаксиса в файле:

Надеемся, наш гайд по развертыванию приложений в Python оказался полезным для вас. Если остались какие-то вопросы, пишите в комментарии! Больше о Python читайте в нашем блоге.

Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.

Источник

Запуск веб-сервера Apache в связке с Python 3 и СУБД на Debian 11 и Ubuntu Server 21.10

Краткое руководство по быстрому запуску веб-сервера Apache HTTP Server с Python 3 и системами управления базами данных MariaDB (MySQL) и PostgreSQL на ОС Debian GNU/Linux и Ubuntu Server 21.10.

Для начала необходимо установить СУБД MariaDB и/или PostgreSQL. Инструкции по установкам находятся по следующим ссылкам:

  • СУБД MariaDB на Debian GNU/Linux и Ubuntu Server — https://dondub.com/2021/05/zapusk-subd-mariadb-na-debian-10-9-i-ubuntu-server-21-04/
  • СУБД PostgreSQL на Debian GNU/Linux — https://dondub.com/2021/05/zapusk-subd-postgresql-v-debian-10-9/
  • СУБД PostgreSQL на Ubuntu Server — https://dondub.com/2021/05/zapusk-subd-postgresql-na-ubuntu-server-21-04/

Затем устанавливаем Apache и Python 3, а также PIP

# apt install python3 python3-pip apache2

После этого устанавливаем коннекторы к СУБД.

# apt install python3-psycopg2

для MariaDB (MySQL) — с помощью PIP

# pip install mysql-connector-python

и перезапускаем службу apache2

# systemctl restart apache2

Каталог для хранения Python-скриптов: /usr/lib/cgi-bin/

Создадим в нём файл welcome.py, зададим ему необходимые права

# touch /usr/lib/cgi-bin/welcome.py # chmod 755 /usr/lib/cgi-bin/welcome.py
# nano /usr/lib/cgi-bin/welcome.py
#!/usr/bin/python3 print('Content-Type: text/html; charset=utf-8') print('') print('

Добро пожаловать на страницу Python

')

После этого на другой машине в сети в адресной строке вводим: http://IP_илиимяхоста/cgi-bin/welcome.py

Должна появиться страница с текстом приветствия «Добро пожаловать на страницу Python»

Похожие посты:

Источник

Оцените статью
Adblock
detector