Run python program on server

Развертывание приложений 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

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

Читайте также:  TAG index

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

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

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

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

Установка и настройка 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 .

А в /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 происходит путем добавления конфигурационных файлов для виртуальных хостов.

Стоит хранить конфигурацию каждого прокси в директории /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-тренды, делятся полезными инструкциями и даже приглашают к себе работать.

Источник

How to Run a Python Script on a Server

In this article, we show how to run a Python script on a server.

So we’re going to run this Python script on a server hosted by godaddy.

Many web hosting companies install a Python interpreter on the server. This way, your website that you host from this company can run Python scripts.

In order to run a Python script, you just need to do a few tweaks in a few places.

So let’s create a Python file. Let’s call it test.py.

In the following code below, we show the contents of this test.py file.

So the first thing we do is specify the location of the Python interpreter on the web server.

Usually the Python interpreter is located in the bin directory.

The bin directory is the directory in linux that contains the ready-to-run programs (also known as the executables). It is here that most likely will contain the Python interpreter for a web server. This directory also contains most of the basic Unix commands such as ls and cop. Most of the programs in the /bin directory are in binary formta, having been created by a C compiler.

So this is a very important line of code. We must specify where the Python interpreter on the server is located, or else the Python code will not work.

After this, we just have to specify that the file is an HTML file.

This allows HTML tags to be executed, since the file is an HTML file. Without this, none of the HTML commands will be executed.

Next we simply print out the statement in h1 tags, This is the home page

Since we want to show that the website can actually run Python code, we run a for loop that iterates 5 times through the loop.

From this for loop, we print out each number of the line. We then print out anything.

Again, this is just to show that Python code can be run on a server.

One last thing, most web hosting companies, including godaddy, do not yet have support for Python 3 (I don’t know why). So you have to use Python 2 syntax in order to run Python code. You can see that above we have Python 2 syntax in regard to the print statement. To print in Python 2, we don’t use parentheses. But in Python 3, we do. So in the above code, we leave out the parentheses and simply put the quotation marks.

So after you have this Python file (.py file), then you can upload it to any directory on your website.

Once the file is uploaded to the website, then you need to give this file certain permissions.

This is not just a regular static file. Since this file is a Python file and contains Python code, we need to have execute permissions on this file. Remember this is not just a static HTML file. With a scripting language such as Python, it’s dynamic. It needs to execute Python code.

So I used the filezilla FTP software in order to upload this Python file to the website.

Once it is uploaded, right click the file and click ‘File Permissions. ‘

This will open up a new window. In this new window, change the Numeric value to 755.

The numeric value of 755 gives execute permissions to the file, so that Python can execute on it.

Once you have done this, you go go to the web browser and type in the path to the file.

You should now see the Python code which we wrote executed.

This is shown in the output below.

Python script running on a web server

And this is how to run Python code on a web server.

Источник

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