Главная
|
Услуги и цены
VDS
Выделенные серверы
Размещение сервера
|
F.A.Q
|
О компании
|

Как хостить Telegram-бота на Node.js с помощью PM2 на VDS

Если запустить бота командой node bot.js, он будет работать в текущем процессе. При завершении процесса бот остановится, а после перезагрузки VDS его придётся запускать повторно.

PM2 решает эту задачу и предоставляет дополнительные инструменты управления. Он автоматически перезапускает завершившиеся процессы, сохраняет список приложений и позволяет просматривать их состояние.

Для Node.js-проектов PM2 часто удобнее ручного управления процессами. При этом он не заменяет системные инструменты Linux полностью: например, настройка автозапуска самого PM2 всё равно использует механизм запуска служб операционной системы.

1. Подготовьте сервер и установите Node.js

2. Создайте Telegram-бота на Node.js

3. Настройте PM2

Сохраните токен в конфигурации PM2

4. Настройте автозапуск после перезагрузки VDS

5. Управляйте ботом через PM2

Итог

Шаг 1. Подготовьте сервер и установите Node.js

Подключитесь к VDS по SSH. Если сервер новый, сначала выполните базовую настройку системы по инструкции Подготовка сервера Linux к работе.

Установите Node.js и npm:

apt install -y nodejs npm

Проверьте установленные версии:

node -v
npm -v

Если обе команды выводят номера версий, инструменты доступны в системе.

Теперь установите PM2 глобально:

npm install -g pm2

Проверьте, что менеджер процессов доступен:

pm2 -v

Шаг 2. Создайте Telegram-бота на Node.js

Создайте директорию проекта:

mkdir -p /srv/newbot
cd /srv/newbot

В примере используется путь /srv/newbot. Он будет указан и в дальнейших командах, поэтому при выборе другой директории замените путь во всех соответствующих местах.

Инициализируйте проект:

npm init -y

Команда создаст файл package.json, в котором хранятся сведения о проекте и его зависимостях.

Установите библиотеку для работы с Telegram Bot API:

npm install node-telegram-bot-api

Создайте файл бота:

nano bot.js

Добавьте следующий код:

const TelegramBot = require("node-telegram-bot-api");

const token = process.env.BOT_TOKEN;

if (!token) {
    throw new Error("Не задана переменная окружения BOT_TOKEN");
}

const bot = new TelegramBot(token, { polling: true });

bot.onText(/\/start/, (msg) => {
    bot.sendMessage(msg.chat.id, "Бот работает!");
});

bot.on("polling_error", (error) => {
    console.error("Ошибка polling:", error.message);
});

Вместо хранения токена непосредственно в коде используется переменная окружения BOT_TOKEN. Такой подход позволяет менять секретные данные отдельно от исходников и не раскрывать токен при публикации проекта.

Получить токен можно через BotFather в Telegram. После этого настроим передачу токена процессу PM2.

Сохраните файл и выйдите из редактора. Проверьте код запуском:

BOT_TOKEN="ВАШ_ТОКЕН" node bot.js

Замените ВАШ_ТОКЕН действительным токеном. Откройте бота в Telegram и отправьте команду /start. Если пришёл ответ, значит, бот подключается к Telegram и обрабатывает сообщения.

Остановите процесс сочетанием Ctrl+C. Теперь настроим постоянный запуск через PM2.

Шаг 3. Настройте PM2

Для начала запустим бота под управлением PM2, передав токен через переменную окружения:

BOT_TOKEN="ВАШ_ТОКЕН" pm2 start /srv/newbot/bot.js --name mybot

PM2 запустит приложение в фоновом режиме. После выполнения команды терминал можно закрыть, не останавливая бота.

Запуск Telegram-бота на Node.js через PM2

Проверьте состояние процесса:

pm2 status

В списке должен появиться процесс mybot со статусом online. Это означает, что PM2 считает приложение работающим, но само по себе ещё не подтверждает, что бот успешно обрабатывает сообщения.

Проверьте логи:

pm2 logs mybot

Здесь отображаются сообщения приложения и ошибки, которые помогают определить причину неполадок. Чтобы выйти из просмотра логов, нажмите Ctrl+C: процесс бота продолжит работу.

Сохраните токен в конфигурации PM2

Чтобы не передавать токен непосредственно в команде запуска, можно создать файл конфигурации PM2.

Создайте файл:

nano /srv/newbot/ecosystem.config.js

Добавьте конфигурацию:

module.exports = {
    apps: [
        {
            name: "mybot",
            script: "/srv/newbot/bot.js",
            cwd: "/srv/newbot",
            env: {
                BOT_TOKEN: "ВАШ_ТОКЕН"
            },
            autorestart: true,
            restart_delay: 5000
        }
    ]
};

Замените значение ВАШ_ТОКЕН своим токеном. Ограничьте доступ к файлу, поскольку он содержит секретные данные:

chmod 600 /srv/newbot/ecosystem.config.js

Остановите предыдущий процесс и запустите приложение по конфигурации:

pm2 delete mybot
pm2 start /srv/newbot/ecosystem.config.js

Шаг 4. Настройте автозапуск после перезагрузки VDS

Обычный запуск через PM2 ещё не гарантирует восстановление работы после перезагрузки сервера. Для этого необходимо настроить запуск самого PM2 при загрузке Linux.

Выполните:

pm2 startup
Настройка автозапуска PM2 после перезагрузки VDS

PM2 выведет команду, которую нужно выполнить для создания службы автозапуска. Скопируйте именно команду из своего терминала: она может отличаться в зависимости от пользователя и расположения исполняемых файлов.

После выполнения предложенной команды сохраните текущий список процессов:

pm2 save

PM2 сохранит список приложений, которые нужно восстановить при запуске. Если добавить нового бота или изменить состав процессов, выполните pm2 save повторно.

Проверьте состояние приложений:

pm2 status

Теперь PM2 настроен на восстановление сохранённых процессов после перезагрузки VDS.

Шаг 5. Управляйте ботом через PM2

Для повседневной работы достаточно нескольких команд.

Перезапустить бота:

pm2 restart mybot

Остановить бота:

pm2 stop mybot

Удалить процесс из списка PM2:

pm2 delete mybot

Посмотреть логи:

pm2 logs mybot

Посмотреть состояние всех приложений:

pm2 status

Обратите внимание: pm2 stop останавливает процесс, но оставляет его в списке. Команда pm2 delete удаляет процесс из списка управления, но не удаляет файлы проекта.

После изменения конфигурации приложения может потребоваться перезапуск с обновлением переменных окружения:

pm2 restart mybot --update-env

Если вы изменили ecosystem.config.js, примените новую конфигурацию:

pm2 reload /srv/newbot/ecosystem.config.js --update-env

Для небольшого бота обычного restart обычно достаточно. Команда reload полезнее для приложений, где требуется более аккуратное обновление процесса, но она не гарантирует отсутствие перерыва в работе для любого приложения.

Итог

PM2 позволяет запускать Telegram-бота на Node.js в фоновом режиме, отслеживать его состояние и автоматически восстанавливать работу после завершения процесса. После настройки автозапуска сохранённые приложения будут запускаться вместе с сервером.

logo
© 2022 62yun
Все права защищены
vk.com/62yuncom
support@62yun.ru
logo
vk.com/62yuncom
support@62yun.ru
Услуги
VDS Выделенные серверы
Полезное
F.A.Q О компании Политика конфиденциальности Оферта
Способы оплаты
wechatpay visa mastercard
MirAccept
Партнеры
25port
© 2022 62yun Все права защищены
ВВЕРХ