Tiny Tiny RSS : auto-hébergement des flux RSS
Je vais expliquer dans ce billet pourquoi et comment installer Tiny Tiny RSS, un gestionnaire de flux RSS sur son serveur.
Motivations
Pourquoi un serveur ?
Il existe de nombreux clients d’agrégateurs de flux, tels que Liferea sous Gnome ou NewsFox dans Firefox.
Cependant, un tel client pose principalement deux problèmes.
- Le premier, c’est le temps d’attente de mise à jour des flux. Lors du démarrage, les flux ne sont pas disponibles immédiatement : il faut patienter le temps qu’il mette à jour chacun des flux auxquels nous sommes abonnés, ce qui peux prendre plusieurs minutes.
- Le second, c’est la synchronisation : nous ne pouvons pas lire nos flux à plusieurs endroits (maison, travail, mobile…) en gardant la synchronisation (les flux que nous avons lu sont marqués comme lus sur un ordinateur, mais pas sur un autre).
Un gestionnaire de flux doit donc, d’après moi, forcément être hébergé sur un serveur.
Pourquoi son serveur ?
De nombreux services en ligne proposent la gestion de flux RSS (Google Reader, NetVibes, etc.).
Pourquoi donc héberger un tel service sur son propre serveur ?
- Par principe. Comme pour le blog ou les mails, autant auto-héberger son propre contenu, qui n’a rien à faire ailleurs.
- Filtrage en entreprise. Les agrégateurs de flux connus sont souvent bloqués par les proxies d’entreprise. Un service perso sur son propre serveur aura beaucoup moins de risque d’être filtré.
- Données personnelles. Les flux auxquels chacun est abonné et les articles lus sont une information importante pour quiconque souhaite renseigner un profil d’utilisateur. Par exemple, pour modifier les résultats d’un moteur de recherche (ou bien d’autres choses).
- Censure. Les flux RSS peuvent être une source d’information essentielle (c’est ma source d’information principale). Si nous en laissons la gestion à un hébergeur, comment nous assurer qu’il ne supprimera pas des flux les informations qui le dérangent ? Par exemple, s’il décide malencontreusement de supprimer tous les articles qui parlent de Wikileaks ? Je sais que ce n’est pas imaginable dans un pays démocratique.
Mais regardons quand même (au hasard) l’exemple de Google, qui continue d’étendre l’auto-censure de son moteur de recherche, dans un pays exerçant des pressions politiques et commerciales pour retirer des contenus dérangeants hors de toute décision judiciaire (parfois en supprimant des entrées DNS, même pour un contenu légal dans le pays concerné), pressions auxquelles peu d’entreprises résistent, y compris lorsqu’il s’agit d’obtenir des informations politiques… et ils ne comptent pas s’arrêter en si bon chemin, pour lutter contre ce qu’ils appellent « piratage ». Mais non, censurer certains flux pour des raisons politiques est inimaginable dans un pays démocratique.
Installation
Je vais expliquer l’installation de Tiny Tiny RSS pour ma configuration, à savoir Ubuntu Server 11.04, avec Apache et MySQL.
Je vais l’installer dans ~/flux
(le répertoire flux
de mon home), avec un lien symbolique /var/www/flux
. L’application sera accessible à partir de flux.rom1v.com
. Adaptez ces valeurs selon vos besoins.
Dépendances
Tiny Tiny RSS a besoin de php5-curl
:
sudo apt-get install php5-curl
Téléchargement
Télécharger la dernière version en bas de la page officielle (actuellement la 1.5.4).
Extraire l’archive dans ~/
:
tar xzf tt-rss-1.5.4.tar.gz
Et renommer le répertoire :
mv tt-rss-1.5.4 flux
Base de données
Il faut ensuite initialiser la base de données, grâce aux scripts fournis. Pour cela, aller dans le répertoire des scripts :
cd flux/schema
Puis se connecter à MySQL :
$ mysql -uroot -p Enter password:
Une fois connecté, créer la base de données flux
:
mysql> CREATE DATABASE flux; Query OK, 1 row affected (0,00 sec)
Puis créer un utilisateur flux
avec les droits sur cette base (on pourra générer son mot de passe grâce à pwgen) :
mysql> GRANT ALL PRIVILEGES ON flux.* TO flux@localhost IDENTIFIED BY 'unmotdepasse'; Query OK, 0 rows affected (0.04 sec)
Initialiser la base de données :
mysql> USE flux Database changed mysql> \\. ttrss_schema_mysql.sql
La base de données est prête.
Configuration
Retourner dans le répertoire ~/flux
:
cd ..
Copier le modèle du fichier de configuration :
cp config.php-dist config.php
Puis l’éditer, par exemple :
nano config.php
Modifier les informations de connexion à la base de données :
define('DB_TYPE', "mysql"); define('DB_HOST', "localhost"); define('DB_USER', "flux"); define('DB_NAME', "flux"); define('DB_PASS', "unmotdepasse");
Modifier l’URL d’accès à l’application, pour moi :
define('SELF_URL_PATH', 'http://flux.rom1v.com');
Désactiver le mode utilisateur unique (sans quoi l’accès à l’application sera public sans authentification) :
define('SINGLE_USER_MODE', false);
Si Tiny Tiny RSS est installé à la racine du site (c’est mon cas : flux.rom1v.com/
), il faut modifier le répertoire d’icônes, car /icons
est réservé par Apache :
define('ICONS_DIR', "tt-icons"); define('ICONS_URL', "tt-icons");
Je conseille de désactiver la vérification des nouvelles versions, car lorsque le site de Tiny Tiny RSS ne répond plus, l’application rencontre des difficultés :
define('CHECK_FOR_NEW_VERSION', false);
Pour les performances, activer la compression :
define('ENABLE_GZIP_OUTPUT', true);
Enfin, une fois que la configuration est terminée, modifier la ligne :
define('ISCONFIGURED', true);
Les modifications du fichier de configuration sont terminés.
Maintenant, renommer le répetoire icons
(comme dans le fichier de configuration) :
mv icons tt-icons
Serveur web
Il faut maintenant héberger l’application sur Apache.
Tout d’abord, donner les droits à www-data
sur les répertoires où il a besoin d’écrire :
sudo chown -R www-data: cache tt-icons lock
Puis faire un lien symbolique vers le répertoire /var/www/
:
sudo ln -s ~/flux /var/www/
Créer (au besoin) un nouveau VirtualHost pour le site, dans le répertoire /etc/apache2/sites-available
(pour moi dans un fichier nommé flux.rom1v.com
) :
<VirtualHost *:80> DocumentRoot /var/www/flux ServerName flux.rom1v.com <Directory /var/www/flux/> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/flux_error.log CustomLog /var/log/apache2/flux_access.log combined </VirtualHost>
Activer le site :
sudo a2ensite flux.rom1v.com
Redémarrer Apache (un simple reload
aurait suffit si nous n’avions pas installé php5-curl
tout à l’heure) :
sudo service apache2 restart
Configuration utilisateur
Compte utilisateur
L’application doit maintenant fonctionner. S’y connecter, avec l’utilisateur admin
et le mot de passe password
(l’utilisateur par défaut), puis aller dans la configuration et changer le mot de passe.
Importation et exportation
Tiny Tiny RSS permet l’importation et l’exportation d’un fichier OPML. Il est ainsi possible de migrer facilement d’un gestionnaire de flux à un autre.
Intégration à Firefox
Il est possible d’associer son instance de Tiny Tiny RSS à Firefox : toujours dans la configuration, dans l’onglet Flux, Intégration à Firefox, cliquer sur le bouton.
Pour tester, se rendre sur un site, et afficher la liste des flux disponibles. Pour cela, cliquer sur le petit icône à gauche de l’adresse, puis sur Plus d’informations…, sur l’onglet Flux (s’il y en a un), et enfin sur le flux désiré. Par exemple, pour ce blog :
En cliquant sur S’abonner maintenant, Firefox devrait proposer d’utiliser Tiny Tiny RSS.
Programmation de la mise à jour des flux
Il reste encore une étape importante : le serveur doit régulièrement mettre à jour le contenu de chacun des flux auxquels nous sommes abonnés.
Plusieurs méthodes sont décrites sur cette page. Certaines chargent les flux séquentiellement (par cron notamment), ce qui peut poser problème : supposons que nous soyons abonnés à 300 flux, avec une mise à jour toutes les 30 minutes, ça donne une moyenne de 6 secondes par flux. Si certains sites sont long à répondre, la mise à jour risque de dépasser le temps imparti, et cron va lancer une nouvelle tâche avant que la précédente soit terminée (heureusement Tiny Tiny RSS pose un verrou, donc il ne fera rien la seconde fois, mais du coup nous perdons une mise à jour). Ceci est d’autant plus dommage que l’essentiel de la durée nécessaire est le temps de connexion à chacun des sites : mieux vaut donc paralléliser le chargement.
C’est la raison pour laquelle je préfère la dernière méthode : lancer un démon multi-processus au démarrage du serveur. Par contre, étant donné le fonctionnement du démon proposé, il ne semble pas possible d’en faire un script init.d propre. Le plus simple est donc de rajouter dans /etc/rc.local
:
start-stop-daemon -c www-data -Sbx /var/www/flux/update_daemon2.php
Vous pouvez exécuter cette commande maintenant pour charger les flux la première fois.
Ce démon utilise plusieurs processus (par défaut 2), qui mettent à jour les flux par blocs (par défaut, de 100). Pour changer ces variables (par exemple pour avoir 5 processus qui chargent des blocs de 50), dans config.php
:
define('DAEMON_FEED_LIMIT', 50);
et dans update_daemon2.php
:
define('MAX_JOBS', 5);
Autres interfaces
Une interface mobile en HTML est intégrée. Pour y accéder, il suffit d’ajouter à l’URL /mobile
.
Pour Android, il existe également une application : ttrss-reader-fork (à tester, mais je la trouve assez buggée). Pour lui permettre l’accès, il est nécessaire de sélectionner « Activer les API externes » dans la page de configuration de Tiny Tiny RSS.
Conclusion
Vous n’avez plus de raison de laisser traîner vos flux RSS n’importe où