Какие параметры сервера необходимы?
Если вы заинтересованы в размещении telegram бота на нашем сервере, то первое с чем следует определиться, это с нужными характеристиками машины. Обычный бот, который пересылает запросы пользователей, отвечает заготовленным текстом или ретранслирует данные с внешних источников – это очень простая программа, и если она не обслуживает одновременно сотни пользователей, то будет достаточно самой дешёвой конфигурации. Если же бот активно собирает информацию из внешних источников, производит её трансформацию, что-то обрабатывает алгоритмами или к нему одномоментно будут обращаться тысячи пользователей, то в таком случае необходим индивидуальный подход. После запуска бота можно оценить реальную нагрузку и поменять конфигурацию на более или менее мощную.
Итак, предположим у вас есть один или несколько простых ботов, помимо требуемой мощности важно на каком языке и для какой платформы написан бот. Так как для всех языков невозможно предусмотреть единую инструкцию, будет рассмотрен наиболее распространённый вариант с ботом, написанным на Python.
В разделе заказа сервера выбираем:
- Московский дата-центр
- Минимальные характеристики CPU, RAM, диск – HDD
- Шаблон сервера – “Установить чистую ОС”
- Операционную систему Debian 10 (если бот кроссплатформенный, а не заточен под конкретную ОС)
Или просто воспользуйтесь этой ссылкой для заказа идентичной конфигурации.

Начинаем настройку
После завершения развёртывания образа на вашем сервере, необходимо произвести минимальную настройку безопасности системы, поскольку каждый сервер в интернете становится целью автоматических сканеров хакеров.
В списке “Мои серверы” на нашем портале необходимо найти пароль администратора сервера. Этот пароль постоянно лучше нигде не хранить, записать его можно временно на период проведения настроек, а потом удалить. Он больше не пригодится, но в случае необходимости его всегда можно посмотреть на портале.

Для настройки вашего сервера необходима программа удалённого управления (терминал), если у вас нет такого ПО, то можно установить широко известный терминал Putty.

Запускаем терминал и в настройках для подключения вводим IP-адрес вашего сервера, который указан в информации о сервере на портале. Порт подключения менять не надо (22, стандартный для SSH). Нажимаем подключиться, “Open”. Если появится текст, предлагающий ввести данные для входа, то всё было указано правильно.

Вводим имя администратора root, нажимаем ENTER и вводим пароль администратора, ENTER. При вводе пароля не будет отображаться никаких символов, так должно быть. Для вставки пароля из буфера обмена нужно нажать правой клавишей мыши в любом месте окна терминала.
После правильного ввода данных появится приглашение системы.

Добавляем учетную запись администратора
Золотым правилом обеспечения безопасности сервера является невозможность использования аккаунта root из интернета. Мы добавим дополнительного администратора в систему и отключим удалённый вход для root. Для управления сервером должен использоваться только второй администратор, это исключит возможность случайного раскрытия пароля root третьим лицам и сделает бессмысленными попытки подбора этого пароля сканерами хакеров. В случае потери пароля нового администратора вы всегда сможете использовать аварийный доступ к серверу с нашего портала, так что запрещение удалённого входа для root не может привести к ситуации потери доступа к вашему серверу.
Обновляем компоненты системы.
apt update
Устанавливаем сервис sudo, который нужен для выполнения команд администратора без логина под учётной записью root.
apt install sudo -y
Устанавливаем утилиту скачивания файлов, которая потребуется в процессе настройки системы.
apt install curl -y
Добавляем нового пользователя с любым именем.
adduser johnwho

Кроме создания пароля для нового пользователя, система может попросить указать дополнительные сведения о пользователе, их можно оставить пустыми, нажав ENTER.
Далее предоставляем новому пользователю возможность вызывать команды администрирования.
usermod -aG sudo johnwho

Переключаемся на нового пользователя.
su johnwho
На запрос пароля вводим только что созданный пароль для нового администратора johnwho.
Должно появиться приглашение:
johnwho@ruvds:/root$
Проверяем наличие административных прав
sudo ls -la

Если система выдала список неких файлов, а не ошибку, то второй администратор был создан успешно.
Далее необходимо зайти на ваш сервер от имени нового администратора.
Закрываем программу удалённого доступа и запускаем её заново, вводим адрес сервера, подключаемся и на этапе логина вводим имя нового администратора и его пароль.

Теперь можно отключить возможность удалённого входа от имени root.
Запускаем редактирование настроек удалённого доступа.
sudo nano /etc/ssh/sshd_config
Система спросит пароль, необходимо ввести пароль нового администратора, под которым было произведено подключение к серверу.

Откроется текстовый файл настроек, листаем стрелками вниз до параметра “PermitRootLogin yes”, который необходимо поменять на:PermitRootLogin no
Выходим нажатием CTRL+x, редактор спросит сохранять ли изменения? Вводим Y. На запрос имени файла нажать ENTER, чтобы сохранить изменения в прежний файл.
Перезапускаем сервис удалённого управления
sudo systemctl restart sshd
Если после этого оборвётся связь, надо снова подключиться от имени нового администратора.
Настраиваем firewall
Устанавливаем удобный брандмауэр UFW.
sudo apt install ufw
Если происходило переподключение, то система запросит пароль нового администратора.
Установим защиту от брутфорса паролей:
sudo apt install -y fail2ban
Запрещаем все входящие подключения.
sudo ufw default deny incoming
Делаем исключение для удалённого управления.
sudo ufw allow ssh
Разрешаем все исходящие подключения.
sudo ufw default allow outgoing
Активируем брандмауэр.
sudo ufw enable
На запрос подтверждения вводим “y”.
Проверяем правильность настройки.
sudo ufw status verbose
Правильный вывод выглядит следующим образом:

