Would be nice to test with other versions of MySQL too. Comparison before/after: mysql> EXPLAIN SELECT e.id, e.guid, e.title, e.author, UNCOMPRESS(content_bin) AS content, e.link, e.date, e.is_read, e.is_favorite, e.id_feed, e.tags FROM `freshrss_alex_entry` e INNER JOIN (SELECT e1.id FROM `freshrss_alex_entry` e1 INNER JOIN `freshrss_alex_feed` f ON e1.id_feed=f.id WHERE f.priority > 0 AND (e1.id >= 1381615200000000 OR e1.is_read=0 OR e1.is_favorite=1 OR (f.keep_history <> 0)) ORDER BY e1.id DESC LIMIT 31) e2 ON e2.id=e.id ORDER BY e.id DESC; +----+-------------+------------+--------+-------------------------------------+----------+---------+---------------+------+----------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+------------+--------+-------------------------------------+----------+---------+---------------+------+----------------------------------------------+ | 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 31 | Using temporary; Using filesort | | 1 | PRIMARY | e | eq_ref | PRIMARY | PRIMARY | 8 | e2.id | 1 | | | 2 | DERIVED | f | range | PRIMARY,priority,keep_history | priority | 1 | NULL | 137 | Using where; Using temporary; Using filesort | | 2 | DERIVED | e1 | ref | PRIMARY,id_feed,is_favorite,is_read | id_feed | 2 | freshrss.f.id | 452 | Using where | +----+-------------+------------+--------+-------------------------------------+----------+---------+---------------+------+----------------------------------------------+ 4 rows in set (3.50 sec) mysql> EXPLAIN SELECT e.id, e.guid, e.title, e.author, UNCOMPRESS(content_bin) AS content, e.link, e.date, e.is_read, e.is_favorite, e.id_feed, e.tags FROM `freshrss_alex_entry` e INNER JOIN (SELECT e1.id FROM `freshrss_alex_entry` e1 INNER JOIN `freshrss_alex_feed` f ON e1.id_feed=f.id WHERE f.priority > 0 AND e1.id <=9000000000000000 AND (e1.id >= 1381615200000000 OR e1.is_read=0 OR e1.is_favorite=1 OR (f.keep_history <> 0)) ORDER BY e1.id DESC LIMIT 31) e2 ON e2.id=e.id ORDER BY e.id DESC; +----+-------------+------------+--------+-------------------------------------+---------+---------+---------------------+-------+---------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+------------+--------+-------------------------------------+---------+---------+---------------------+-------+---------------------------------+ | 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 31 | Using temporary; Using filesort | | 1 | PRIMARY | e | eq_ref | PRIMARY | PRIMARY | 8 | e2.id | 1 | | | 2 | DERIVED | e1 | range | PRIMARY,id_feed,is_favorite,is_read | PRIMARY | 8 | NULL | 70084 | Using where | | 2 | DERIVED | f | eq_ref | PRIMARY,priority,keep_history | PRIMARY | 2 | freshrss.e1.id_feed | 1 | Using where | +----+-------------+------------+--------+-------------------------------------+---------+---------+---------------------+-------+---------------------------------+ 4 rows in set (0.01 sec)
FreshRSS
FreshRSS est un agrégateur de flux RSS à auto-héberger à l’image de Leed ou de Kriss Feed.
Il se veut léger et facile à prendre en main tout en étant un outil puissant et paramétrable.
Il permet de gérer plusieurs utilisateurs, et dispose d’un mode de lecture anonyme.
- Site officiel : http://freshrss.org
- Démo : http://demo.freshrss.org/
- Développeur : Marien Fressinaud dev@marienfressinaud.fr
- Version actuelle : 0.8-dev
- Date de publication 2014-0x-xx
- License GNU AGPL 3
Note sur les branches
Ce logiciel est encore en développement ! Veuillez vous assurer d'utiliser la branche qui vous correspond :
- Utilisez la branche master si vous visez la stabilité.
- La branche beta est celle par défaut : les nouveautés y sont ajoutées environ tous les mois.
- Pour les développeurs et ceux qui savent ce qu'ils font, la branche dev vous ouvre les bras !
Disclaimer
Cette application a été développée pour s’adapter à des besoins personnels et non professionnels. Je ne garantis en aucun cas la sécurité de celle-ci, ni son bon fonctionnement. Je m’engage néanmoins à répondre dans la mesure du possible aux demandes d’évolution si celles-ci me semblent justifiées. Privilégiez pour cela des demandes sur GitHub (https://github.com/marienfressinaud/FreshRSS/issues) ou par mail (dev@marienfressinaud.fr)
Pré-requis
- Serveur modeste, par exemple sous Linux ou Windows
- Fonctionne même sur un Raspberry Pi avec des temps de réponse < 1s (testé sur 150 flux, 22k articles, soit 32Mo de données partiellement compressées)
- Serveur Web Apache2 ou Nginx (non testé sur les autres)
- PHP 5.2.1+ (PHP 5.3.7+ recommandé)
- MySQL 5.0.3+ (recommandé) ou SQLite 3.7.4+ (en bêta)
- Un navigateur Web récent tel Firefox 4+, Chrome, Opera, Safari, Internet Explorer 9+
- Fonctionne aussi sur mobile
Installation
- Récupérez l’application FreshRSS via la commande git ou en téléchargeant l’archive
- Placez l’application sur votre serveur (la partie à exposer au Web est le répertoire
./p/) - Le serveur Web doit avoir les droits d’écriture dans le répertoire
./data/ - Accédez à FreshRSS à travers votre navigateur Web et suivez les instructions d’installation
- Tout devrait fonctionner :) En cas de problème, n’hésitez pas à me contacter.
Contrôle d’accès
Il est requis pour le mode multi-utilisateur, et recommandé dans tous les cas, de limiter l’accès à votre FreshRSS. Au choix :
- En utilisant l’identification par formulaire (requiert JavaScript, et PHP 5.3.7+ recommandé – fonctionne avec certaines versions de PHP 5.3.3+)
- En utilisant l’identification par Mozilla Persona incluse dans FreshRSS
- En utilisant un contrôle d’accès HTTP défini par votre serveur Web
- Voir par exemple la documentation d’Apache sur l’authentification
- Créer dans ce cas un fichier
./p/i/.htaccessavec un fichier.htpasswdcorrespondant.
- Créer dans ce cas un fichier
- Voir par exemple la documentation d’Apache sur l’authentification
Rafraîchissement automatique des flux
- Vous pouvez ajouter une tâche Cron lançant régulièrement le script d’actualisation automatique des flux. Consultez la documentation de Cron de votre système d’exploitation (Debian/Ubuntu, Red Hat/Fedora, Slackware, Gentoo, Arch Linux…). C’est une bonne idée d’utiliser le même utilisateur que votre serveur Web (souvent “www-data”). Par exemple, pour exécuter le script toutes les heures :
7 * * * * php /chemin/vers/FreshRSS/app/actualize_script.php > /tmp/FreshRSS.log 2>&1
Conseils
- Pour une meilleure sécurité, faites en sorte que seul le répertoire
./p/soit accessible depuis le Web, par exemple en faisant pointer un sous-domaine sur le répertoire./p/.- En particulier, les données personnelles se trouvent dans le répertoire
./data/.
- En particulier, les données personnelles se trouvent dans le répertoire
- Le fichier
./constants.phpdéfinit les chemins d’accès aux répertoires clés de l’application. Si vous les bougez, tout se passe ici. - En cas de problème, les logs peuvent être utile à lire, soit depuis l’interface de FreshRSS, soit manuellement depuis
./data/log/*.log.
Sauvegarde
- Il faut conserver vos fichiers
./data/config.phpainsi que./data/*_user.phpet éventuellement./data/persona/ - Vous pouvez exporter votre liste de flux depuis FreshRSS au format OPML
- Pour sauvegarder les articles eux-même, vous pouvez utiliser phpMyAdmin ou les outils de MySQL :
mysqldump -u utilisateur -p --databases freshrss > freshrss.sql

