Современная система для автоматического сбора, обработки и управления новостями из 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 (рекомендуется для комфортной работы)
- Клонируйте репозиторий:
git clone <repository-url>
cd news-ai- Запустите систему однойкомандой:
./scripts/manage.sh install- Настройте автоматический парсинг:
./scripts/manage.sh cron- Админ-панель: http://localhost:81/admin
- Источники новостей: http://localhost:81/admin/sources
- Просмотр новостей: http://localhost:81/admin/news
- RabbitMQ Management: http://localhost:15673 (guest/guest)
- Статус системы:
./scripts/manage.sh status
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 развертывания используется отдельный конфигурационный файл compose-production.yaml и Dockerfile DockerfileProduction.
- Убедитесь, что доменные имена
signalscan.ruиwww.signalscan.ruуказывают на ваш сервер - Настройте переменные окружения в файле
.env.prod - Используйте GitHub Actions workflow для автоматического развертывания или вручную скопируйте файлы
- Скопируйте необходимые файлы на сервер
- Установите переменные окружения в файле
.env - Запустите
docker compose up -d - Инициализируйте SSL-сертификаты с помощью Certbot
Система автоматически получает и обновляет 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: Внутри контейнера
- Откройте админ-панель: http://localhost:81/admin
- Перейдите в раздел "Источники новостей"
- Нажмите кнопку "Создать"
- Заполните поля:
- Название источника (например: "BBC News")
- URL RSS ленты (например: "https://feeds.bbci.co.uk/news/rss.xml")
- Описание (опционально)
- Активен ✅ (галочка для включения парсинга)
./scripts/manage.sh cron- Используйте
DockerfileProduction - Cron задача:
*/5 * * * * php /var/www/app/bin/console app:parse-rss --async - Логи парсинга:
/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- Проверьте доступность RSS ленты:
curl -I "URL_RSS_ЛЕНТЫ" - Убедитесь, что источник активен в админ-панели
- Проверьте логи:
docker exec news_ai_app tail -f var/log/dev.log
- Проверьте статус RabbitMQ:
docker ps | grep rabbitmq - Перезапустите воркер:
./scripts/manage.sh worker
- Проверьте очереди: http://localhost:15673
- Проверьте подключение к PostgreSQL:
docker exec news_ai_app php bin/console doctrine:query:sql "SELECT 1"
- Выполните миграции:
docker exec news_ai_appphp bin/console doctrine:migrations:migrate
# Полная диагностика системы
./scripts/manage.sh status
# Перезапуск всей системы
./scripts/manage.sh restart
# Просмотр логов всех сервисов
docker compose logs -fMIT License - см. файл LICENSE
Если у вас возникли вопросы или проблемы:
- Проверьте раздел "Устранение неполадок"
- Изучите логи системы
- Создайте issue в репозитории
Создано с ❤️ для автоматизации сбора новостей