1 minute read

И-за того, что Youtube стал блочить запросы к его API из РФ, youtube_transcript_bot сломался. Рабочим вариантом в процессе отладки оказалось банальное использование VPN. После некоторых попыток прикрутить vpn к контейнеру было решено перенести приложение на обычную виртуальную машину (ВМ).

Далее, что было сделано.

Поставим питон на ВМ

sudo dnf update
sudo dnf install -y python3.12

Так как в быту я пользуюсь adGuard VPN, и у них есть клиент для linux, то далее установим adGuard for linux по официальной инструкции.

sudo -s
curl -fsSL https://raw.githubusercontent.com/AdguardTeam/AdGuardVPNCLI/master/scripts/release/install.sh -o /root/adguard.sh
chmod +x /root/adguard.sh
/root/adguard.sh

Скрипт чуть-чуть пошуршит, после установки бинарник AdGuard VPN CLI будет доступен в /opt/adguardvpn_cli/adguardvpn-cli

Бот будет запускаться под отдельным пользователем, создаем его, настраиваем виртуальное окружение и подгружаем необходимые библиотеки для работы.

sudo useradd -m -s /bin/bash youtube_transcript_bot
su youtube_transcript_bot
python3.12 -m venv ~/venv
venv/bin/pip install --no-cache-dir -f requirements.txt

Создаем в домашнем каталоге бота папку app и копируем в нее файлы приложения, не забывая выставить соответствующие права (chown) на файлы.

Создаем два системных сервиса. Первый для VPN, второй - запуск приложения.
Сервис /etc/systemd/system/adguard-vpn.service. В /etc/adguard.conf хранится логин и пароль для авторизации. Вторая команда поднимает туннель до ближайшего сервера с минимальным latency.

[Unit]
Description=AdGuard VPN Connection
After=network.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'source /etc/adguard.conf \
    && /opt/adguardvpn_cli/adguardvpn-cli login -u "$VPN_USER" -p "$VPN_PASS" \
    && /opt/adguardvpn_cli/adguardvpn-cli connect -y'
ExecStop=/opt/adguardvpn_cli/adguardvpn-cli disconnect
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

Сервис /etc/systemd/system/youtube-transcript-bot.service. Зависит и запускается после adguard-vpn.service. Если упал, поднимается всегда.

[Unit]
Description=Youtube Transcript Bot
After=adguard-vpn.service
Requires=adguard-vpn.service

[Service]
User=youtube_transcript_bot
WorkingDirectory=/home/youtube_transcript_bot/app
ExecStart=/bin/bash -c "source /home/youtube_transcript_bot/venv/bin/activate && exec python telegram_bot.py"
Restart=always

[Install]
WantedBy=multi-user.target

И стандартный набор для автозапуска

sudo systemctl daemon-reload
sudo systemctl enable adguard-vpn
sudo systemctl start adguard-vpn

Аналогичные команды с youtube-transcript-bot.service. Готово!

Tags: ,

Updated: