Outils pour utilisateurs

Outils du site


raspberry_pi_comme_service_web_d_agregation_d_informations_rss

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

Pour ceux intéressés à l'optimisation matérielle du Raspberry Pi, un très bon article est disponible ici {en}:

http://blog.extremeshok.com/archives/1081

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 :D 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$ {                                                                                                                           
          fastcgi_pass backend;

par

 location ~ \.php$ {                                                                                                              
          fastcgi_pass unix:/var/run/php5-fpm.sock;

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 chiffrement.

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 chê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!

raspberry_pi_comme_service_web_d_agregation_d_informations_rss.txt · Dernière modification: 2013/05/31 10:23 par burninghat