March 9, 2020

Как разместить бота на Debian или Ubunty

Во первых необходимо установить SSH-Соединение с сервером, для этого можно использовать любой удобный SSH клиент, я использую putty. Помимо него есть Termius, говорят он также очень хорош, некоторые представители нашей команды им пользуются. В SSH-Клиент необходимо будет ввести данные для SSH-Соединения с сервером.

Сразу после установки убунты надо все пакеты обновить до последней версии
Это делается в две команды:

apt-get update
apt-get -y upgrade

Первая команда получит информацию о новых пакетах
Вторая установит обновления для них в систему

Если в процессе установки обновлений sshd попросит обновить конфиг - ему желательно отказать (эта опция будет выбрана по умолчанию, достаточно нажать Enter). Если не отказать - можно лишиться SSH-Доступа

Если GRUB (загрузчик) попросит обновиться - ему можно разрешить, там уже опция разрешения будет выбрана по умолчанию, также достаточно нажать Enter

После этого необходимо установить систему управления базами данных MySQL (далее СУБД MySQL)
Для этого:

apt-get install -y wget
wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb
dpkg -i mysql-apt-config_0.8.13-1_all.deb

Конфигуратор спросит желаемую версию БД и по умолчанию будет выбрана 8.0, ни в коем случае нельзя соглашаться её оставлять, необходимо выбрать версию раньше (5.7). С 8.0 оно работать не сможет, там переделали систему авторизации.

После этого необходимо ввести команды:

apt-get update
apt-get install -y lsb-release
apt-get install mysql-server

В процессе установки БД она запросит пароль для юзера root - можно ввести любой, но обязательно надо его запомнить, он пригодится

Далее необходимо установить среду выполнения (интерпретатор) Node.js, для этого выполняем следующие команды:

apt-get install -y curl
curl -sL https://deb.nodesource.com/setup_13.x | bash -
apt-get install -y nodejs

После этого необходимо залить файлы бота на сервер. Для этого я использую протокол SFTP. Для выполнения этой операции можно использовать любой файловый менеджер с поддержкой протокола SFTP. Я использую WinSCP. При подключении к серверу необходимо указать SSH-Данные, так как этот протокол работает поверх SSH.

Далее закидываем файлы проекта на сервер

В директории с проектом должен содержаться файл с расширением sql, который содержит снимок состояния структуры базы данных (БД). Он необходим для того чтобы разметить БД, Поэтому мы заходим в СУБД с помощью команды:

mysql -u root -p

От вас будет запрошен ввод пароля, который вы указывали при установке СУБД (ввод не отображается в целях безопасности). После успешной авторизации необходимо создать базу данных, делается это командой:

CREATE DATABASE имя_базы_данных;

В качестве имени базы данных можно задать любой сочитание латинских символов
После того как создали базу данных - выходим из СУБД командой exit

Теперь необходимо залить разметку из снимка состояния структуры базы данных, для этого вводим команду:

mysql -u root -p имя_базы_данных < /путь/до/sql-файла

Снова будет запрошен ввод пароля, после успешного ввода пароля снимок состояния структуры базы данных будет залит

Затем необходимо настроить бота, для этого заходим в конфигурационный файл в директории с проектом config.json и редактируем его. Там будет возможность указать токен бота в поле token, идентификатор административной группы в поле admin, и данные для базы данных в соответствующие по смыслу по названию поля. В качестве имени пользователя можно ввести root, в качестве пароля тот пароль который вы указывали при установке, в качестве имени базы данных - то имя которое вы указывали при создании базы данных.

Затем необходимо проверить, работает ли бот
Зайди в рабочую директорию проекта с помощью команды cd, вот так:

cd /путь/до/директории/с/проектом

И запустите бота командой:

node название_проекта

Если он успешно запустился (нету признаков ошибок) (он написал: инициализация завершена или что-то подобное) - то всё окей, можно приступать к шагу с развёртыванием бота как сервиса для долгосрочной работы

Если бот сообщил, что отсутствует какой-то модуль (ошибка: Cannot find module наименование_модуля), то устанавливаем недостающий модуль командой:

npm install наименование_модуля

И так пока все модули не будут установлены и бот не запустится успешно
Когда бот успешно запускается - если закрыть SSH-Сессию то он перестанет работать, поэтому нам необходимо запустить бота в режиме сервиса, закройте бота сочитанием клавиш Ctrl + C

Для развёртывания Node.js программного обеспечения в режиме сервиса на Debian и Ubuntu серверах уже есть готовая инструкция в интернете, можете ознакомиться с ней тут:
https://nodesource.com/blog/running-your-node-js-app-with-systemd-part-1/

(Начинайте читать статью с раздела "Creating a systemd Service File")

В ней же вы сможете узнать как добавить вашего бота в автозагрузку, чтобы он сам запустился когда сервер по какой-то причине будет перезапущен

По поводу СУБД беспокоиться не нужно - она сама себя запускает как сервис и прописывается в автозагрузку при установке

Если вы запустили бота в режиме сервиса, прописали его в автозагрузку и всё работает корректно - перезапустите сервер пару раз чтобы убедиться в работоспособности автозапуска. Перезапуск сервера можно выполнить находясь в SSH-Сессии командой reboot (после выполнения команды необходимо будет переподключиться к серверу когда он запустится)

Когда вы убедились что сервер работает корректно и бот автоматически запускается после перезапуска - разворачивание бота на сервере завершено.