Как разместить бота на 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 (после выполнения команды необходимо будет переподключиться к серверу когда он запустится)
Когда вы убедились что сервер работает корректно и бот автоматически запускается после перезапуска - разворачивание бота на сервере завершено.