Так как в данном мануале, основная задача упаковать и докеризировать телеграмм бота, то для примера возьмем готового бота, решающего всего одну простейшую задачу, он будет повторять, то, что мы ему написали. Подробнее о данном проекте можно прочитать на GitHub.
Прежде чем мы погрузимся в мир Docker, обратите внимание, что это руководство предполагает базовое знание следующего:
- Командная строка Linux
- Базовое понимание Python
- Базовое понимание Docker
Обратите внимание, что это руководство можно обобщить и применить к другим программам на python, а не только к Telegram-ботам.
Установка 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
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-бота включает в себя несколько ключевых этапов, которые описаны ниже:
- Установите Telegram и создайте учетную запись: Сначала убедитесь, что на вашем устройстве установлено приложение Telegram и вы создали учетную запись.
- Найдите BotFather: BotFather — официальный бот, который помогает создавать Telegram-ботов и управлять ими. Найдите “BotFather” в приложении Telegram и начните чат с ним.
- Создайте нового бота:
- Отправьте команду “/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/
После настройки файлов проекта мы теперь устанавливаем зависимости, требуемые нашим приложением на 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. Как всегда, если у вас есть идеи, предложения или отзывы, которыми можно поделиться, не стесняйтесь оставлять их в комментариях или связаться!
Приятного программирования, и если вы хотите автоматизировать процесс развертывания вместе со мной, то следите за обновлениями!
Обсудить мануал можно в нашем телеграм.