🚀 Вам бесплатно доступен тренажёр по HTML и CSS.

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

Шаг 1. Выбрать хостинг

Как правило, на shared-хостинге отсутствует поддержка Node.js, поэтому нам понадобится как минимум виртуальный сервер. Существуют сервисы, предлагающие VPS бесплатно, но с заметными ограничениями: например на количество трафика или нагрузку на сервер. Можно выделить несколько известных зарубежных провайдеров (но стоит отметить, что для новичков они могут оказаться сложными):

  • Google Cloud
  • Oracle Cloud
  • Amazon Web Services

Преимущество платных VPS в более высоких лимитах или их отсутствии, а также в гарантии стабильной работы сервера. Вместе с этим вы получаете активную поддержку и всегда можете рассчитывать на помощь хостинг-провайдера, если возникнут проблемы.

Для примера мы закажем облачный VPS в REG.RU, вы можете воспользоваться любым VPS-хостингом. Он удобен для тестового проекта тем, что оплата почасовая. При выборе тарифа мы рекомендуем ориентироваться на несколько параметров:

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

Так как наш бот использует только одну основную библиотеку и состоит из нескольких строк кода, мы выбираем самый младший тариф — 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 и пароль в настройках клиента:

При первом подключении появится окно с предупреждением:

Ставим галочку «Всегда доверять этому хосту» и нажимаем «Ок».

Переходим на директорию выше (...), затем в каталог /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 для установки зависимостей.

Запустим команду:

  • для Ubuntu/Debian

    apt -y install nodejs npm screen
    
  • для CentOS

    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-файлы. Чтобы это сделать, запустите команды:

  • для Ubuntu/Debian

    ps aux | grep ‘apt\|apt-get’ | awk ‘{print $2}’ | xargs kill -9
    rm -f /var/cache/apt/archives/lock
    rm -f /var/lib/dpkg/lock
    rm -rf /var/lib/dpkg/lock-frontend
    
    
  • для CentOS

    ps aux | grep ‘yum’ | awk ‘{print $2}’ | 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
    

Ещё о создании бота:


«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

ТелеграмПодкастБесплатные учебники

Читать дальше

9 книг по JavaScript для начинающих в 2024

9 книг по JavaScript для начинающих в 2024

🚀 Вам бесплатно доступен тренажёр по HTML и CSS.

Все вокруг говорят, что книги — прошлый век. Но вовремя прочитанная хорошая книжка может здорово помочь в изучении нового языка или технологии, а то и вообще целиком объяснить какую-нибудь важную штуку. Например, какие бывают алгоритмы, или зачем нужен рефакторинг. К тому же, хоть фреймворки меняются каждый год, основы обычно долго не меняются.

Мы опросили знакомых разработчиков, узнали, что читают они сами, и предлагаем вам подборку хороших книг по JavaScript.

Читать дальше
JS
  • 6 марта 2024
Объект URL в JavaScript: полный разбор

Объект URL в JavaScript: полный разбор

🚀 Вам бесплатно доступен тренажёр по HTML и CSS.

Объект URL в JavaScript представляет URL-адрес и предоставляет удобные методы для работы с ним. Он позволяет анализировать, конструировать и декодировать URL-адреса.

Создать объект URL можно двумя способами:

Конструктор URL() — самый распространённый способ, в котором вы передаёте любой URL в виде строки в качестве аргумента.

const url = new URL("https://www.example.com/path?query=123#hash");

Использование window.location — это глобальный объект в браузерах, который содержит информацию о текущем URL.

const currentUrl = new URL(window.location.href);
Читать дальше
JS
  • 23 января 2024
Генерация QR-кодов на JS в 4 шага. Node.js + qrcode

Генерация QR-кодов на JS в 4 шага. Node.js + qrcode

🚀 Вам бесплатно доступен тренажёр по HTML и CSS.

