2026-03-27 03:35:08 +03:00
2026-03-27 03:35:08 +03:00

Alpinbet Signals Platform

Платформа для сбора, обработки и доставки сигналов Alpinbet.

Состав проекта

  • backend/ — Express + Prisma API, авторизация, сигналы, push, админские маршруты.
  • frontend/ — Nuxt-клиент, лента сигналов, настройки, PWA/mobile shell.
  • parser/ — парсер Alpinbet, который читает HTML, извлекает сигналы и синхронизирует их в PostgreSQL.
  • forecast-ocr-service/ — OCR-сервис для распознавания прогноза с изображения.
  • traefik/ — reverse proxy, TLS и роутинг доменов.
  • docker-compose.yml — основной способ запуска.

Как это работает

  1. parser получает страницы Alpinbet через сохраненную сессию.
  2. Из HTML извлекаются сигналы, коэффициенты, команды и изображения прогноза.
  3. Если у сигнала есть картинка прогноза, parser скачивает ее и отправляет multipart-запросом в forecast-ocr-service.
  4. OCR-сервис возвращает rawForecast и нормализованный forecast.
  5. parser сохраняет сигнал в PostgreSQL.
  6. backend отдает API и отправляет push-уведомления.
  7. frontend показывает сигналы, доступы и настройки пользователя.

Безопасность в текущем состоянии

  • JWT для веба хранится в HttpOnly cookie.
  • Веб-клиент больше не хранит токен в localStorage.
  • OCR больше не принимает произвольный imageUrl, только файл.
  • Наружу должны смотреть только 80 и 443.
  • adminer и dockmon сейчас закомментированы в docker-compose.yml.
  • Traefik dashboard использует usersFile, а не пароль, зашитый в репозиторий.

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

  1. Скопируйте .env.example в .env.
  2. Заполните .env реальными значениями.
  3. Проверьте parser/.env.
  4. Поднимите стек:
docker compose up -d --build
  1. Примените схему БД:
docker compose exec backend npx prisma db push

Полезные команды

Сборка:

npm run build
cd backend && npm run build
cd frontend && npm run build

Проверка итогового compose-конфига:

docker compose config

Проверка OCR локально:

curl http://localhost:4010/health
curl -X POST http://localhost:4010/ocr/forecast -F "image=@./forecast-ocr-service/tmp-forecast-test.png"

Переменные окружения

Корневой .env:

  • POSTGRES_DB
  • POSTGRES_USER
  • POSTGRES_PASSWORD
  • JWT_SECRET
  • PARSER_INTERNAL_SECRET
  • NUXT_PUBLIC_API_BASE
  • APP_PUBLIC_URL
  • CORS_ORIGIN
  • TRAEFIK_ACME_EMAIL
  • SMTP_*
  • VAPID_*
  • FIREBASE_*

parser/.env:

  • DATABASE_URL
  • ALPINBET_BASE_URL
  • ALPINBET_TARGET_URL
  • ALPINBET_BOTS
  • AUTH_ENABLED
  • AUTH_LOGIN_URL
  • AUTH_USERNAME
  • AUTH_PASSWORD
  • SESSION_FILE
  • STATE_FILE
  • POLL_INTERVAL_MS
  • FORECAST_OCR_URL
  • FORECAST_OCR_TIMEOUT_MS
  • FORECAST_OCR_ENABLED
  • BACKEND_INTERNAL_URL
  • PARSER_INTERNAL_SECRET

Чеклист Перед Деплоем

  • Заполните .env реальными секретами и не оставляйте change_me_*.
  • Смените JWT_SECRET, PARSER_INTERNAL_SECRET, POSTGRES_PASSWORD, SMTP и Firebase credentials, если они уже где-то светились.
  • Создайте traefik/secrets/dashboard-users на сервере.
  • Проверьте, что наружу открыты только 80 и 443.
  • Убедитесь, что adminer и dockmon остаются закомментированными.
  • Выполните docker compose config перед запуском.
  • Поднимите стек через docker compose up -d --build.
  • После старта выполните docker compose exec backend npx prisma db push.
  • Проверьте https://antigol.ru, https://api.antigol.ru/health и обычный логин.
  • Автобэкап PostgreSQL включён сервисом postgres-backup, архивы складываются в ./backups.
  • Сделайте контрольный backup PostgreSQL перед следующими продовыми изменениями.

Полезные файлы

Description
No description provided
Readme 11 MiB
Languages
TypeScript 42.3%
Vue 28.6%
JavaScript 18.9%
CSS 9.1%
Shell 0.5%
Other 0.6%