Skip to content

Система для автоматического сбора, обработки и управления новостями из RSS лент с веб-интерфейсом администратора.

License

Notifications You must be signed in to change notification settings

kaevdokimov/news-ai

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📰 News AI - Система сбора новостей

Symfony PHP Docker License

Современная система для автоматического сбора, обработки и управления новостями из RSS лент с веб-интерфейсом администратора.

✨ Возможности

  • 📰 Автоматический парсинг RSS лент - поддержка множества форматов RSS/Atom
  • 🔄 Асинхронная обработка - использование Symfony Messenger и RabbitMQ
  • 🎛️ Веб-админка - удобное управление через Sonata Admin Bundle
  • Автоматический запуск - cron для парсинга каждые 5 минут
  • 🗄️ Надежное хранение - PostgreSQL с оптимизированными индексами
  • 🚀 Docker Ready - готовые контейнеры для быстрого развертывания
  • 📊 Мониторинг - встроенные инструменты для отслеживания работы
  • 🔍 Поиск и фильтрация - удобный поиск по новостям и источникам
  • 🛡️ Безопасность - валидация данных и защита от дублирования

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

Требования

  • Docker 20.10+ и Docker Compose 2.0+
  • Git для клонирования репозитория
  • 8GB RAM (рекомендуется для комфортной работы)

Установка за 3 шага

  1. Клонируйте репозиторий:
git clone <repository-url>
cd news-ai
  1. Запустите систему однойкомандой:
./scripts/manage.sh install
  1. Настройте автоматический парсинг:
./scripts/manage.sh cron

🎯 Готово! Система запущена

🏗️ Архитектура проекта

news-ai/
├── 📁 src/
│   ├── 📁 Entity/              # Сущности базы данных
│   │   ├── NewsSource.php      # Источники новостей
│   │   └── NewsItem.php        # Новости
│   ├── 📁 Repository/          # Репозитории для работы с БД
│   ├── 📁 Service/             # Бизнес-логика
│   │   └── RssParserService.php # Парсер RSS лент
│   ├── 📁 Command/             # Консольные команды
│   │   └── ParseRssCommand.php # Команда парсинга
│   ├── 📁 Message/             # Сообщения для очередей
│   ├── 📁 MessageHandler/      # Обработчики сообщений
│   └── 📁 Admin/               # Админ-панели Sonata
├── 📁 scripts/                 # Скрипты управления
│   ├── manage.sh               # Основной скрипт управления
│   ├── monitor.sh              # Мониторинг системы
│   └── parse_news.sh           # Скрипт парсинга для cron
├── 📁 .docker/                 # Docker конфигурации
├── 📁 config/                  # Конфигурация Symfony
└── 📁 templates/               # Шаблоны Twig

⚙️ Конфигурация

🌐 Production развертывание

Для production развертывания используется отдельный конфигурационный файл compose-production.yaml и Dockerfile DockerfileProduction.

Подготовка к развертыванию:

  1. Убедитесь, что доменные имена signalscan.ru и www.signalscan.ru указывают на ваш сервер
  2. Настройте переменные окружения в файле .env.prod
  3. Используйте GitHub Actions workflow для автоматического развертывания или вручную скопируйте файлы

Ручное развертывание:

  1. Скопируйте необходимые файлы на сервер
  2. Установите переменные окружения в файле .env
  3. Запустите docker compose up -d
  4. Инициализируйте SSL-сертификаты с помощью Certbot

SSL-сертификаты Let's Encrypt:

Система автоматически получает и обновляет SSL-сертификаты для доменов signalscan.ru и www.signalscan.ru с помощью Certbot.

Редиректы:

  • Все HTTP запросы перенаправляются на HTTPS
  • Запросы к www.signalscan.ru перенаправляются на signalscan.ru

🗄️ База данных

  • PostgreSQL: localhost:5434
  • База: postgres
  • Пользователь: postgres
  • Пароль: postgres

🐰 Очереди сообщений

  • RabbitMQ: localhost:5673
  • Веб-интерфейс: http://localhost:15673
  • Логин/Пароль: guest/guest

🚀 Кэш

  • Redis: localhost:6380

🌐 Веб-сервер

  • Nginx: localhost:81
  • PHP-FPM: Внутри контейнера

🔧 Разработка

➕ Добавление нового источника новостей

  1. Откройте админ-панель: http://localhost:81/admin
  2. Перейдите в раздел "Источники новостей"
  3. Нажмите кнопку "Создать"
  4. Заполните поля:
    • Название источника (например: "BBC News")
    • URL RSS ленты (например: "https://feeds.bbci.co.uk/news/rss.xml")
    • Описание (опционально)
    • Активен ✅ (галочка для включения парсинга)

🛠️ Настройка автоматического парсинга

Для разработки:

./scripts/manage.sh cron

Для production:

  1. Используйте DockerfileProduction
  2. Cron задача: */5 * * * * php /var/www/app/bin/console app:parse-rss --async
  3. Логи парсинга: /var/log/news_parsing.log

📊 Мониторинг

📋 Логи системы

  • Логи приложения:var/log/dev.log
  • Логи парсинга: /tmp/news_parsing.log (нахосте)
  • Логи воркера: /tmp/worker.log (на хосте)

📈 Статистика

  • Количествоисточников: админ-панель → Источники новостей
  • Количество новостей: админ-панель → Новости
  • Статус очередей: RabbitMQ Management UI (http://localhost:15673)

###🔍 Мониторинг в реальном времени

# Полная статистика системы
./scripts/manage.sh status

# Просмотр логов в реальном времени
./scripts/manage.sh logs

# Проверка статуса контейнеров
docker ps | grep news_ai

🚨 Устранение неполадок

❌ Проблемы с парсингом

  1. Проверьте доступность RSS ленты:
    curl -I "URL_RSS_ЛЕНТЫ"
  2. Убедитесь, что источник активен в админ-панели
  3. Проверьте логи:
    docker exec news_ai_app tail -f var/log/dev.log

❌ Проблемы с очередями

  1. Проверьте статус RabbitMQ:
    docker ps | grep rabbitmq
  2. Перезапустите воркер:
    ./scripts/manage.sh worker
  3. Проверьте очереди: http://localhost:15673

❌Проблемы с базой данных

  1. Проверьте подключение к PostgreSQL:
    docker exec news_ai_app php bin/console doctrine:query:sql "SELECT 1"
  2. Выполните миграции:
    docker exec news_ai_appphp bin/console doctrine:migrations:migrate

🔧 Общие команды диагностики

# Полная диагностика системы
./scripts/manage.sh status

# Перезапуск всей системы
./scripts/manage.sh restart

# Просмотр логов всех сервисов
docker compose logs -f

📄 Лицензия

MIT License - см. файл LICENSE

🤝 Поддержка

Если у вас возникли вопросы или проблемы:

  1. Проверьте раздел "Устранение неполадок"
  2. Изучите логи системы
  3. Создайте issue в репозитории

Создано с ❤️ для автоматизации сбора новостей

About

Система для автоматического сбора, обработки и управления новостями из RSS лент с веб-интерфейсом администратора.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •