Деплой Python приложения на сервер и управление Supervisor

Mikhail Aleksseev
4 min readNov 14, 2021

--

После того, как приложение на Python написано, хочется, чтобы оно было всегда доступно, а не только в то время запуска на своем компьютере. Для этого необходимо развернуть его на сервере. В этой статье рассмотрим деплой на сервер на примере простого telegram бота, отображающего форму для введения даты.

Перед началом необходимо загрузить ваше приложение на github или bitbucket.

В сети можно найти информацию о том, что существует множество ресурсов, позволяющих бесплатно арендовать выделенный сервер и задеплоить приложение. Одни из самых популярных это PythonAnyWhere и Heroku. На практике, оба провайдера работают нестабильно и предоставляют сильно урезанный функционал.

Потратив значительное количество времени, но так и не добившись стабильной работы, я пришел к выводу, что удобнее арендовать свой выделенный сервер.

Около трех лет назад, когда я занимался веб-разработкой, арендовал хостинг у SprintHost. У них была адекватная техническая поддержка и хорошие тарифы, поэтому сейчас остановил свой выбор на SprintBox.

После регистрации в личном кабинете на почту приходит письмо с данными для подключения к серверу по ssh. Для windows необходимо скачать Putty, на маке можно подключаться к серверу через терминал.

Подключиться к серверу можно используя команду ниже, где вместо x — адрес сервера
# ssh root@xxx.xxx.xx.xx
После подключения будет предложено ввести пароль, при вводе пароля в терминале ничего не отобразится, это нормально, нужно набрать пароль и нажать Enter.

Если нет опыта работы с терминалом Linux, вот команды, которые будут нужны сразу
Перемещение в терминале осуществляется командой cd имя_папки
Перейти назад cd ..
Посмотреть список файлов в текущей папке ls
Выйти из текстового редактора/консоли можно нажав ctrl+z или ctrl+x

Перед началом работы необходимо обновить пакетный менеджер
# sudo apt update
Для того, чтобы затянуть проект на сервер из github, нужно установить git
# apt install git
Создадим нового пользователя
# adduser tgbot
Перейдем в папку пользователя
# cd home/tgbot
Загрузим проект с github, если репозиторий приватный, то нужно будет ввести имя пользователя и пароль
# git clone https://github.com/mihailaleksseev/tg_date_picker_bot.git

После скачивания проекта на сервер нужно поставить необходимые зависимости с помощью пакетного менеджера pip, выполнив команды
# pip install имя_зависимости
Для того, чтобы узнать какие зависимости необходимо поставить, необходимо на компьютере разработчика выполнить команду
# pip list

Наконец запустим проект
Для этого нужно перейти в его корень
# cd tg_date_picker_bot
И запустить файл Python
# python3 main.py

Однако, при выходе из консоли, приложение прекратит работу. Для запуска приложения в фоне можно использовать Supervisor. Данный инструмент можно использовать также для проектов на других языках, не только Python.

Установим Supervisor
# apt install supervisor
После установки необходимо в конфигурации указать настройки для нашего приложения.
Перейдем в папку с конфигурациями
# cd /etc/supervisor
Откроем конфигурацию с помощью текстового редактора nano, он несколько проще, чем vim
nano /etc/supervisor/supervisord.conf
Из последней строчки можно заметить, что в основную конфигурацию подключаются все файлы конфигураций, расположенные в папке conf.d

Добавим нашу конфигурацию туда
Перейдем в папку conf.d и создадим там новый конфигурационный файл
# cd conf.d
# touch tgBot.cond

Теперь пропишем в нем конфигурацию бота

command — команда, отвечающая за запуск
directory–адрес папки, в которой находится приложение
autostart–запуск приложения после включения сервера
autorestart–перезапуск приложения, после того, как его работа завершилась с ошибкой

Для сохранения файла нужно нажать ctrl+o и ctrl+x для выхода

Теперь, чтобы supervisor считал обновленные настройки, выполним команду
# supervisorctl reread
И для запуска всех сконфигурированных процессов команду
# supervisorctl update

Можно зайти в инструменты командной строки супервизора командой
# supervisorctl
И посмотреть статус приложения
# status tgbot
Перезапустить приложение можно командой
# restart tgbot

Для выхода из командной строки нужно нажать ctrl+z

Логи приложений можно найти в директории /var/log/supervisor
Супервизор хранит файл с ошибками и логами приложения
Удобнее их смотреть командой tail. С параметрами, приведенными ниже, она выводит в режиме реального времени 30 строк файла с логами в консоль, по мере их поступления
# tail -f -n 30 tgbot-stderr — -supervisor-kq121.log

P.S. Данная статья описывает наиболее простую конфигурацию и рассчитана на начинающих. Не стоит считать ее полноценной инструкцией для настройки продового окружения.

--

--