Перейти к содержимому
Главная страница » Запуск Telegram бота в Docker

Запуск Telegram бота в Docker

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

Прежде чем мы погрузимся в мир Docker, обратите внимание, что это руководство предполагает базовое знание следующего:

  • Командная строка Linux
  • Базовое понимание Python
  • Базовое понимание Docker

Обратите внимание, что это руководство можно обобщить и применить к другим программам на python, а не только к Telegram-ботам.

Выполняться проект будет на виртуальной машине с Linux, но все тоже самое, можно повторить на Windows.

Установка Docker

Если Docker уже установлен, то пропустите этот шаг.

Неудивительно, что первым шагом к настройке Telegram-бота является установка Docker. В зависимости от вашей операционной системы шаги по установке могут отличаться, в примере я буду использовать VPS на Linux, как установить Docker на VPS, указано в этом руководстве. Приведенные ниже шаги предназначены для Ubuntu но вам следует обратиться к руководству по установке Docker, если вы используете другую операционную систему:

1. Настройте репозиторий apt в Docker.

sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

2. Установите пакеты Docker.

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3. Убедитесь, что установка Docker Engine прошла успешно, запустив образ hello-world.

sudo docker run hello-world

Клонируйте проект

Как только мы настроим Docker, приступим к клонированию примера проекта Telegram-бота с помощью следующей команды:

git clone https://github.com/aleksandrvolk/my_first_bot

Если у вас не установлен Git, то проект можно просто скачать в браузере

После распаковать и загрузить в директорию на сервере.

Настройка проекта

Создание Telegram-бота включает в себя несколько ключевых этапов, которые описаны ниже:

  1. Установите Telegram и создайте учетную запись: Сначала убедитесь, что на вашем устройстве установлено приложение Telegram и вы создали учетную запись.
  2. Найдите BotFather: BotFather — официальный бот, который помогает создавать Telegram-ботов и управлять ими. Найдите “BotFather” в приложении Telegram и начните чат с ним.
  3. Создайте нового бота:
  • Отправьте команду “/newbot” BotFather.
  • BotFather попросит вас выбрать имя для вашего бота. Это отображаемое имя, которое будет отображаться в контактах и беседах. Введите имя и отправьте его.
  • Далее BotFather попросит вас выбрать имя пользователя для вашего бота. 
    Оно должно заканчиваться на “bot» (например, “super_bot» или “my_super_bot”). 
    Имя пользователя должно быть уникальным.

4. Получите токен бота:

  • Если имя пользователя доступно, BotFather подтвердит, что бот создан. В этом сообщении вы увидите абзац, начинающийся словами “Используйте этот токен для доступа к HTTP API”. Длинная строка букв и цифр в этом абзаце — это ваш TELEGRAM_BOT_TOKEN.
  • Аккуратно скопируйте этот токен. Он должен выглядеть примерно так:
123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ
  • Надежно храните этот токен. Любой, у кого есть этот токен, может управлять вашим ботом, поэтому не делитесь им публично.

Настройка бота

Наш телеграмм бот состоит всего из одного файла main.py

import telebot
# Создаем экземпляр бота
bot = telebot.TeleBot('Telegram TOKEN')
# Функция, обрабатывающая команду /start
@bot.message_handler(commands=["start"])
def start(m, res=False):
    bot.send_message(m.chat.id, 'Я на связи. Напиши мне что-нибудь )')
# Получение сообщений от юзера
@bot.message_handler(content_types=["text"])
def handle_text(message):
    bot.send_message(message.chat.id, 'Вы написали: ' + message.text)
# Запускаем бота
bot.polling(none_stop=True, interval=0)

Перейдем в каталог проекта, который мы клонировали c git

cd my_first_bot

И отредактируем файл заменив Telegram TOKEN, на полученный BotFather токен.

nano main.py

Теперь запустим нашего телеграмм бота:

python main.py

Попробуем написать сообщение в телеграмм бот, если программа запущена успешно, вы увидите ответ.

На данный момент мы получили ТОКЕН бота, развернули и проверили на работоспособность телеграмм бота локально на сервере, теперь наша задача упаковать его в Docker.

Создание Dockerfile

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

