LinkTracker – Telegram-бот, который отслеживает изменения на веб-страницах и оперативно информирует пользователя о них.
Приложение разработано для максимального удобства запуска: никаких громоздких Docker-образов самих модулей собирать не нужно, модули запускаются "просто из IDE". Единственная внешняя зависимость — это сама база данных PostgreSQL.
В корне проекта создайте файл .env на основе шаблона .env.example:
cp .env.example .envУкажите в .env (или прямо в настройках Run Configuration вашей IDE) актуальные токены:
TELEGRAM_TOKEN— токен вашего Telegram бота (BotFather).GITHUB_TOKEN— токен для работы с API GitHub.STACKOVERFLOW_KEYиSTACKOVERFLOW_ACCESS_KEY— ключи доступа к API StackOverflow.
В проекте предусмотрен docker-compose.yml, который разворачивает полноценное окружение:
- PostgreSQL (порт
5432) — основная база данных для Scrapper. - Кластер Kafka (KRaft) из 3 брокеров (порты
9092,9094,9095) — для асинхронного обмена сообщениями. - Confluent Schema Registry (порт
8081) — для управления Avro-схемами. - Кластер Valkey (порты
6379,6380,6381) — 3-нодовый распределённый кластер кэширования. - RedisInsight (порт
8001) — GUI-веб-панель для просмотра ключей и мониторинга Valkey.
Для запуска всей инфраструктуры выполните:
docker compose up -dУбедитесь, что у вас работает Docker (он нужен для Testcontainers во время сборки). Запустите сборку проекта:
./mvnw clean installВо время тестов Spring Boot самостоятельно поднимет временные Docker-контейнеры с БД и Kafka, накатит миграции Liquibase и прогонит все интеграционные тесты.
Запустите модули в следующем порядке:
- Запустите класс
backend.academy.linktracker.scrapper.ScrapperApplication(модульscrapper). При старте Liquibase автоматически создаст все таблицы в локальной базе из docker-compose, а планировщик начнет опрашивать ссылки. - Запустите класс
backend.academy.linktracker.bot.BotApplication(модульbot).
Параметры запуска и конфигурации (в application.yaml):
app.use-queue— при значенииtrue(по умолчанию) уведомления отправляются асинхронно через паттерн Transactional Outbox в Apache Kafka. При значенииfalseиспользуется синхронный HTTP-клиент.app.database.access-type— переключение междуsql(JDBC) иorm(Hibernate/JPA) в Scrapper.app.cache.ttl— время жизни (TTL) записей в кэше L2 (Valkey).- Все настройки очередей, кэша (Caffeine/Valkey), включая адреса брокеров, нод кластера, Schema Registry, политики ретраев и DLQ, настраиваются в файлах
application.yamlмодулейbotиscrapper.
Полезную для разработки проекта информацию вы можете найти в файле HELP.md.