Данная статья рассматривает запуск Python-бота на VDS-сервере с Ubuntu 18.04. В статье опишем установку и настройку необходимых компонентов, а также создание службы systemd для непрерывной работы бота.
Первым шагом необходимо установить git для удобной работы с проектами:
apt install git
Далее настроим SSH-ключ по статье "Как настроить SSH-ключ для GitHub", чтобы иметь возможность подключаться к удаленному репозиторию.
В Ubuntu 18.04 по умолчанию стоит Python 3.6.9. Поскольку наш бот написан на версии 3.9, то выполним ее установку.
Импортируем репозиторий:
add-apt-repository ppa:deadsnakes/ppa
Далее обновим все пакеты:
apt update
Выполним установку Python 3.9 командой:
apt install python3.9
И проверим его версию:
python3.9 -V
Она должна быть 3.9.16, как показано на скриншоте:
Однако предыдущая версия 3.6.9 по-прежнему доступна, и при запуске команд с использованием Python 3 будет использоваться именно она, а нам нужна более новая версия. Чтобы изменить интерпретатор по умолчанию, необходимо сначала проверить, какие версии Python уже используются в системе, для указания корректных путей далее по инструкции, выполнив эту команду:
ls /usr/bin/python*
Результат выполненной команды представлен ниже:
Для использования новой версии 3.9.16 вместо 3.6.9 добавим альтернативы:
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2
Проверим результат выполненных команд:
update-alternatives --list python3
Для настройки выбора версии выполним команду config:
update-alternatives --config python3
И в запросе укажем номер интерпретатора Python, который будет использоваться по умолчанию, как показано на скриншоте:
Теперь для команды Python3 будет всегда использоваться версия 3.9.16. Проверим ее:
python3 -V
Вывод работы команды представлен на скриншоте ниже:
Установим pip3 при помощи следующей команды:
apt install python3-pip
И дополнительно пакет "python3.9-distutils":
apt install python3.9-distutils
Установим виртуальное окружение:
apt install virtualenv
Дополнительно установим venv lib для Python 3.9
apt install python3.9-dev python3.9-venv
В целях безопасности для запуска нашего бота создадим нового пользователя:
useradd -m PYbot
Зададим ему пароль:
passwd PYbot
Добавим нашего пользователя с именем "PYbot" в группу "sudo":
usermod -aG sudo PYbot
Проверим, что пользователь "PYbot" принадлежит группе "sudo":
groups PYbot
После создания нового пользователя необходимо перезайти на VDS-сервер под созданной учеткой.
Далее в корень папки PYbot склонируем свой репозиторий при помощи команды:
git clone git@github.com:Deimos715/python-bot.git
Перейдем в папку "python-bot":
cd python-bot
Добавим в наш проект виртуальное окружение:
python3 -m venv venv
Выполним его активацию:
source venv/bin/activate
Если необходимо выполнить его деактивацию, команда будет следующей:
deactivate
Импортируем все зависимости нашего проекта из файла requirements.txt:
pip3 install -r requirements.txt
Наш бот почти установлен, запускаем его:
python3 bot.py
Хотя бот будет функционировать, он перестанет отвечать после завершения сеанса работы с VDS-сервером. Чтобы решить эту проблему, мы воспользуемся системой инициализации systemd, которая широко используется в дистрибутивах Linux. Если вам интересно узнать больше о systemd, вы можете изучить наши статьи "Как создавать файлы модулей systemd" и "Как работать с systemd".
Для обеспечения непрерывной работы бота и автоматического перезапуска в случае сбоя, мы создадим специальную службу:
sudo nano /lib/systemd/system/bot.service
Со следующими настройками:
[Unit]
Description=python-bot
After=network.target
[Service]
Type=simple
User=PYbot
ExecStart=/PYbot/python-bot/venv/bin/python3 /PYbot/python-bot/bot.py
ExecReload=/PYbot/python-bot/bot.py
WorkingDirectory=/PYbot/python-bot/
KillMode=process
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Описание важных строек службы:
- Description — описание службы.
- User — пользователь из-под которого запущена служба.
- ExecStart и ExecReload — это команды для запуска и перезапуска бота.
- WorkingDirectory — путь к папке в которой файл запуска bot.py.
Для запуска службы выполним 2 команды:
sudo systemctl enable bot.service
sudo systemctl start bot.service
После запуска наш бот будет функционировать без перерыва даже после закрытия терминала. Кроме того, после перезагрузки системы бот автоматически запустится через 5 секунд в соответствии с параметром RestartSec.
Для проверки статусов и логов можно выполнить следующие команды:
systemctl status bot.service
journalctl -u bot.service
Для того чтобы показать последние 10 записей из журнала, можно использовать команду journalctl с опцией -u для указания имени службы и опцией -n для указания количества записей:
journalctl -u bot.service -n 10
Если необходимо следить за новыми записями в реальном времени (аналогично команде tail -f), можно использовать опцию -f:
journalctl -u bot.service -f
Для очистки журнала можно выполнить команду:
sudo journalctl --vacuum-size=0