Appearance
Публикация aiogram бота на VPS
Выбор сервера
В этой статье развернём на сервере бота написанного в предыдущей статье. Демонстрация работы бота @bestserver_calculator_bot
Для запуска aiogram нужен либо выделенный, либо виртуальный сервер с любым linux дистрибутивом.
Если вы читаете эту статью вероятнее всего вам будет достаточно виртуального, он же VPS. Приобретение виртуального сервера позволяет начать с маленьких мощностей (платить меньше денег) и переезжать по более производительную конфигурацию по мере роста приложения без переезда на другой сервер и с минимальными потерями времени (только reboot сервера).
Для начала достаточно будет конфигурации с 1Гб оперативной памяти и 1 ядром процессора. Можете арендовать самый дешёвый у Timeweb или поискать в каталоге
Приобретение сервера
В данной статье для примера приобретём виртуальный сервер в Timeweb Cloud. Операционную систему использовать Ubuntu 24, так как этот дистрибутив один из самых популярных.
Переходим на сайт Timeweb и регистрируем аккаунт. Закидываем на баланс желаемую сумму, не обязательно оплачивать сразу за целый месяц.
Затем переходим на страницу создания виртуального сервера и нажимаем кнопку Создать
Операционную систему выбираем самую свежую Ubuntu
Регион выбираем Санкт-Петербург. В нём доступна конфигурация Standart. Выбираем её и затем самый дешёвый тариф с 1 ядром процессора и 1 ГБ оперативной памяти. 
В разделе Сеть оставляем Публичный IPv4. В теории если ваш провайдер поддерживает v6, то от него можно отказаться, но выходит за рамки данной статьи. 
Бэкапы можем отключить если хотим сэкономить немного денег. Но вообще желательно их делать если на сервере есть ценные данные. 
Тут же можно указать ключ для подключения к ssh, но это так же выходит за рамки данной статьи.
Имя сервера указываем на свой вкус и нажимаем кнопку Заказать. 
После создания данные для подключения к нему можно будет скопировать на странице сервера. 
Подключение к серверу
Чтобы подключиться к серверу нужно знать ip адрес сервера, логи и пароль. Эти данные можно получить в панели управления после покупки сервера либо некоторые хостеры присылают их на электронную почту.
Открывает терминал. На Windows это cmd. Удобнее всего открыть его сразу в PyCharm сочетанием Ctrl+F12, но можно и отельное окно запустить.
В терминале вводим следующую команду и нажимаем Enter. IP адрес заменяем на свой.
shell
ssh root@213.171.8.164На вопрос о сохранение ключа отвечаем yes и Enter. 
Затем вводим пароль или вставляем пароль и снова нажимаем Enter. После успешного ввода можем выполнять команды на нашем сервере. 
Настройка окружения
Первым делом рекомендуется обновить на сервере все кэш программ и все уже установленные программы. Для это вбиваем в терминал команды
shell
apt update
apt upgradeЗатем устанавливаем Python
shell
apt install python3-venvЗатем создаём папку для нашего бота и переходим в неё
shell
mkdir -p /www/calculator-bot
cd /www/calculator-botСоздаём виртуальное окружение
shell
python3 -m venv .venvПроверяем что питон установился следующей командой.
shell
./.venv/bin/python --versionДолжна отобразиться версия питона. Для работы aiogram она должна быть не меньше 3.8.
Загрузка файлов бота
Файлы на сервер можно удобно копировать используя встроенный в PyCharm плагин Remote Server (но он доступен только в платной версии). Либо установить бесплатный плагин Source Synchronizer Так же можно настроить автодеплой через git репозиторий, но всё это выходи за рамки данной статьи.
Мы поступим проще, и скопируем файлы через ssh. (Выполнять нужно в новом терминале на своём компьютере)
shell
scp ./* root@213.171.8.164:/www/calculator-bot
# или можно скопритьва все файлы из папки
scp ./* root@213.171.8.164:/www/calculator-botУстановка зависимостей
В ранее открытом ранее терминале (на сервере) выполняем команду для установки зависимостей
shell
./.venv/bin/pip install -r requirements.txtПроверка работы бота
Теперь всё готово. Запускаем командой
shell
./.venv/bin/python3 main.pyПроверяем что бот в телеграме работает: 
Настройка автозапуска
Бот запущенный просто в терминале перестанет работать после отключения от сервера. Красивым способом будет настроить systemd для запуска нашего бота. Это позволит ему продолжить работу после перезагрузки сервера. Советчиков рекомендующих использовать nohup или screen слушать не стоит.
Открываем текстовый редактор:
shell
nano /etc/systemd/system/calculator-bot.serviceВставляем туда следующий текст:
systemd
[Unit]
Description=Calculator Bot Service
After=network.target
[Service]
Restart=always
Type=simple
WorkingDirectory=/www/calculator-bot
ExecStart=/www/calculator-bot/.venv/bin/python3 main.py
[Install]
WantedBy=multi-user.targetСохраняем (Ctrl+S) и выходим из редактора (Ctrl+X).
Активируем и запускаем сервис:
shell
systemctl enable calculator-bot.service
service calculator-bot startПроверить что сервис работает можно командой:
shell
service calculator-bot statusПовышение безопасности
Запуск бота на сервер от имени root пользователя не является безопасным. Взлом бота даст злоумышленнику полный доступ к серверу. Поэтому создадим нового пользователя с ограниченными правами и будем запускать бота от его имени.
Создадим нового пользователя на сервере командой:
shell
useradd calculator-botСделаем его владельцем папки с ботом:
shell
chown calculator-bot /www/calculator-botОткроем файл сервиса на редактирование:
shell
nano /etc/systemd/system/calculator-bot.serviceИ в раздел [Service] добавим строку
systemd
[Service]
User=calculator-botОбновим конфигурацию сервиса и перезапустим его:
shell
systemctl daemon-reload
service calculator-bot restartВсё, мы молодцы 😃
