Raspberry Pi comme service web d`agrégation d`informations RSS
categories:
- archive tags:
- raspberrypi
- rss
- newsreader
Dans ce document je vais détailler les opérations nécessaires à la mis en place d’un lecteur web de flux d’informations à la “Google Reader” sur Raspberry Pi
Ce service permet d’afficher dans une seule page web les informations à jour de tous vos abonnements RSS avec la possibilité de les organiser par TAG, et effectuer de recherches, ou définir de favoris.
Choix de l’application
J’ai choisi la solution web Selfoss pour plusieurs raisons:
- Projet open source
- Une interface claire et complète avec support pour l’affichage sur les appareils mobiles
- Présence d’un moteur de recherche interne et des options de partage habituelles (twitter, mail, instapaper,…)
- Présence d’un assistant facilitant l’importation de flux depuis “Google Reader”
- Solution très légère, donc adaptée aux spécifications techniques du Raspberry Pi
Choix du serveur web et du serveur de base de données
Un aggregateur de news effectue par définition un travail constant de récupération et organisation des informations en arrière-plan ce qui peut représenter une charge importante pour le serveur selon les nombres des flux RSS suivis.
Il faillait ,donc, optimiser la partie mise à disposition de l’information pour ne pas alourdir davantage la solution.
Le choix s’est donc porté naturellement sur le serveur web NGINX qui est réputé pour son utilisation parcimonieuse de la RAM tout en gardant de prestations très élevées. La même motivation a orienté le choix du moteur de base de données vers SQLITE qui présente l’avantage de ne pas nécessiter d’un serveur proprement dit.
Préparation de Raspbian pour une utilisation serveur
Optimisation matérielle
Afin d’adapter un OS plus tôt pensé pour une utilisation desktop j’ai procédé à quelques opérations de “tuning” au niveau de l’allocation de ressources et des services installés.
Allocation de tout l’espace disque au système et baisse de la mémoire dédiée au GPU à 16 MB
Dans les opérations de base on s’assurera d’avoir procédé aux mises à jour du firmware / système et d’avoir déjà effectué l’attribution de tout l’espace disque de la carte SD au système par le biais de l’option “expand-rootfs” de l’utilitaire en ligne de commande raspi-config
Au niveau de l’optimisation matérielle, étant donné que nous allons pas utiliser l’affichage graphique, nous pouvons diminuer la taille de mémoire destiné à la GPU
Cette opération est réalisable toujours par l’utilitaire raspi-config avec son option “memory_split” (ou l’édition manuelle du fichier de config /bott/config.txt)
L’utilitaire affichera la question “How much memory should the GPU have?” avec un champ de saisie qui nous permet de spécifier 16MB (taille minimal)
N. B. Cette opération est pensée uniquement pour une utilisation “serveur headless”; si vous souhaitez quand même accéder à votre lecteur de news par le navigateur web du raspi il ne faut pas effectuer cette opération
Nous pouvons aussi effectuer de l’optimisation au niveau du CPU afin de garantir de meilleures performances notamment si nous prévoyons de mises à jour fréquentes de flux RSS
J’ai donc procédé à l’overclock du CPU à 800 Mhz constants (turbo mode activé) ainsi que la définition de fréquences core et sdram par l’édition du même fichier /boot/config.txt avec la ligne de commande:
echo -e "arm_freq=800\nsdram_freq=450\ncore_freq=350\nforce_turbo=1" >> /boot/config.txt
N. B. Cette configuration a été testée comme étant sûre par la communauté et ne nécessite pas de dissipateur thermique sur le processeur
Optimisation logicielle
Au niveau de l’optimisation logicielle j’ai procédé à la désinstallation des toutes les composantes liées à l’environnement “desktop” (interface, applications graphiques…)
sudo aptitude purge xserver-xorg xserver-xorg-core xserver-xorg-input-all xserver-xorg-input-evdev xserver-xorg-input-synaptics xserver-xorg-video-fbdev xserver-common xpdf xinit x11-common x11-utils x11-xkb-utils xarchiver screen pcmanfm penguinspuzzle lxde-common lxappearance lxde-icon-theme lxinput lxmenu-data lxpanel lxpolkit lxrandr lxsession lxsession-edit lxshortcut lxtask lxterminal leafpad dillo galculator gnome-icon-theme gnome-themes-standard gnome-themes-standard-data gpicview hicolor-icon-theme
Et au nettoyage des fichiers de configuration orphelins ou les locales inutilisées (manuels en langues étrangères, fichiers de localisations…)
aptitude purge ~c
aptitude -R install localepurge && localepurge
Installation des serveurs
sudo aptitude -R install nginx sendmail openssl ssl-cert php5 php5-dev php5-gd php5-fpm php5-cli php5-sqlite php5-curl php5-common php5-cgi php5-mysql sqlite php-pear php-apc autoconf automake autotools-dev libapr1 libtool curl libcurl4-openssl-dev php-xml-parser
Configuration du serveur NGINX
J’ai commencé par préparer le dossier de publication destiné à accueillir notre lecteur RSS Selfoss
sudo mkdir /var/www/selfoss
sudo sudo chown -R www-data:www-data /var/www/selfoss
cd /var/www/selfoss
Et procédé au téléchargement de la dernière version:
sudo wget http://selfoss.aditu.de/selfoss-2.7.zip
sudo unzip selfoss-2.7.zip
N. B. La dernière version stable est toujours dispo ici: https://github.com/SSilence/selfoss/archive/master.zip
En suivant la documentation de Selfoss, j’ai ajusté les droits d’accès sur certains dossiers de la solution.
sudo chmod a+w data/cache data/favicons data/logs data/thumbnails data/sqlite public/
Pour la configuration du serveur, je me suis basé sur le magnifique exemple d’implémentation Ngnix spécialement adapté pour Selfoss, disponible ici:
https://gist.github.com/Mic92/4091461
J’ai donc copié et adapté cette configuration dans un nouveau fichier créer empressement dans le dossier dédié de Nginx
sudo nano /etc/nginx/sites-available/selfoss
Ne pas oublier d’effacer le fichier de configuration par défaut.
sudo rm /etc/nginx/sites-enabled/default
et créer le nouveau lien symbolique nécessaire à la publication effective de mon site
sudo ln -s /etc/nginx/sites-available/selfoss /etc/nginx/sites-enabled/selfoss
Comme nous somme à la pointe de la technologie actuelle 😀 et que dans le fichier de configuration nous avons spécifié ( listen [::]: ) que le serveur écoute aussi en ipv6, il ne faut pas oublier de l’activer dans notre Raspbian:
sudo modprobe ipv6
sudo echo -e "ipv6" >> /etc/modules
Source: http://www.raspbian.org/RaspbianFAQ#How_do_I_enable_or_use_IPv6.3F
Pour contrôler si le protocole est correctement pris en charge:
sudo sysctl -a | grep net.ipv6
Autres petites adaptations à appliquer sur le configuration pour qu’elle colle parfaitement à notre serveur:
Dans /etc/ngix/site-enabled/selfoss changer l’entrée
location ~ \.php$ {
astcgi_pass backend;
par
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;</pre>
et
server_name rss.yourdomain.com;
par le nom ou l’adresse IP correspondant à votre raspi.
Comme notre configuration prévoit l’accès au site en https afin de sécuriser’identification par mot de passe, nous allons créer notre certificat de cryptage.
sudo mkdir /etc/nginx/ssl
sudo openssl req -new -x509 -nodes -out server.crt -keyout server.key
sudo chmod 600 server.key
Nous allons renseigner l’emplacement de ces fichiers dans le fichier de config /etc/nginx/sites-available/selfoss de suite à l’entrée listen [::]:443 ssl;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
Nous y sommes presque! Dernière configuration liée à la solution selfoss: c’est le moment de déclarer la fréquence des mis à jour de flux RSS. Comme j’aime avoir l’info la plus fraiche possible, je vais, dans mon cas configurer un refresh tous le 15 minutes
Il suffit de créer une entrée dans /etc/crontab
15 * * * * root /usr/bin/php /var/www/selfoss/update.php
et voilà nous somme prêts!
c’est le moment de démarrer le moteur:
sudo service php5-fpm start
sudo service nginx start
Configuration de Selfoss
Nous pouvons à présent passer à la toute dernière partie de personnalisation de l’application web. Cette opération est très simple puisque notre environnement (Nginix+Sqlite) est pris en charge en natif par la solution.
Il nous reste que créer un compte pour protéger l’accès et importer nos abonnements RSS/ATOM stockés sur Google Reader.
Pas de problèmes, l’interface web nous guide dans les démarches.
Création et enregistrement du login / mot de passe
Il suffit de pointer notre navigateur web vers https://adresse_de_votre_raspi/password
Une page de création de mots de passe permet de traduire le mot de passe souhaité dans le format (hash) attendu par la solution dans son fichier de configuration
/var/www/selfoss/config.ini
*N.B. si ce fichier n’existe pas il suffit de le créer à partir du modèle fourni /var/www/selfoss/default.ini par la ligne de commande:
sudo cp /var/www/selfoss/default.ini /var/www/selfoss/config.ini
Il suffit de copier la chaîne de caractères proposée dans le champ “Generated password” et le copier dans l’entrée “password” du fichier /var/www/selfoss/config.ini*
Importation des abonnements présents sur un compte Google Reader
Là aussi Selfoss nous propose un assistant qui nous guide dans le processus:
Il suffit de pointer notre navigateur web vers https://adresse_de_votre_raspi/opml
Cliquer sur le lien “Google Reader Export” pour démarrer l’exportation des abonnements à partir de votre compte Google (authentification nécessaire)
Ensuite, uploader le fichier généré par l’opération précédente par le biais du bouton d’importation.
Une fois lancée par l’option “Deliver my OPML!” la magie opère et après un laps de temps qui varie selon le nombre de vos flux RSS (20 sec pour une centaine de flux dans mon cas) la page de garde s’affiche.
Vous retrouverez tous vos abonnements classés convenablement par tag comme vous les aviez organisé dans votre compte “Google Reader”: Génial!
Cet article est également disponible à cette adresse: http://swissraspberry.ch/doku.php?id=raspberry_pi_comme_service_web_d_agregation_d_informations_rss