| instagram-downloader | ||
| vk-downloader | ||
| yapfiles-downloader | ||
| youtube-downloader | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| ARCHITECTURE.md | ||
| bot.py | ||
| docker-compose.yml | ||
| Dockerfile | ||
| get_cookies.sh | ||
| get_cookies_local.sh | ||
| README.md | ||
| requirements.txt | ||
Telegram Video Download Bot
Telegram бот для скачивания видео с YouTube, Instagram и VK. Микросервисная архитектура с раздельными сервисами для каждого источника.
Архитектура
Проект разделен на микросервисы:
- Основной бот (в корне проекта) - Telegram бот, обрабатывает сообщения и оркестрирует запросы к сервисам
- youtube-downloader - сервис для скачивания с YouTube (порт 5557)
- instagram-downloader - сервис для скачивания с Instagram (порт 5556)
- vk-downloader - сервис для скачивания с VK (порт 5555)
Каждый сервис работает в отдельном Docker контейнере и может быть развернут независимо.
Возможности
- 📹 Скачивание видео с YouTube
- 📸 Скачивание видео с Instagram (требуются cookies)
- 🎬 Скачивание видео с VK
- 📊 Статистика скачанных видео и пользователей
- 🔄 Автоматическое сохранение статистики в базу данных
- 👥 Работа в группах с автоматическим обнаружением ссылок
Требования
- Docker и Docker Compose
- Telegram Bot Token (получить у @BotFather)
- Для Instagram: файл с cookies (см. раздел Instagram ниже)
Быстрый старт
1. Клонирование репозитория
git clone <repository_url>
cd videoDownloadBot
2. Настройка переменных окружения
Скопируйте .env.example в .env в корне проекта и заполните:
cp .env.example .env
nano .env # или используйте любой редактор
Необходимые переменные:
TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here
TELEGRAM_BOT_USERNAME=your_bot_username
# Downloader Services URLs
# Для локальной разработки через docker-compose используются внутренние имена сервисов
YOUTUBE_DOWNLOADER_URL=http://youtube-downloader:5000
INSTAGRAM_DOWNLOADER_URL=http://instagram-downloader:5000
VK_DOWNLOADER_URL=http://vk-downloader:5000
- TELEGRAM_BOT_TOKEN — токен бота от @BotFather
- TELEGRAM_BOT_USERNAME — username бота (без @), используется в подписи видео
- YOUTUBE_DOWNLOADER_URL — URL YouTube сервиса (для docker-compose:
http://youtube-downloader:5000, для продакшена:http://<ip>:5557) - INSTAGRAM_DOWNLOADER_URL — URL Instagram сервиса (для docker-compose:
http://instagram-downloader:5000, для продакшена:http://<ip>:5556) - VK_DOWNLOADER_URL — URL VK сервиса (для docker-compose:
http://vk-downloader:5000, для продакшена:http://<ip>:5555)
3. Настройка Instagram (опционально)
Если планируете скачивать видео с Instagram:
- Экспортируйте cookies из браузера (см.
instagram-downloader/INSTAGRAM_COOKIES_INSTRUCTIONS.md) - Сохраните файл как
instagram_cookies.txtв папкеinstagram-downloader/ - Формат: Netscape cookies file
Быстрое получение cookies через скрипт:
cd instagram-downloader
./get_instagram_cookies.sh
Или обновление существующих cookies:
cd instagram-downloader
./update_instagram_cookies.sh
Примечание: Без cookies Instagram может блокировать запросы. При первом запуске обновите cookies вручную.
4. Запуск сервисов
Важно: Каждый сервис запускается отдельно на своем хосте (или на одном хосте, но отдельными командами).
Запуск основного бота
# Из корня проекта
docker compose up -d
Это запустит только основной Telegram бот.
Запуск сервисов загрузчиков
Каждый сервис запускается отдельно в своей папке:
# Запуск YouTube сервиса (порт 5557)
cd youtube-downloader
docker compose up -d
# Запуск Instagram сервиса (порт 5556)
cd ../instagram-downloader
docker compose up -d
# Запуск VK сервиса (порт 5555)
cd ../vk-downloader
docker compose up -d
Порядок запуска: Сначала запустите сервисы загрузчиков, затем основной бот.
Раздельное развертывание на разных хостах (рекомендуется для продакшена)
Хост 1 (с VPN для YouTube/Instagram):
- YouTube сервис (порт 5557)
- Instagram сервис (порт 5556)
- Основной бот
Хост 2 (без VPN для VK):
- VK сервис (порт 5555)
В .env файле в корне проекта на хосте 1 укажите IP адреса сервисов:
YOUTUBE_DOWNLOADER_URL=http://localhost:5557
INSTAGRAM_DOWNLOADER_URL=http://localhost:5556
VK_DOWNLOADER_URL=http://<ip_хоста_2>:5555
5. Проверка статуса
Проверить статус сервисов:
# Основной бот (из корня проекта)
docker compose ps
# Сервисы загрузчиков (из соответствующих папок)
cd youtube-downloader && docker compose ps
cd ../instagram-downloader && docker compose ps
cd ../vk-downloader && docker compose ps
Просмотр логов:
# Основной бот (из корня проекта)
docker compose logs -f bot
# Сервисы загрузчиков (из соответствующих папок)
cd youtube-downloader && docker compose logs -f
cd ../instagram-downloader && docker compose logs -f
cd ../vk-downloader && docker compose logs -f
Использование
- Найдите вашего бота в Telegram по username
- Отправьте команду
/start - Отправьте ссылку на видео (YouTube, Instagram или VK)
- Дождитесь скачивания и получите файл
Работа в группах
Добавьте бота в группу и дайте ему права администратора (нужно право на удаление сообщений). После этого бот будет автоматически находить ссылки на видео в сообщениях участников, скачивать их и отправлять прямо в группу, заменяя исходное сообщение со ссылкой.
Команды
/start— начало работы с ботом/stat— статистика: количество пользователей и скачанных видео
Структура проекта
videoDownloadBot/
├── bot.py # Код основного Telegram бота
├── requirements.txt # Python зависимости бота
├── Dockerfile # Образ для бота
├── docker-compose.yml # Оркестратор всех сервисов
├── .env.example # Пример конфигурации
├── youtube-downloader/ # Сервис для YouTube
│ ├── app.py # Flask API сервис
│ ├── requirements.txt # Python зависимости
│ ├── Dockerfile # Образ для YouTube сервиса
│ └── docker-compose.yml # Конфигурация YouTube сервиса
├── instagram-downloader/ # Сервис для Instagram
│ ├── app.py # Flask API сервис
│ ├── requirements.txt # Python зависимости
│ ├── Dockerfile # Образ для Instagram сервиса
│ ├── docker-compose.yml # Конфигурация Instagram сервиса
│ ├── instagram_cookies.txt # Cookies для Instagram (создать вручную)
│ ├── get_instagram_cookies.sh # Скрипт для получения cookies
│ ├── update_instagram_cookies.sh # Скрипт для обновления cookies
│ ├── INSTAGRAM_COOKIES_INSTRUCTIONS.md # Инструкции по cookies
│ └── README.md # Документация сервиса
├── vk-downloader/ # Сервис для VK
│ ├── app.py # Flask API сервис
│ ├── requirements.txt # Python зависимости
│ ├── Dockerfile # Образ для VK сервиса
│ └── docker-compose.yml # Конфигурация VK сервиса
└── README.md # Этот файл
Порты сервисов
- Основной бот: не требует внешних портов (работает через Telegram API)
- YouTube Downloader: порт 5557
- Instagram Downloader: порт 5556
- VK Downloader: порт 5555
API Endpoints
Все сервисы загрузчиков предоставляют одинаковый API:
GET /health- проверка здоровья сервисаPOST /download/stream- скачивание видео (возвращает бинарные данные)
Пример запроса:
POST /download/stream
Content-Type: application/json
{
"url": "https://youtube.com/watch?v=..."
}
Обновление
git pull
# Пересобрать и перезапустить основной бот (из корня проекта)
docker compose build && docker compose up -d
# Пересобрать и перезапустить каждый сервис загрузчика отдельно
cd youtube-downloader && docker compose build && docker compose up -d
cd ../instagram-downloader && docker compose build && docker compose up -d
cd ../vk-downloader && docker compose build && docker compose up -d
Остановка
# Остановить основной бот (из корня проекта)
docker compose down
# Остановить каждый сервис загрузчика отдельно
cd youtube-downloader && docker compose down
cd ../instagram-downloader && docker compose down
cd ../vk-downloader && docker compose down
Развертывание на продакшене
Вариант 1: Все на одном хосте (с VPN)
- Настройте VPN для доступа к YouTube и Instagram
- Запустите каждый сервис отдельно в своей папке
- В
.envв корне проекта укажите:http://localhost:5557,http://localhost:5556,http://localhost:5555
Вариант 2: Раздельное развертывание (рекомендуется)
Хост 1 (с VPN):
- Основной бот
- YouTube сервис
- Instagram сервис
- В
.envв корне:YOUTUBE_DOWNLOADER_URL=http://localhost:5557,INSTAGRAM_DOWNLOADER_URL=http://localhost:5556,VK_DOWNLOADER_URL=http://<ip_хоста_2>:5555
Хост 2 (без VPN):
- VK сервис
- В
.envcorebot на хосте 1: IP этого хоста
Преимущества:
- VK работает быстрее без VPN
- Меньше нагрузка на VPN канал
- Возможность масштабирования сервисов отдельно
Troubleshooting
Бот не отвечает
- Проверьте логи:
docker compose logs bot - Убедитесь, что токен правильный в
.env - Проверьте, что все сервисы запущены и доступны
YouTube/Instagram/VK не работает
- Проверьте, что соответствующий сервис запущен:
docker compose ps - Проверьте URL в
.envcorebot - Проверьте логи сервиса:
docker compose logs -f - Для Instagram: проверьте наличие и валидность
instagram-downloader/instagram_cookies.txt
База данных не сохраняется
- Проверьте права на папку
data/в корне проекта - Убедитесь, что volume смонтирован в
docker-compose.yml
Лицензия
MIT
Поддержка
При возникновении проблем создайте issue в репозитории.