В предыдущей статье мы рассказали, как создать простого бота на Node.js, однако он работал только на локальном компьютере. Эта статья о том, как загрузить бота на сервер, запустить его и проверить, что всё работает.
Шаг 1. Выбрать хостинг
Как правило, на shared-хостинге отсутствует поддержка Node.js, поэтому нам понадобится как минимум виртуальный сервер. Существуют сервисы, предлагающие VPS бесплатно, но с заметными ограничениями: например на количество трафика или нагрузку на сервер. Можно выделить несколько известных зарубежных провайдеров (но стоит отметить, что для новичков они могут оказаться сложными):
- Google Cloud
- Oracle Cloud
- Amazon Web Services
Преимущество платных VPS в более высоких лимитах или их отсутствии, а также в гарантии стабильной работы сервера. Вместе с этим вы получаете активную поддержку и всегда можете рассчитывать на помощь хостинг-провайдера, если возникнут проблемы.
Для примера мы закажем облачный VPS в REG.RU, вы можете воспользоваться любым VPS-хостингом. Он удобен для тестового проекта тем, что оплата почасовая. При выборе тарифа мы рекомендуем ориентироваться на несколько параметров:
Программируем телеграм бота и деплоим на Heroku!
- Прогнозируемая нагрузка — зависит от сложности вашего бота и количества запросов к нему.
- Количество оперативной памяти — это зависит от многих факторов, как, например, уровень оптимизации кода и общий масштаб вашего проекта.
Так как наш бот использует только одну основную библиотеку и состоит из нескольких строк кода, мы выбираем самый младший тариф — Cloud-0. В будущем, если возникнет необходимость, можно перейти на более дорогой тариф.
Шаг 2. Заказать хостинг
Переходим по ссылке: https://www.reg.ru/vps/cloud/, выбираем тариф, операционную систему и шаблон «Чистая ОС». Если у вас нет особых предпочтений, рекомендуем выбрать Ubuntu 18.04. Хотя у REG.RU есть шаблон c Node.js, для чистоты эксперимента всё необходимое ПО мы установим сами. Нажимаем кнопку «Заказать»:
После заказа и оплаты дождёмся настройки сервера:
В течение минуты статус сервера сменится с «В процессе» на «Активен». После этого отобразятся реквизиты доступа к серверу, они также будут отправлены на почту:
Шаг 3. Загрузить бота
Приступим к загрузке бота на сервер. Это можно сделать разными способами — с помощью FTP, SFTP, панели управления или, к примеру, rsync. Мы выберем самый быстрый вариант — SFTP, так как для него нужна только возможность подключения к серверу по SSH, которая обычно присутствует на всех VPS сразу после заказа.
Мы подключимся к серверу с помощью FileZilla. Укажем IP-адрес сервера, а также логин root и пароль в настройках клиента:
Создаем TELEGRAM бота на PYTHON и заливаем на БЕСПЛАТНЫЙ ХОСТИНГ за 5 МИНУТ
При первом подключении появится окно с предупреждением:
Ставим галочку «Всегда доверять этому хосту» и нажимаем «Ок».
Переходим на директорию выше ( . ), затем в каталог /opt и создаём папку с произвольным названием (мы выбрали keksbot ):
Переходим в созданную папку и загружаем файлы index.js и package.json :
Шаг 4. Зайти на сервер по SSH
Теперь нужно подключиться к серверу по SSH, чтобы установить Node.js и запустить бота. Для этого необходим SSH-клиент, например Putty, XShell, Bitvise SSH или любой другой. Функциональность программ может немного отличаться, но большой разницы в использовании между ними нет. Мы выбрали PuTTY как самый популярный и бесплатный SSH-клиент для Windows.
Открываем PuTTY, указываем IP-адрес сервера, порт 22 уже указан по умолчанию:
Нажимаем «Соединиться». Откроется окно с запросом логина:
Вводим root , после чего появится запрос пароля, при вводе которого символы не отображаются. Не стоит переживать, это особенность работы Linux — пароль нужно вводить вслепую. Чтобы не делать этого вручную, можно скопировать пароль и нажать правой кнопкой мыши в окне PuTTY. Убедитесь, что вы скопировали пароль без пробелов!
Шаг 5. Установить Node.js
Теперь займёмся установкой. Обратите внимание, что команды для установки Node.js отличаются в зависимости от операционной системы. В наших примерах указаны команды для Ubuntu, Debian и CentOS — мы будем вводить их в консоли SSH-клиента.
Если вы не знаете, какая ОС установлена на сервере, можете проверить это командой:
cat /etc/os-release
Вывод будет примерно таким:
NAME=»Ubuntu» VERSION=»16.04.6 LTS (Xenial Xerus)» ID=ubuntu ID_LIKE=debian PRETTY_NAME=»Ubuntu 16.04.6 LTS» VERSION_ID=»16.04″ HOME_URL=»http://www.ubuntu.com/» SUPPORT_URL=»http://help.ubuntu.com/» BUG_REPORT_URL=»http://bugs.launchpad.net/ubuntu/» VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial
Нас интересует поле NAME , в котором указано название дистрибутива.
Помимо Node.js нам понадобится утилита Screen, чтобы бот продолжал работать, когда мы отключимся от сервера. Также нужен менеджер пакетов npm для установки зависимостей.
apt -y install nodejs npm screen
yum -y install nodejs npm screen
Подождём завершения установки и проверим, что Node.js работает:
nodejs -v
Если в ответе отобразилась версия установленного пакета, то всё прошло успешно.
Теперь перейдём в папку с файлом бота и установим зависимости:
cd /opt/keksbot npm install
Возможные ошибки при установке, и как их решить
При установке могут появиться ошибки вида:
Existing lock /var/run/yum.pid: another copy is running as pid 9571. Another app is currently holding the yum lock; waiting for it to exit.
E: Could not get lock /var/lib/dpkg/lock – open (11: Resource temporarily unavailable) E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
Обычно это связано с тем, что у пользователя недостаточно прав для установки пакетов на сервере, либо предыдущий процесс установки завершён некорректно.
В первом случае необходимо убедиться, что вы подключились к серверу под именем суперпользователя root — при необходимости зайдите на сервер заново.
Во втором случае для решения проблемы нужно завершить процесс менеджера пакетов и удалить lock -файлы. Чтобы это сделать, запустите команды:
ps aux | grep ‘apt|apt-get’ | awk ‘’ | xargs kill -9 rm -f /var/cache/apt/archives/lock rm -f /var/lib/dpkg/lock rm -rf /var/lib/dpkg/lock-frontend
ps aux | grep ‘yum’ | awk ‘’ | xargs kill -9 rm -f /var/cache/apt/archives/lock rm -f /var/lib/dpkg/lock
После этого попробуйте заново запустить установку.
Шаг 6. Запустить и проверить бота
Пришло время запустить бота. Для начала запустим утилиту Screen простой командой:
screen
Перейдём в каталог с файлом бота:
cd /opt/keksbot
npm install
После этого можем запустить бота:
nodejs index.js
Заходим в Telegram, проверяем бота:
Отлично! Всё работает.
Теперь можно отключиться от сервера и закрыть окно PuTTY, бот продолжит работу.
Шаг 7. Обеспечить автоматический перезапуск бота
Из-за ошибок в коде бот может «упасть» в самый неожиданный момент. Чтобы этого не случилось, настроим автозапуск бота при старте сервера и его автоматический перезапуск при ошибках.
Это позволит боту стабильно работать даже в случае обнаружения багов. Вы сможете оперативно их исправить, а бот в это время продолжит отвечать на запросы.
Большинство современных Linux-систем используют systemd для управления службами, поэтому следующая инструкция подойдёт для последних версий Ubuntu, Debian и CentOS.
Для начала отключим бота командой:
killall node
Нам понадобится создать собственную службу, для этого в каталоге /lib/systemd/system создадим файл:
имя_бота.service
В нашем случае это будет файл /lib/systemd/system/keksbot.service . В файл поместим следующий код:
[Unit] Description=Keksbot — Telegram bot After=network.target [Service] ExecStart=/usr/bin/node index.js ExecReload=/usr/bin/node index.js WorkingDirectory=/opt/keksbot/ KillMode=process Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
Текст в некоторых строках необходимо отредактировать относительно вашего проекта. Разберём строки, на которые нужно обратить внимание.
В поле Description указывается описание службы. Вы можете указать в ней краткую информацию о боте.
Description=Keksbot — Telegram bot
Команда для запуска бота.
ExecStart=/usr/bin/node index.js ExecReload=/usr/bin/node index.js
Её следует поменять, если имя скрипта вашего бота отличается от index.js . В таком случае нужно будет указать следующие значения:
ExecStart=/usr/bin/node имя_файла.js ExecReload=/usr/bin/node имя_файла.js
Папка со скриптом, который мы запускаем. В нашем случае это /opt/keksbot/ .
WorkingDirectory=/opt/keksbot/
Сохраняем файл. В примерах далее мы будем использовать имя службы keksbot — если вы указали другое имя, не забудьте поменять его. Для установки службы воспользуемся командами:
systemctl enable keksbot
Теперь запустим бота командой:
systemctl start keksbot
Готово. Теперь бот будет автоматически запускаться при старте сервера или при возникновении ошибок. Можно проверить это, завершив процесс node:
killall node
Через пять секунд бот автоматически перезапустится.
Помимо запуска мы можем управлять ботом командами:
systemctl stop keksbot
systemctl restart keksbot
systemctl status keksbot
Ещё о создании бота:
- Как написать Телеграм-бота на JavaScript
- Как настроить работу Телеграм-бота с Google Sheets
«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.
Источник: htmlacademy.ru
Как разместить Telegram-бота на сервере?
Уже не первый раз меня спрашивали о том, как разместить своего бота на сервере и запустить его. В этой статье, я постараюсь коротко и ясно объяснить об этом. Но делать я это буду на бесплатном хостинге — Heroku.
- Создание бота
- Размещение бота на сервере Heroku
- Запуск бота на сервере Heroku
- Размещение бота на своём сервере
- Запуск бота на своём сервере
Я разбил статью на 5 глав. Как я сказал ранее, статья будет короткой. И с помощью этой навигации будет проще ориентироваться по требуемой информации.
Создание бота
Статью о том, как написать своего Telegram-бота на NodeJS я уже писал. Думаю я объяснил там всё достаточно понятно. Изучить её, если у вас еще нету бота и вы хотите его разработать на NodeJS. Если вы написали своего бота не на JavaScript, то можете пропускать эту часть и приступать ко второй главе.
Размещение бота на Heroku
Я люблю этот сервис за то, что я могу протестировать свои проекты в режиме «продакшн». Это дает мне гарантию, что мой проект будет работать стабильно, когда я его запущу в «боевом режиме».
Особой разницы в размещении бота на Heroku или на отдельном сервере нету. Тут всё достаточно просто.
- Зарегистрируйтесь на сайте Heroku
- Войдите в свой аккаунт и создайте первый проект, нажав на «Create new app».
- Придумайте название своему проекту. Название должно быть уникальным. Выбор региона не принципиален.
- После создания проекта, вам будет предложены варианты деплоя (размещения) вашего проекта на Heroku.
Тут есть несколько вариантов. Я опишу только первые два.
- Heroku Git — с помощью CLI от Heroku, вы можете очень просто разместить своего бота на сервере Heroku.
- GitHub — вы можете подключить свой аккаунт GitHub и склонировать ваш репозиторий на сервер Heroku.
Я буду пользоваться первым вариантом.
Следуя простой инструкции, указанной в разделе «Deploy», можно загрузить свой проект на сервер Heroku.
- Скачайте Heroku CLI для работы с Herokue сервером.
- Войдите в аккаунт Heroku через CLI.
heroku login
- Зайдите в папку вашего проекта через консоль (терминал).
cd my-telegram-bot
- И выполните эти две команды по очереди. (Если вы уже инициализировали Git, то первую команду выполнять не надо).
heroku git:remote -a archakov-im-telegram-bot
Первая — инициализирует Git в вашей папке. Вторая — установит ссылку на репозиторий Heroku, для деплоя (размещения) вашего проекта на сервере.
Когда внесли все правки и убедились, что всё должно работать нормально, создайте в папке с вашим проектом — Procfile. Без расширения, просто — Procfile.
Внутри этого файла, вам нужно указать команду, которая будет выполняться при запуске вашего проекта на Heroku. То есть, Heroku должен знать, что ему нужно запускать. В файле Procfile указана соответствующая команда, которая запустит бота.
web: node index.js
В моем случае, это npm start . Так как у меня код написан на ES6, мне нужно конвертировать ES6 в ES5 с помощью Babel. И только после этого, у меня запускается команда запуска бота, типа: node index.js .
Запуск бота на сервере Heroku
Почти готово. Вам осталось теперь просто запушить вашего бота на сервер Heroku и запустить бота.
git commit -m «init»
git push heroku master
Если вам лень каждый раз вбивать эти команды, пропишите в package.json в scripts, следующую команду:
«deploy»: «git add . git commit -m ‘fix’ git push heroku master»
Если же бот не запустился после пуша, выполните последнюю команду для запуска бота на Heroku и готово!
heroku ps:scale web=1
Размещение бота на своём сервере
Тут тоже достаточно всё просто. Если вы не хотите публиковать своего бота на GitHub’e, вы можете использовать BitBucket.
Регестрируемся. Создаем репозиторий, нажав на плюсик слева.
Называем репозиторий как хотим, тут всё так же, как и на GitHub.
После чего, заходим так же в свой проект с ботом. И добавляем в Git, ссылку на этот репозиторий.
cd my-telegram-bot
У вас должна быть другая ссылка на репозиторий. Кликните на «I have an existing project» и ниже указана команда с вашим репозиторием.
Пушим всё на BitBucket репозиторий. На своём сервере клонируем репозиторий с BitBucket и любые изменения просто скачиваем командой:
git pull origin master
Запуск бота на своём сервере
После того как вы склонировали репозиторий и установили все зависимости на вашем сервере, вам остается запустить бота в фоновом режиме — Запуск Node.js в фоновом режиме.
nohup nodejs index.js > /dev/null 2>
ps aux | grep node
Или же есть еще два варианта запуск бота:
- Nodemon — следит за любыми изменениями в файле и перезапускает бота (скрипт).
- Docker — более сложный, но грамотный вариант для запуска бота. При правильной настройке Docker-контейнера, можно поставить автоматически запуск при фейле бота.
Если у вас бот не запустился, проверьте логи, командой heroku logs .
Если вы рассчитываете на халяву от Heroku и ожидаете, что ваш бот будет хоститься на их сервере, то мне придётся вас огорчить. Ваш бот будет работать 30 секунд, после чего отключается. Переодично включается, когда как. В общем, Heroku подходит для теста бота в «боевом режиме».
Это уже 6 или 7 статья по разработке телеграм ботов. Думаю, мой блог скоро превратится в «блог о программировании телеграм ботов». Что самое странное, я написал больше 55 статей про разные темы, но 90% запросов из поисковых систем, связаны с телеграм ботами. Тем не менее приложу к этой статье несколько своих статей по Telegram.
- NodeJS: Делаем кнопки в Telegram API (inline-keyboards)
- Полезные чаты Telegram для веб-разработчиков
- Node.JS: Делаем своего Telegram бота
Archakov Dennis
Fullstack Developer (ReactJS, NodeJS) / UI Designer.
Источник: archakov.im
Как хостить телеграм-бота (и другие скрипты на Python) на Repl.it бесплатно 24/7
Очень часто возникающий вопрос: где можно разместить скрипты на Python, Flask-приложение, телеграм или дискорд ботов?
Один из вариантов — на своем компьютере при наличии внешнего IP-адреса и опыта в настройке проброса портов на роутере. Или другие сервисы, как правило, требующие платной подписки.
Цель этот статьи — подробная инструкция, как сделать хостинг Python-скриптов бесплатно и доступным 24/7 на примере телеграм-бота
Шаг 0 — регистрация бота
Существует огромное количество туториалов, как получить токен, поэтому все по-простому. Находим в телеграм BotFather, регистрируем нового бота, выбираем ему имя, получаем токен вида: 127466748171:HJfwijfw88jf32lc9FHjwpfkfgwerhjf
Он нам понадобится в дальнейшем
Шаг 1 — регистрируемся на Repl.it
Создаем новый проект на Python
Шаг 2 — Пишем код бота
В проекте будет создан файл main.py. В нем размещаем код бота:
Тут стоит обратить на установку модуля pytelegrambotapi: импортируем сначала pip и потом выполняем его через: pip.main([‘install’, ‘pytelegrambotapi’]).
В этом случае при запуске никаких дополнительных действий для установки не потребуется
Шаг 3 — Создаем Flask-сервер
Создаем в проекте еще один файл background.py В нем будет запущен Flask-сервер, который будет принимать запросы от сервиса мониторинга и использоваться для поддержания работоспособности скрипта на ReplIt.
Flask — модуль на python для разработки веб-приложений. Мы создадим «шаблон» сервера, в котором только одна страница, необходимая для нашей задачи.
Все дело в том, что в бесплатном режиме запущенный скрипт на Replit будет остановлен спустя некоторое время (10-30 мин) после закрытия вкладки браузера.
Однако, если к веб-серверу был сделан запрос, таймер сбрасывается и скрипт продолжает работать.
Важно, что сервер запускается в файле не напрямую, а в отдельном потоке t = Thread(target=run). Это обеспечит возможность одновременной работы Flask-сервера и телеграм-бота.
После запуска в верхнем правом углу появилась ссылка (она потребуется чуть позже) по которой можно увидеть результат работы Flask-сервера (в нашем случае сообщение I’m alive).
На этом этапе у нас работает эхо-телеграм-бот и веб-сервер, доступный из вне по адресу вида: YOUR_REPL.your_nickname.repl.co
Однако, спустя 10-30 минут после закрытия вкладки браузера скрипт будет остановлен. Вся хитрость в том, что если «кто-то» будет периодически открывать ссылку, ведущую на страницу нашего веб сервера скрипты будут продолжать работать бесконечно долго.
Шаг 4 — настраиваем службу мониторинга
Для того, чтобы скрипт работал постоянно, воспользуемся сервисом UpTimerRobot. Он будет раз в 5 минут создавать запрос к нашему web-серверу и продлевать время его работы. Регистрация не представляет трудности, поэтому перейдем к следующему этапу.
После входа в личный кабинет, создаем новый монитор
В настройках нового монитора нужно указать название и ссылку, которую мы получили при запуске скрипта выше. Время опросы указываем — каждые 5 минут.
Сохраняем монитор и возвращаемся в ReplIt. В консоле сервера видим входящие обращения от службы мониторинга
Это значит, что все получилось и наш скрипт будет работать 24/7. Можно работать над ним и развивать проект!
Источник: habr.com