# Veille Tech - Agrégateur d'actualités informatiques Agrégateur simple et automatisé d'actualités liées à l'informatique, avec interface publique et administration. ## Fonctionnalités - **Page publique** : Liste des articles publiés, tri par date (récent/ancien), filtrage par catégorie - **Collecte automatique** : Récupération depuis des flux RSS toutes les X minutes (configurable) - **Évitement des doublons** : Vérification par URL et par titre - **Administration sécurisée** : Authentification par identifiants/mot de passe - **Gestion des articles** : Valider, masquer, rejeter, publier, supprimer - **Journal d'activité** : Traçabilité des actions - **Gestion des sources** : Consultation des sources RSS configurées - **Dockerisé** : Prêt à tourner dans un conteneur avec volume persistant ## Prérequis - [Docker](https://www.docker.com/) et [Docker Compose](https://docs.docker.com/compose/) (recommandé) - Ou [Node.js](https://nodejs.org/) v16+ et npm ## Installation ### Avec Docker (recommandé) 1. Cloner ou copier le projet 2. Copier le fichier d'exemple de configuration ```bash cp .env.example .env ``` 3. Éditer `.env` pour configurer vos identifiants et paramètres ```bash nano .env # ou votre éditeur préféré ``` 4. Lancer avec Docker Compose ```bash docker-compose up -d ``` 5. Accéder au site : http://localhost:3000 ### En local (sans Docker) 1. Installer les dépendances ```bash npm install ``` 2. Configurer l'environnement ```bash cp .env.example .env ``` 3. Lancer le serveur ```bash npm start ``` 4. Accéder au site : http://localhost:3000 ## Configuration Éditez le fichier `.env` : | Variable | Description | Défaut | |----------|-------------|--------| | `PORT` | Port du serveur | `3000` | | `ADMIN_USERNAME` | Identifiant admin | `admin` | | `ADMIN_PASSWORD` | Mot de passe admin | `changeme123` | | `SESSION_SECRET` | Clé secrète pour les sessions | À changer en production | | `COLLECT_INTERVAL` | Intervalle de collecte en minutes | `60` | | `AUTO_PUBLISH` | Publier automatiquement (`true`/`false`) | `false` | | `AI_ENABLED` | Activer la collecte IA (facultatif) | `false` | ## Utilisation ### Page publique - Accédez à `http://localhost:3000` - Filtrez par catégorie via le menu - Triez par date (plus récent / plus ancien) - Cliquez sur "Lire l'article original" pour aller sur la source ### Interface d'administration - Accédez à `http://localhost:3000/admin` - Connectez-vous avec vos identifiants (`.env`) - **En attente** : Articles collectés, à valider - **Valider et publier** : Peut modifier catégories et résumé avant publication - **Publier / Masquer / Rejeter / Supprimer** : Actions sur les articles - **Collecter maintenant** : Déclenche une collecte manuelle - **Sources** : Liste des flux RSS configurés - **Journal** : Historique des actions ### Collecteur Le collecteur fonctionne automatiquement selon `COLLECT_INTERVAL`. Vous pouvez aussi le lancer manuellement : ```bash npm run collect ``` ## Sources Les sources RSS sont configurées dans `config/sources.json`. Vous pouvez ajouter, supprimer ou désactiver des sources en éditant ce fichier. ## Structure du projet ``` . ├── app/ # Application web (Express, EJS) │ ├── routes/ # Routes public/admin │ ├── static/ # CSS, JS statiques │ ├── templates/ # Vues EJS │ ├── db.js # Connexion SQLite │ └── server.js # Serveur principal ├── collector/ # Collecteur RSS ├── config/ # Configuration (sources.json) ├── data/ # Base de données SQLite (volume persistant) ├── migrations/ # Schéma BDD ├── Dockerfile ├── docker-compose.yml └── README.md ``` ## Sécurité - Authentification obligatoire pour `/admin` - Sessions sécurisées avec `express-session` - Mots de passe non exposés dans le code - Variables sensibles dans `.env` (non commité) - Validation des URLs et données entrantes - Protection CSRF basique via sessions ## Dépannage **La collecte ne fonctionne pas** - Vérifiez que les flux RSS sont accessibles - Consultez les logs : `docker-compose logs -f` ou console - Lancez manuellement : `npm run collect` **Problème de connexion admin** - Vérifiez `ADMIN_USERNAME` et `ADMIN_PASSWORD` dans `.env` - Supprimez le cookie de session si nécessaire **Base de données corrompue** - Sauvegardez `data/articles.db` - Supprimez-le et relancez l'application (sera recréée) ## Évolutions possibles - Ajout de sources HTML scraping - Intégration IA pour résumé/catégorisation (modèles gratuits) - Système de tags avancé - Recherche plein texte - API REST - Pagination ## Licence Projet développé dans un cadre pédagogique.