videoDownloadTGbot/cookies-cron/README.md
vrubelroman 772e9fd5b4
All checks were successful
CI/CD Pipeline / build-and-deploy (push) Successful in 1m47s
chore: remove obsolete per-folder scripts, add cookies-cron reference, update docs
- Remove get_cookies.sh (targets a container without yt-dlp, already
  broken), get_cookies_local.sh, start_all.sh/stop_all.sh — these
  implement the old per-service-compose startup that now conflicts
  with the unified root docker-compose.yml.
- Add cookies-cron/ — a reference copy of the scripts actually running
  via cron on the separate browser-equipped machine, with setup
  requirements and instructions for standing up a new cron host.
- Update README.md/ARCHITECTURE.md to describe the current unified
  docker-compose + CI/CD deploy flow and host-mounted cookies instead
  of the old per-folder workflow.
2026-06-30 22:16:40 +00:00

4.8 KiB
Raw Blame History

cookies-cron

Скрипты для регулярного обновления youtube_cookies.txt/instagram_cookies.txt из реального авторизованного браузера и доставки их по scp на прод и тестовые стенды.

Это точная копия скриптов, которые сейчас реально работают по крону на отдельной машине (не на проде — на проде GUI/браузера нет в принципе). Здесь они лежат для справки и на случай, если cron-машину придётся поднимать заново. Ничего в этом репозитории/CI их не запускает и не использует автоматически.

Где это должно стоять и работать

  • Машина с графическим окружением и реальным браузером (используется Firefox, см. BROWSER="firefox" в обоих скриптах) — обычный десктоп/ноутбук, не сервер.
  • В этом браузере должны быть активные авторизованные сессии на youtube.com и на instagram.com — скрипты не логинятся сами, они просто экспортируют куки из уже залогиненного браузера через yt-dlp --cookies-from-browser. Если сессии нет (вышел из аккаунта/куки протухли) — экспортируется пустой/неполный набор куков, и видео с этими доменами перестают скачиваться (в Instagram это проявляется как login required без всякой ошибки в самом cron-скрипте).
  • На машине должен быть установлен yt-dlp и доступен в PATH для cron-окружения (не только для интерактивного шелла — у cron urezанный PATH). Скрипты исторически не проверяют, что yt-dlp реально нашёлся и отработал — при отсутствии yt-dlp они тихо «успешно завершаются», просто переиспользуя старый файл cookies. Если куки на проде не обновляются неделями без видимых ошибок — первым делом проверьте which yt-dlp на cron-машине.

Файлы

  • get_instagram_cookies.sh / get_youtube_cookies.sh — извлекают куки из Firefox в локальные instagram_cookies.txt/youtube_cookies.txt рядом со скриптом.

  • update_cookies.sh — оркестратор: гоняет оба скрипта выше, затем разливает результат по scp на:

    • прод (REMOTE_HOST/REMOTE_INSTAGRAM_PATH/REMOTE_YOUTUBE_PATH) — обязательный шаг, при ошибке скрипт падает с error_exit;
    • тестовый стенд (DEV_HOST/DEV_INSTAGRAM_PATH/DEV_YOUTUBE_PATH) — необязательный, при недоступности стенда просто пишет warning и продолжает.

    Значения этих переменных сейчас захардкожены под текущую инфраструктуру (SSH-алиасы germany/hermesDev из ~/.ssh/config той машины, где крон запущен) — при разворачивании на новой cron-машине их нужно поправить под актуальные хосты/пути.

Установка на новую cron-машину

# 1. yt-dlp должен быть в PATH (включая cron-окружение)
sudo dnf install -y yt-dlp   # или: pip install --user yt-dlp / pipx install yt-dlp

# 2. Залогиниться в Firefox на youtube.com и instagram.com

# 3. Прописать актуальные REMOTE_HOST/DEV_HOST и пути в update_cookies.sh

# 4. Добавить в crontab
*/20 * * * * /bin/bash -c '/path/to/cookies-cron/update_cookies.sh' >> /path/to/cookies-cron/cron_error.log 2>&1

На принимающей стороне (прод и тестовый стенд) cookies монтируются в контейнеры с хоста — см. docker-compose.prod.yml/docker-compose.yml и раздел «Cookies на проде» в корневом README.md. Перезапуск контейнеров после доставки не требуется — yt-dlp читает файл с диска при каждом запросе.