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— основной способ запуска.
Как это работает
parserполучает страницы Alpinbet через сохраненную сессию.- Из HTML извлекаются сигналы, коэффициенты, команды и изображения прогноза.
- Если у сигнала есть картинка прогноза,
parserскачивает ее и отправляет multipart-запросом вforecast-ocr-service. - OCR-сервис возвращает
rawForecastи нормализованныйforecast. parserсохраняет сигнал в PostgreSQL.backendотдает API и отправляет push-уведомления.frontendпоказывает сигналы, доступы и настройки пользователя.
Безопасность в текущем состоянии
- JWT для веба хранится в
HttpOnlycookie. - Веб-клиент больше не хранит токен в
localStorage. - OCR больше не принимает произвольный
imageUrl, только файл. - Наружу должны смотреть только
80и443. adminerиdockmonсейчас закомментированы вdocker-compose.yml.- Traefik dashboard использует
usersFile, а не пароль, зашитый в репозиторий.
Быстрый старт
- Скопируйте
.env.exampleв.env. - Заполните
.envреальными значениями. - Проверьте
parser/.env. - Поднимите стек:
docker compose up -d --build
- Примените схему БД:
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_DBPOSTGRES_USERPOSTGRES_PASSWORDJWT_SECRETPARSER_INTERNAL_SECRETNUXT_PUBLIC_API_BASEAPP_PUBLIC_URLCORS_ORIGINTRAEFIK_ACME_EMAILSMTP_*VAPID_*FIREBASE_*
parser/.env:
DATABASE_URLALPINBET_BASE_URLALPINBET_TARGET_URLALPINBET_BOTSAUTH_ENABLEDAUTH_LOGIN_URLAUTH_USERNAMEAUTH_PASSWORDSESSION_FILESTATE_FILEPOLL_INTERVAL_MSFORECAST_OCR_URLFORECAST_OCR_TIMEOUT_MSFORECAST_OCR_ENABLEDBACKEND_INTERNAL_URLPARSER_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
Languages
TypeScript
42.3%
Vue
28.6%
JavaScript
18.9%
CSS
9.1%
Shell
0.5%
Other
0.6%