Давайте сделаем простой REST API на Node.js и Express, который будет генерировать QR-коды для любой ссылки. Если у вас ещё не установлены Node.js и npm, установите их с официального сайта.

Читать дальше
JS
  • 22 ноября 2023
Знакомство с JavaScript

Знакомство с JavaScript

🚀 Вам бесплатно доступен тренажёр по HTML и CSS.

Теперь, когда вы знаете, как создать структуру веб-страницы с помощью HTML и оформить ее стилями с помощью CSS, пришло время оживить её с помощью JavaScript (JS). JavaScript — это мощный язык программирования, который используется для создания интерактивных и динамических веб-сайтов.

Вы можете добавить JavaScript в ваш HTML-документ двумя способами:

Встроенный JavaScript: непосредственно в HTML-документ, в тегах <script>:

<script>
  alert("Привет, мир!");
</script>

Внешний JavaScript: подключение внешнего .js файла к HTML-документу:

<script src="script.js"></script>
Читать дальше
JS
  • 1 ноября 2023
Событие onclick в JS на примерах

Событие onclick в JS на примерах

🚀 Вам бесплатно доступен тренажёр по HTML и CSS.

Интерактивность — ключевой компонент любого современного сайта. И одним из наиболее часто используемых событий для создания интерактивности является событие onclick. В этой статье мы подробно разберёмся, что такое событие onclick, как его использовать и приведем примеры применения.

Событие onclick — это событие JavaScript, которое активируется, когда пользователь кликает на определенный элемент страницы. Это может быть кнопка, ссылка, изображение или любой другой элемент, на который можно нажать.

Читать дальше
JS
  • 30 октября 2023
Как перевернуть сайт. Самая короткая инструкция

Как перевернуть сайт. Самая короткая инструкция

Не представляем, зачем это может понадобиться, но не могли пройти мимо.

Никакой магии. Мы вызываем JavaScript-функцию rotateBody(), которая применяет свойство transform с значением rotate(180deg) к элементу <body>. Когда вы нажмете на кнопку «Перевернуть», всё, что находится внутри <body> будет повернуто на 180 градусов (то есть, встанет вниз головой)

function rotateBody() {
  document.body.style.transform = 'rotate(180deg)';
}

<button onclick="rotateBody()">Перевернуть</button>

Но такой код повернёт страницу только один раз. Если нужно, чтобы она возвращалась обратно при втором клике, усложним код:

let isRotated = false;

function rotateBody() {
  if (isRotated) {
    document.body.style.transform = 'rotate(0deg)';
    document.body.style.direction = "ltr";
  } else {
    document.body.style.transform = 'rotate(180deg)';
    document.body.style.direction = "rtl";
  }
  isRotated = !isRotated;
}

Надеемся, вы прочитали это описание до того, как нажать на кнопку.

JS
  • 25 октября 2023
Как узнать геолокацию: Geolocation API

Как узнать геолокацию: Geolocation API

🚀 Вам бесплатно доступен тренажёр по HTML и CSS.

Geolocation API позволяет сайтам запрашивать, а пользователям предоставлять свое местоположение веб-приложениям. Геолокация может использоваться для выбора города в интернет-магазине, отображения пользователя на карте или навигации в ближайший гипермаркет.

Основной метод Geolocation API — getCurrentPosition(), но есть и другие методы и свойства, которые могут пригодиться.

Читать дальше
JS
  • 16 октября 2023
Что такое localStorage и как им пользоваться

Что такое localStorage и как им пользоваться

🚀 Вам бесплатно доступен тренажёр по HTML и CSS.

localStorage — это место в браузере пользователя, в котором сайты могут сохранять разные данные. Это как ящик для хранения вещей, которые не исчезнут, даже если вы выключите компьютер или закроете браузер.

До localStorage разработчики часто использовали cookies, но они были не очень удобны: мало места и постоянная передача данных туда-сюда. LocalStorage появился, чтобы сделать процесс более простым и эффективным.

Читать дальше
JS
  • 12 октября 2023