Skip to content

lukinism/VK2TG

Repository files navigation

VK2TG POST

Python FastAPI React Vite Storage License Status

Переносите посты из VK в Telegram через современную админку, с шифрованием токенов, историей переносов и простым файловым хранилищем без SQL-базы.

Возможности

  • Мониторинг нескольких сообществ VK из одной админки
  • Перенос текста, фото, документов, ссылок, музыки и доступных видео-вложений в Telegram
  • Настройка того, что именно переносить, отдельно для каждого источника
  • Поддержка открытых стен и постов подписчиков
  • Защита от повторной отправки уже обработанных постов
  • История переносов со статусами, попытками и подробными ошибками
  • Просмотр и очистка кэша вложений из интерфейса
  • Автоматическая очистка кэша после успешной отправки
  • Настройка proxy через админку
  • Ручной запуск проверки, очистка очереди и просмотр логов без доступа к серверу

Технологии

  • Backend: FastAPI
  • Frontend: React + Vite + TypeScript
  • Хранилище: JSON / JSONL
  • Обработка медиа: ffmpeg
  • Авторизация: session auth для админки, HTTP Basic для API
  • Секреты: локальное шифрование при хранении

Как это выглядит в работе

В React-админке есть следующие разделы:

  • Дашборд
  • Источники
  • Переносы
  • Кэш
  • Логи
  • Настройки

Типовой сценарий использования:

  1. Войти в админку
  2. Добавить источник VK
  3. Выбрать, что именно переносить из постов
  4. Указать Telegram-назначение и токены интеграций
  5. Запустить проверку вручную или оставить polling-воркер работать по расписанию
  6. При необходимости посмотреть историю, логи и кэш

Гибкая настройка источников

Для каждого источника можно отдельно выбрать, что именно переносить:

  • текст
  • картинки
  • видео
  • музыку
  • документы
  • ссылки

Дополнительно можно включать и выключать:

  • подпись источника
  • ссылку на оригинальный пост
  • дату оригинальной публикации
  • репосты
  • посты подписчиков на открытой стене

Это позволяет использовать один сервис сразу для нескольких Telegram-каналов с разными правилами публикации.

Быстрый старт

1. Клонирование репозитория

git clone https://github.com/lukinism/VK2TG.git
cd VK2TG

2. Создание .env

cp .env.example .env

Минимальный пример:

ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin
ADMIN_PASSWORD_HASH=
SESSION_SECRET=change-me-please
POLL_INTERVAL_SECONDS=300
RETRY_LIMIT=3
FFMPEG_BINARY=ffmpeg
DATA_DIR=data
CACHE_DIR=data/cache
LOG_LEVEL=INFO

Запуск в Docker

Если нужен самый простой production-like запуск без ручной установки Python, Node.js и ffmpeg, можно использовать Docker.

1. Подготовьте .env

cp .env.example .env

Заполните хотя бы:

ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin
SESSION_SECRET=change-me-please
POLL_INTERVAL_SECONDS=300
RETRY_LIMIT=3
DATA_DIR=data
CACHE_DIR=data/cache
LOG_LEVEL=INFO

Токены VK и Telegram по-прежнему можно добавить потом через админку.

2. Сборка и запуск

docker compose up -d --build

После запуска сервис будет доступен по адресам:

3. Остановка

docker compose down

4. Обновление после изменений

docker compose up -d --build

Что важно

  • React-админка собирается прямо внутри Docker-образа
  • ffmpeg уже устанавливается в контейнер автоматически
  • Все данные сохраняются в локальную папку data/
  • Для проверки статуса контейнера используется healthcheck на GET /api/health

Запуск backend

Windows

py -3.14 -m venv .venv
.venv\Scripts\activate
python -m pip install --upgrade pip
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000 --reload

Linux

Установите Python 3.14, venv и ffmpeg, затем:

python3.14 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000

Если ffmpeg ещё не установлен:

sudo apt-get update
sudo apt-get install -y ffmpeg

Запуск frontend

Админка лежит в каталоге frontend/.

Режим разработки

Сначала запустите backend, затем во frontend:

cd frontend
npm install
npm run dev

Открывать:

Vite автоматически проксирует /api на FastAPI на порту 8000.

Production-сборка

cd frontend
npm install
npm run build

После сборки FastAPI сам начнёт отдавать фронтенд по адресу:

Первый запуск

После старта приложения:

  1. Откройте админку
  2. Войдите с логином и паролем из .env
  3. Перейдите в Настройки
  4. Укажите:
  • VK token
  • Telegram bot token
  • Telegram proxy, если Telegram в вашей стране недоступен напрямую
  • FFmpeg binary, если нужен нестандартный путь

После этого можно добавлять источники и запускать перенос.

API

Маршрут GET /api/health открыт для проверки доступности.

Остальные API-методы требуют:

  • активную админскую сессию
  • или HTTP Basic авторизацию с логином и паролем администратора

Для запросов из браузерной сессии, которые меняют состояние, также нужен заголовок X-CSRF-Token.

Основные маршруты:

  • GET /api/auth/session
  • POST /api/auth/login
  • POST /api/auth/logout
  • GET /api/dashboard
  • GET /api/sources
  • POST /api/sources
  • PUT /api/sources/{source_id}
  • DELETE /api/sources/{source_id}
  • GET /api/transfers
  • GET /api/transfers/{transfer_id}
  • GET /api/logs
  • GET /api/cache
  • POST /api/cache/clear
  • GET /api/settings/view
  • PUT /api/settings/view
  • POST /api/worker/run
  • POST /api/worker/clear-queue

Как хранится состояние

Проект специально не использует SQL-базу в core-MVP.

Это даёт несколько преимуществ:

  • состояние легко читать прямо с диска
  • резервное копирование и перенос между машинами проще
  • деплой не зависит от отдельной БД

Ключевые файлы:

  • data/settings.json
  • data/sources.json
  • data/transfers/index.jsonl
  • data/transfers/<id>.json
  • data/logs/service.jsonl
  • data/state/runtime.json
  • data/state/tokens.key
  • data/cache/

Ограничения

  • Не каждое видео VK можно скачать через доступные ответы API
  • Для Telegram в некоторых регионах может потребоваться proxy
  • Файловое хранилище выбрано осознанно, но для очень больших инсталляций со временем может понадобиться SQL

Roadmap

  • Повторный запуск конкретного неуспешного переноса
  • Проверка токенов и proxy прямо из Настроек
  • Более умная очередь и управление расписанием
  • Улучшенные фильтры и экспорт логов
  • Поддержка альтернативных backend-хранилищ

Contributing

Идеи, баг-репорты и улучшения приветствуются.

Если создаёте issue, очень помогает приложить:

  • какой источник использовался
  • какой тип вложения не сработал
  • был ли включён proxy для Telegram
  • статус переноса или фрагмент логов

Лицензия

Проект распространяется под лицензией MIT. Полный текст находится в файле LICENSE.

Для кого это полезно

Проект особенно удобен, если вам нужен:

  • self-hosted сервис VK -> Telegram
  • внятный интерфейс управления, а не набор скриптов
  • развёртывание без PostgreSQL и лишней инфраструктуры
  • система, в которой можно быстро понять, почему именно интеграция не сработала

Если это похоже на ваш сценарий, репозиторий как раз про это.

About

Сервис переноса постов из VK в Telegram с React-админкой, поддержкой медиа и файловым хранилищем.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages