- Разделение на микросервисы: youtube-downloader, instagram-downloader, vk-downloader - Основной бот в корне проекта, работает через HTTP API с сервисами - Каждый сервис запускается отдельно в своей папке - Видео сохраняются в папке video/ и не удаляются - Обновлена документация и архитектура - Скрипты для Instagram cookies перенесены в instagram-downloader/
314 lines
13 KiB
Markdown
314 lines
13 KiB
Markdown
# 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](https://t.me/BotFather))
|
||
- Для Instagram: файл с cookies (см. раздел Instagram ниже)
|
||
|
||
## Быстрый старт
|
||
|
||
### 1. Клонирование репозитория
|
||
|
||
```bash
|
||
git clone <repository_url>
|
||
cd videoDownloadBot
|
||
```
|
||
|
||
### 2. Настройка переменных окружения
|
||
|
||
Скопируйте `.env.example` в `.env` в корне проекта и заполните:
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
nano .env # или используйте любой редактор
|
||
```
|
||
|
||
**Необходимые переменные:**
|
||
|
||
```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:
|
||
|
||
1. Экспортируйте cookies из браузера (см. `instagram-downloader/INSTAGRAM_COOKIES_INSTRUCTIONS.md`)
|
||
2. Сохраните файл как `instagram_cookies.txt` в папке `instagram-downloader/`
|
||
3. Формат: Netscape cookies file
|
||
|
||
**Быстрое получение cookies через скрипт:**
|
||
|
||
```bash
|
||
cd instagram-downloader
|
||
./get_instagram_cookies.sh
|
||
```
|
||
|
||
Или обновление существующих cookies:
|
||
|
||
```bash
|
||
cd instagram-downloader
|
||
./update_instagram_cookies.sh
|
||
```
|
||
|
||
**Примечание:** Без cookies Instagram может блокировать запросы. При первом запуске обновите cookies вручную.
|
||
|
||
### 4. Запуск сервисов
|
||
|
||
**Важно:** Каждый сервис запускается отдельно на своем хосте (или на одном хосте, но отдельными командами).
|
||
|
||
#### Запуск основного бота
|
||
|
||
```bash
|
||
# Из корня проекта
|
||
docker compose up -d
|
||
```
|
||
|
||
Это запустит только основной Telegram бот.
|
||
|
||
#### Запуск сервисов загрузчиков
|
||
|
||
Каждый сервис запускается отдельно в своей папке:
|
||
|
||
```bash
|
||
# Запуск 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 адреса сервисов:
|
||
```env
|
||
YOUTUBE_DOWNLOADER_URL=http://localhost:5557
|
||
INSTAGRAM_DOWNLOADER_URL=http://localhost:5556
|
||
VK_DOWNLOADER_URL=http://<ip_хоста_2>:5555
|
||
```
|
||
|
||
### 5. Проверка статуса
|
||
|
||
Проверить статус сервисов:
|
||
|
||
```bash
|
||
# Основной бот (из корня проекта)
|
||
docker compose ps
|
||
|
||
# Сервисы загрузчиков (из соответствующих папок)
|
||
cd youtube-downloader && docker compose ps
|
||
cd ../instagram-downloader && docker compose ps
|
||
cd ../vk-downloader && docker compose ps
|
||
```
|
||
|
||
Просмотр логов:
|
||
|
||
```bash
|
||
# Основной бот (из корня проекта)
|
||
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
|
||
```
|
||
|
||
## Использование
|
||
|
||
1. Найдите вашего бота в Telegram по username
|
||
2. Отправьте команду `/start`
|
||
3. Отправьте ссылку на видео (YouTube, Instagram или VK)
|
||
4. Дождитесь скачивания и получите файл
|
||
|
||
### Работа в группах
|
||
|
||
Добавьте бота в группу и дайте ему права администратора (нужно право на удаление сообщений). После этого бот будет автоматически находить ссылки на видео в сообщениях участников, скачивать их и отправлять прямо в группу, заменяя исходное сообщение со ссылкой.
|
||
|
||
### Команды
|
||
|
||
- `/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` - скачивание видео (возвращает бинарные данные)
|
||
|
||
Пример запроса:
|
||
```json
|
||
POST /download/stream
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"url": "https://youtube.com/watch?v=..."
|
||
}
|
||
```
|
||
|
||
## Обновление
|
||
|
||
```bash
|
||
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
|
||
```
|
||
|
||
## Остановка
|
||
|
||
```bash
|
||
# Остановить основной бот (из корня проекта)
|
||
docker compose down
|
||
|
||
# Остановить каждый сервис загрузчика отдельно
|
||
cd youtube-downloader && docker compose down
|
||
cd ../instagram-downloader && docker compose down
|
||
cd ../vk-downloader && docker compose down
|
||
```
|
||
|
||
## Развертывание на продакшене
|
||
|
||
### Вариант 1: Все на одном хосте (с VPN)
|
||
|
||
1. Настройте VPN для доступа к YouTube и Instagram
|
||
2. Запустите каждый сервис отдельно в своей папке
|
||
3. В `.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 сервис
|
||
- В `.env` corebot на хосте 1: IP этого хоста
|
||
|
||
**Преимущества:**
|
||
- VK работает быстрее без VPN
|
||
- Меньше нагрузка на VPN канал
|
||
- Возможность масштабирования сервисов отдельно
|
||
|
||
## Troubleshooting
|
||
|
||
### Бот не отвечает
|
||
- Проверьте логи: `docker compose logs bot`
|
||
- Убедитесь, что токен правильный в `.env`
|
||
- Проверьте, что все сервисы запущены и доступны
|
||
|
||
### YouTube/Instagram/VK не работает
|
||
- Проверьте, что соответствующий сервис запущен: `docker compose ps`
|
||
- Проверьте URL в `.env` corebot
|
||
- Проверьте логи сервиса: `docker compose logs -f`
|
||
- Для Instagram: проверьте наличие и валидность `instagram-downloader/instagram_cookies.txt`
|
||
|
||
### База данных не сохраняется
|
||
- Проверьте права на папку `data/` в корне проекта
|
||
- Убедитесь, что volume смонтирован в `docker-compose.yml`
|
||
|
||
## Лицензия
|
||
|
||
MIT
|
||
|
||
## Поддержка
|
||
|
||
При возникновении проблем создайте issue в репозитории.
|