Часть 2: Установка окружения Python на хостинге Beget
Часть 3: Запуск, запуск в фоновом режиме, запуск по расписанию, отключение
На этом этапе у нас имеется:
1. Написанный и размещенный на хостинге код чат-бота.
2. Установленное окружение Python 3.12.
3. Специальное программное обеспечение PuTTy для доступа по SSH.
🚩 ПРОСТОЙ ЗАПУСК ЧАТ-БОТА
Чтобы запустить чат-бота, нам необходимо подключиться к серверу по SSH и зайти в Docker, в котором у нас установлено окружение Python 3.12. Всё это мы делали в Части 2. Поэтому просто напомню порядок команд, а подробности можно посмотреть в Части 2.
1. Запускаем Putty. Вводим логин и пароль для доступа.
2. Запускаем Docker командой:
ssh localhost -p222
и ещё раз вводим пароль для входа.
3. Запускаем чат-бот командой:
python3.12 ~/RDbot/RDbot.py
~/RDbot/RDbot.py - это путь до чат-бота от домашней директории, у ваc он будет свой.
Чат-бот должен запуститься и заработать.
Но! Как только вы закроете терминал - чат-бот работать перестанет. Потому что он запущен внутри терминальной сессии.
🚩 ЗАПУСК ЧАТ-БОТА В ФОНОВОМ РЕЖИМЕ
Чтобы каждый раз не запускать чат-бота и не держать терминал открытым (что не отличается по сути от того, чтобы держать чат-бота на своем компьютере), его надо запускать в фоновом режиме. Терминал закрыли, чат-бот продолжает работать. Для этого к команде запуска просто надо дописать слово nohup в начале и поставить знак & в конце:
nohup python3.12 ~/RDbot/RDbot.py &
После этого можно закрыть терминал, чат-бот продолжит работать.
❗❗❗ ВАЖНОЕ ОТСТУПЛЕНИЕ ❗❗❗
Чат-бот теперь стал фоновым процессом на вашем хостинге Beget. Но нужно понимать, что любой фоновый процесс на хостинге не длится по правилам хостера более 10 часов. И в какой-то момент он будет отключен. Предугадать время отключения не получится. Это регламентные процедуры и когда проводит их хостер, знает только он. В 100% случаях чат-бот не переживет ночь. Но если вы его запустите утром, не факт, что он проработает ровно 10 часов. Может отключиться раньше, а может не отключиться и за 12 часов и прожить до следующей ночи.
Ссылка на Правила пользования услугами хостинга
И конкретно выписка из пункта 6.
6. На ресурсах Исполнителя запрещается:
размещение приложений, работающих в фоновом режиме (демонов) на тарифах виртуального и VIP хостинга без предварительного согласования с ООО «Бегет»;
Поэтому, если у вас уже оттестированный и с высоким спросом от пользователей чат-бот, есть смысл рассмотреть его размещение на выделенном сервере, то есть по технологии VPS. За отдельную плату, естественно.
Но мы чат-бот продолжаем тестировать, нагрузка от него практически незаметная. Поэтому встает вопрос - как запускать чат-бот, когда он "умирает", чтобы каждый раз не подключаться к серверу по SSH через PuTTy.
❗❗❗ КОНЕЦ ВАЖНОГО ОТСТУПЛЕНИЯ ❗❗❗
🚩 ЗАПУСК ЧАТ-БОТА В ФОНОВОМ РЕЖИМЕ ПО РАСПИСАНИЮ
Итак, нам "надоело" каждый раз заходить на сервер через PuTTY, вводить логин, дважды вводить пароль, выполнять команды, когда чат-бот отключается (хостер "убивает" фоновые процессы на хостинге).
Поэтому мы настроим планировщик заданий CronTab. Он тоже находится в главной панели хостинга.
Мы разместим в нем нашу команду запуска чат-бота в фоновом режиме из Docker (не делайте это прямо сейчас, прочитайте текст ниже).
ssh localhost -p222 nohup ~/.local/bin/python3.12 ~/RDbot/RDbot.py &
Но!!! Эта команда сразу не заработает. Дело в том, что когда мы подключаемся по SSH, мы вводим логин и пароль, и когда запускаем Docker тоже вводим пароль. Поэтому нам надо обеспечить "прямой путь" до Docker, чтобы этот пароль не вводить.
Для этого есть способ, описанный самим хостером (правда не в документации, а в ВК). Даю ссылку на полный текст. В этом тексте есть отдельный пункт по запуску скриптов на Python в CronTab.
Скрипты на Рython на виртуальном хостинге возможно запустить только из виртуального окружения Docker, но так как для входа в docker требуется ввод пароля, нужно сначала пробросить в него ключ.
Следуем инструкции. Снова заходим в PuTTy, подключаемся к серверу по SSH.
И выполняем следующие команды:
ssh-keygen -t rsa
Нажимаем enter, пока ключ не будет сгенерирован. Пробрасываем его в докер командой:
ssh-copy-id '-p222 -i ~/.ssh/id_rsa.pub localhost'
Теперь вводим свой пароль. Если все сделано верно, то вход в Docker по команде:
ssh localhost -p222
будет происходить без запроса пароля.
Теперь полную команду запуска скрипта можно разместить в CronTab. Вы можете запустить ее в подменю "Запустить скрипт" - Произвольная команда.
Или можете настроить расписание через "Мастер заданий" или "Составить задание вручную" - результат в этом случае будет один.
Моя задача выглядит так, что чат-бот запускается с понедельника по воскресенье в 4:01 утра. Можно было указать просто, что каждый день, но в этом случае почему-то он запускался не каждый день (это просто заметка из опыта тестирования). С днями недели запускался стабильнее.
Из CronTab скрипт можно запустить сразу принудительно, независимо от расписания, достаточно нажать на кнопочку "Запустить" (зеленая стрелка вправо в зеленом круге).
🚩 ОТКЛЮЧЕНИЕ ЧАТ-БОТА
Иногда чат-бот надо также принудительно отключить. Или можно попробовать настроить расписание, чтобы чат-бот сначала отключался, а потом сразу запускался. Например, дважды в сутки.
Если чат-бот уже работает, второй раз он запуститься не должен. Но чтобы точно процессы не задвоились, не затроились и т.д. - лишние лучше все-таки отключать.
Пример команды по принудительному отключению всех скриптов работающих в данных момент на Python3.12.
ssh localhost -p222 killall python3.12
На этом тема по запуску чат-бота, разработанного на Python 3.12, на хостинге Beget окончена.
Спасибо всем за проявленный интерес и прочтение!