Запускаем свой телеграм-бот с ChatGPT на виртуальном сервере
Мы будем использовать вот этот движок телеграм-бота https://github.com/nalgeon/pokitoki .
Наша задача создать или обновить бота типа https://t.me/polyakov_gpt_bot
В статье я не буду касаться логики регистрации бота и получения ключа open.ai. Это легко гуглится и останавливаться на этом нет никакого смысла. Бота можно не гуглить, а сразу пойти сюда https://t.me/BotFather , токен open.ai получается интуитивно https://platform.openai.com
В материале есть упоминания об ssh ключах. Чтобы создать ssh ключ надо почитать вот эту инструкцию.
Подготовим файлы для работы если ранее у нас не было инстансов
- Идём в гитхаб https://github.com/nalgeon/pokitoki, там Code >> Download zip
- Распаковываем архив. Заполняем файл config.example.yml и сохраняем его себе как config.yml
Подготовим файлы для работы если ранее был настроен инстанс и мы хотим переехать на другой
Нам надо сохранить файл настроек, который используется сейчас на виртуальной машине к себе на диск.
Это делается так:
- Подключимся к нашему удаленному серверу и скопируем файл настроек к себе на диск:
MacOS:
scp -i YOUR_PRIVATE_SSH_KEY USERNAME@xxx.xxx.xx.xxx:pokitoki/config.yml /Users/username/Downloads/config.yml
Windows:
scp -i C:\path\to\your\private\key USERNAME@xxx.xxx.xx.xxx:/path/to/remote/config.yml C:\Users\username\Downloads\config.yml
команда в одну строку
YOUR_PRIVATE_SSH_KEY — путь к приватному ключу SSH из текущей директории
USERNAME — ваш логин в виртуальной машине
USERNAME — ваш логин в виртуальной машине
xxx.xxx.xx.xxx — IP-адрес виртуальной машины
xxx.xxx.xx.xxx — IP-адрес виртуальной машины
/Users/username/Downloads/config.yml — путь в папку для сохранения настроек (в примере это загрузки)
Обновляем версию бота, если хотим остаться на том же сервере
Если мы хотим остаться на том же сервере, просто обновить версию pokitoki:
- Остановим докер
Авторизуемся на сервере через ssh.
Переходим в директорию проекта
cd pokitoki/
- Останавливаем текущий докер инстанс
sudo docker compose stop
- Скачиваем обновление с гитхаб
git pull
- Запускаем докер
sudo docker compose up --build --detach
Подготовим инстанс в Яндекс.Облаке
Теоретически для данной задачи можно использовать любой другой VDS сервис, например https://vdsina.ru.
Я использую Яндекс.Облако, потому что оно не является ощутимо более дорогим, имеет предсказуемую поддержку и уже оплачивается по договору. Но данная инструкция подойдёт для любого другого сервиса за исключением процесса конфигурации виртуальной машины — этот процесс у всех будет свой.
Если у вас уже был инстанс, и вы просто обновляете — всё равно создаем новый инстанс (в конце мы просто отключаем старый, и запускаем новый)
- Идём в консоль Яндекс облака https://console.cloud.yandex.ru/
- Выбираем Compute Cloud >> Виртуальные машины
- Нажимаем на кнопку Создать ВМ вверху страницы справа
- Настраиваем ВМ на Ubuntu:
- Intel Cascade Lake
- Доля vCPU 5%
- RAM 1Gb
- Размер SSD/HDD 8 GB
- обязательно надо создать статический IP-адрес, без него не получится подключить удаленно.
- Внизу указываем имя пользвателя и публичный ssh-ключ, который будем использовать для подключения.
Для самопроверки — стоимость должна быть в пределах 800 руб.
Устанавливаем на удаленную машину телеграм-бота
- Авторизуемся на виртуальной машине
MacOS:
ssh -i path/to/private/key -l USERNAME xxx.xxx.xx.xxx
или
ssh -i path/to/private/key USERNAME@xxx.xxx.xx.xxx
WIndows:
ssh -i C:\path\to\private\key USERNAME@xxx.xxx.xx.xxx
Со всем соглашаемся и вводим пароль
- Клонируем файлы телеграм бота в директорию удалённого сервера
git clone https://github.com/nalgeon/pokitoki.git
- Переносим файл с настройкам, который мы делали в начале
MacOS:
scp -i path/to/private/key /path/to/file/config.yml USERNAME@xxx.xxx.xx.xxx:pokitoki/config.yml
WIndows:
scp -i C:\path\to\private\key C:\Users\YOUR_USERNAME\PathToConfig\config.yml USERNAME@xxx.xxx.xx.xxx:pokitoki/config.yml
Устанавливаем на удаленную машину Docker
Инструкция тут https://docs.docker.com/engine/install/ubuntu/
- Сносим старый инстанс (для безопасности)
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
- Обновляем apt
sudo apt-get update
- Сертификаты
sudo apt-get install ca-certificates curl gnupg
- Остальные ключи (3 команды)
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
- Что-то на программистском
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] 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
Запуск бота
sudo docker compose up --build --detach
Если понадобится проверить свободное место
df -h