Готовим систему для запуска бота
Далее необходимо создать пользователя, от имени которого будет работать бот. Это позволит не бояться за сервер, и в случае необходимости проведения дополнительных настроек разработчиком, можно не опасаясь предоставить пароль этого пользователя. Если разработчик попросит дополнительно предоставить доступ администратора для установки, например, ПО для базы данных, то не забудьте потом посмотреть историю его действий под администратором командой “history”, а потом поменять пароль второго администратора. Доступ к root при наличии доступа к дополнительному администратору адекватный разработчик просить не должен.
Добавляем нового пользователя (имя произвольное)
sudo adduser telegrambot
Закрываем терминал и заходим уже под новым пользователем.

Создаём папку для хранения файлов бота
mkdir telebot_1
Переходим в эту папку
cd telebot_1
Далее необходимо скопировать файл(ы) бота на сервер.
Под Windows это проще всего сделать встроенной утилитой pscp, открываем командную строку cmd. И там вводим команду, в которой нужно скорректировать следующее: путь к файлу бота, имя пользователя для бота, IP-адрес сервера.pscp c:/full/path/telebot.py telegrambot@76.54.32.10:/home/telegrambot/telebot_1

Утилита спросит пароль, надо ввести пароль от пользователя telegrambot.
Переходим в окно удалённого управления сервером и проверяем появление файла.
ls -la

Если бот содержит множество файлов, то для копирования удобнее будет использовать программу WinSCP. Подключение осуществляет по тому же адресу и порту, с тем же пользователем, что и в случае с терминалом.
Установка Python
Переходим в каталог для временных файлов.
cd /tmp
Скачиваем скрипт установки Miniconda. Это менеджер пакетов Python, его установщик автоматически установит интерпретатор Python, нужный для запуска самого бота.
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

Запускаем скрипт скачивания-установки
bash Miniconda3-latest-Linux-x86_64.sh

Пролистываем лицензию клавишей ENTER. На запрос принятия лицензии отвечаем yes. Соглашаемся на путь установки по умолчанию, на предложение инициализировать отвечаем yes.
Закрываем терминал и запускаем снова, подключаемся обратно пользователем telegrambot. Без переподключения команда python будет недоступна.
Проверяем правильность установки Python
python -V
Если всё сделано верно, то появится номер версии Python.

Запуск бота
Переходим в каталог с файлами бота.
cd telebot_1
Запускаем следующим образом, если разработчик не обозначил другой вариант.
python telebot.py
Поскольку для функционирования ботов нужны сторонние библиотеки, появится ошибка такого типа:

ModuleNotFoundError: No module named 'pyrogram'
Это означает, что надо установить недостающие библиотеки.
Если в комплекте с ботом разработчик положил файл requirements.txt, то этот файл содержит список необходимых библиотек и их можно установить одной командой:
pip install -r requirements.txt
Иначе необходимо последовательно выполнять установку недостающих библиотек, используя команду pip install:
pip install module_name
, где module_name это название очередного недостающего модуля из ошибки
ModuleNotFoundError: No module named 'module_name'
Возможен редкий вариант, что имя модуля в программе не соответствует имени для установки, правильную команду подскажет гугл по запросу “pip имя_модуля”.
Когда бот запустится без ошибок, проверьте его функциональность в телеграме. Найдите его сначала через поиск контактов, используя имя, под которым он был зарегистрирован разработчиком. Далее проверьте его работу. Если же бот не был разработан специально для вас, а вы хотите использовать чей-то готовый код, то необходимо зарегистрировать нового бота через официальный бот телеграма @botfather и там же запросить токен нового бота. Этот токен необходимо прописать в коде вашего бота вместо указанного автором, прежний токен можно найти под названием token или bot_token.

Если всё получилось, необходимо перезапустить скрипт бота в фоновом режиме. Дело в том, что при запуске командой “python telebot.py”, бот работает как простое приложение, и при закрытии терминала, система его завершит.
Чтобы бот был запущен постоянно в фоновом режиме, нужно производить запуск таким образом:
nohup python telebot.py &
После запуска команды курсор пропадёт и система будет как будто чего-то ожидать, нужно нажать ENTER, чтобы вернуться в командную строку. При этом все текстовые сообщения, которые бот выводит на экран, будут сохраняться в файле nohup.out.
Посмотреть его содержимое можно командой:
cat nohup.out
Правда, этот файл обновляется нерегулярно, и если необходимо наблюдать за действиями бота, правильнее предусмотреть ведение логов в виде специального файла.
Чтобы убедиться, что бот запущен, надо использовать следующую команду:
ps -ax | grep python
Она выведет что-то подобное:
6152 pts/0 S 0:00 python telebot.py
6154 pts/0 S+ 0:00 grep python
Если в выводе есть “python telebot.py”, значит, он запущен.
При изменениях в коде бота, перед запуском новой версии необходимо сначала завершить уже работающего бота следующей командой:
kill 6152
, где 6152 – это номер процесса, который есть в выводе команды “ps -ax | grep python”.
Настройка завершена. Надеемся, что руководство было вам полезно.
здравствуйте! все установки делал по вашей статье, все вроде понятно что и как… но вроде мелочь а не понятно где изменить “PermitRootLogin yes” толи печатать толи клавишами….тк я новичок то так и не понял изменил я там в итоге или нет, и в конце где описано как загружать файлы для питона описано только для виндоус а для iOS ничего не сказано….
2022-10-03 at 18:01Крутая статья!
2023-02-14 at 16:47спасибо!!!! оч круто!
2023-04-16 at 10:15поправьте команду
2023-08-03 at 11:55apt install -y fail2ban
sudo не хватает
а то такие, как я вашу техподдержку задёргают
Спасибо, поправили.
2023-08-21 at 12:47