Запуск ботов на хостинге

Запуск python ботов на хостинге

С появлением на нашем хостинге возможности запуска Фоновых процессов, процесс запуска различных ботов, таких как ботов для Telegram, Discord, FB и т.п значительно упростился.

Что такое Фоновые процессы и чем они помогают в запуске бота?

Как правило бот - это отдельный от сайта процесс, который должен работать 24/7, но у которого нет веб-интерфейса и который не должен быть доступен по http(s) снаружи по доменному имени. Но с другой стороны, бот, как и любое программное обеспечение, может содержать ошибки и при возникновении ошибок падать, поэтому очень важно в этом случае его автоматически перезапустить. Кроме того, бот пишет свои логи и к ним необходим прямой доступ, чтобы иметь возможность отслеживать его состояние. Ну и конечно, в случае если сервер хостинга будет перезагружен, либо контейнер для ваших сайтов на хостинге по какой-то причине остановлен, а затем запущен вновь, бот должен незамедлительно стартовать. Все эти вещи обеспечиваются Фоновыми процессами.

Создаем сайт

Фоновые процессы привязаны к сайтам, а сайты располагаются внутри контейнеров. Если нам требуется бот на python, первым делом необходимо создать сайт, который будет работать на python. Ознакомиться с процессом создания сайта на python (django) можно в этой статье.

Далее мы будем считать, что сайт создан и нужная версия python установлена и настроена, вы зашли на сервер по ssh и установили все необходимые базовые пакеты через pip install.

Создаем минимального Discord бота

В этой статье рассматривается создание и запуск бота для Discord, но общий подход для запуска других ботов, например бота для Telegram, ничем не отличается. Для Discord бота нам потребуется установить пакет discord, что мы и сделаем, перейдя в каталог приложения нашего сайта:

cd site.ru/app
pip install "discord>=2"

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

import discord

intents = discord.Intents.default()
intents.message_content = True

client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print(f'We have logged in as {client.user}')

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

client.run('your token here')

Этот бот не делает ничего, кроме того, что если вы напишите сообщение в дискорд сервер, к которому подключен ваш бот, которое начинается с фразы “$hello”, бот ответит вам сообщением “Hello!”. В последней строке кода вместо 'your token here' вам необходимо прописать ваш токен для API Discord. Если в итоге файл создан и назван my_bot.py, то запустить его очень просто:

python my_bot.py

Начало положено. Но теперь, если мы закроем ssh-консоль, процесс бота будет завершен и бот перестанет работать. Давайте сделаем так, чтобы бот работал постоянно.

Создаем фоновый процесс для запуска бота

Для этого переходим в раздел Хостинг, далее выбираем контейнер в котором был создан сайт, а в контейнере в списке сайтов выбираем тот сайт, в рамках которого будет запущен процесс бота. И переходим во вкладку “Фоновые процессы”:

Screenshot 2023-03-02 at 17.45.10.png

Теперь нажимаем на кнопку “Добавить процесс” и перед нами окрывается окно настроек:

Screenshot 2023-03-02 at 17.48.49.png

Всё что нам осталось сделать для запуска бота, это написать команду, которая будет его запускать. Команда будет выглядеть следующим образом:

cd ~/site.ru/app && python my_bot.py

Если в коде бота не было ошибок и все остальное вы сделали по инструкции, после нажатия на кнопку “Добавить и запустить”, процесс бота будет запущен.

Доступ к логам бота

В окне, где мы подключены к серверу по ssh, мы запускаем следующую команду:

ls -l ~/site.ru/log

Нам будет показан список папок с логами. Для фоновых процессов название папок имеет вид service-ID-runlog, где ID - уникальный идентификатор процесса, который для каждого процесса отображается в списке процессов в Личном кабинете. Теперь запустим команду:

tail -f ~/site.ru/log/service-ID-runlog/current

И на экране будет отображаться лог бота, обновляемый в реальном времени.

Перезапуск бота

Когда вы вносите изменения в код бота, по умолчанию процесс бота в памяти о них ничего знать не будет. Чтобы бот подхватил изменения, нужно его перезапустить. Для этого есть несколько способов:

  1. В личном кабинете в разделе фоновых процессов у нужного процесса нажмите на пункт меню “перезапустить”.
  2. В ssh консоли сервера запустите команду touch ~/site.ru/reload. Эта команда перезапустит ваш сайт и все фоновые процессы, привязанные к этому сайту.
Хостинг
Хостинг
Хостинг
Создавайте неограниченное количество сайтов в изолированных контейнерах
С 2003 года
Надежность.
Нам доверяют десятки тысяч компаний и разработчиков
20 лет
Предоставляем услуги профессионального хостинга
35 000
Клиентов доверяют нам размещение своих сайтов
99.99%
Подтвержденный uptime
наших серверов хостинга
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
ВК49865