1. Создайте пустой Dockerfile:

В каталоге вашего проекта создайте пустой файл с именем Dockerfile. Этот файл будет содержать инструкции для Docker о том, как создать ваш контейнер.

2. Добавление базового изображения:

Первая строка в файле Dockerfile указывает базовый образ, который будет использоваться нашим контейнером. В данном случае мы используем Python версии 3.10.12 в качестве базового образа мы объявим это в верхней части файла:

FROM python:3.8

3. Настройка рабочего каталога:

Далее мы устанавливаем рабочий каталог внутри контейнера docker где будет находиться код нашего приложения:

WORKDIR /usr/src/app/

4. Копирование файлов в контейнер:

Далее нам нужно скопировать все файлы из нашего локального каталога проекта в контейнер. Каталог включает в себя наши скрипты на Python, файл требований и любые другие файлы проекта. В приведенной ниже команде COPY первая команда . представляет наш текущий каталог проекта а второй . представляет собой docker рабочий каталог контейнера (который мы только что установили с помощью предыдущей команды):

COPY . /usr/src/app/

5. Установка зависимостей:

После настройки файлов проекта мы теперь устанавливаем зависимости, требуемые нашим приложением на Python.

RUN pip install pytelegrambotapi

6. Указание команды для запуска приложения:

Наконец, мы указываем команду, которая должна выполняться при запуске контейнера. В данном случае мы запускаем наш скрипт на Python с именем weather_bot.py

CMD ["python", "main.py"]

Это было не просто. Но если вы зашли так далеко, то поздравляю! Вы успешно создали Dockerfile для вашего Telegram-бота. 

FROM python:3.8
# set work directory
WORKDIR /usr/src/app/
# copy project
COPY . /usr/src/app/
# install dependencies
RUN pip install pytelegrambotapi
# run app
CMD ["python", "main.py"]

Остался последний шаг — создать образ Docker на основе этого Dockerfile и запустить вашего бота внутри контейнера Docker!

Сборка и запуск

Давайте сначала создадим наш образ docker с помощью docker build. В каталоге вашего проекта выполните следующую команду:

docker build -t my_telegram_bot .

В первый раз этот процесс может занять некоторое время, поэтому подождите несколько минут. Приведенная выше команда, по сути, считывает инструкции из вашего Dockerfile и создает с его помощью образ Docker. Можете заменять my_telegram_bot на свое, назвав образ докер так, как вам удобно.

После создания образа Docker мы, сможем запустить контейнер Docker с docker run:

docker run my_telegram_bot

Если все сделано правильно, то вы увидите, что ваше приложение успешно запустилось! Проверим работу телеграмм бота в Docker:

Прежде чем уходить, прочтите несколько полезных базовых команд Docker , которые следует знать:

  • docker run -d <image_id_or_name> как запустить контейнер Docker в отключенном режиме
  • docker ps для составления списка всех запущенных контейнеров
  • docker stop <container_id_or_name> как остановить запущенный контейнер
  • docker rm <container_id_or_name> как удалить контейнер
  • docker images — чтобы перечислить все изображения
  • docker rmi <image_id_or_name> как удалить изображение
  • docker logs <container_id_or_name> для просмотра журналов контейнера

Это основные команды, которые вы можете найти полезными, но есть много других команд, которые вы сможете найти с Документации Docker.

Заключение

Таким образом, мы успешно настроили и запустили Telegram-бота внутри контейнера Docker. В этом руководстве мы пошагово описали процесс создания Dockerfileсоздания образа Docker из этого и, наконец, запуск контейнера Docker на основе этого образа. Кроме того, мы изучили некоторые полезные команды Docker для управления контейнерами и образами.

Продолжая знакомство с Docker, помните, что вам предстоит изучить множество других функций. Документация Docker — это отличное место для оформления заказа, если вы хотите узнать больше о передовых концепциях и передовых практиках Docker. Как всегда, если у вас есть идеи, предложения или отзывы, которыми можно поделиться, не стесняйтесь оставлять их в комментариях или связаться!

Приятного программирования, и если вы хотите автоматизировать процесс развертывания вместе со мной, то следите за обновлениями!

Обсудить мануал можно в нашем телеграм.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *