MaDoVi - Le wiki

Machines - Données - Virtualisation

Outils pour utilisateurs

Outils du site


services:web:tuto:freshrss_tuto1

FreshRSS - Agrégateur de flux RSS

FreshRSS est un outil d'agrégation de flux RSS en mode serveur.
C'est un agrégateur et un lecteur de flux RSS en ligne, qui permet de rester informé de l’actualité à partir des flux RSS de vos sites préférés. Un flux RSS est un protocole que les sites internet mettent très souvent à disposition afin d'alerter en cas de nouveau contenu. Le flux RSS permet ainsi de suivre «en temps réel» la publication de nouveau contenu sur des sites internet, et ce, grâce à un lecteur de flux RSS.

Visitez le site web de l'outil.

On va ici installer ce service dans un container web qu'on a déjà, «motorisé» avec NGINX et PHP: par exemple lxc-web.

Et puis on va le configurer – et il a besoin d'une base de données: un utilisera MariaDB - Serveur de base de données, container qu'on a déjà – et le personnaliser un peu, aux couleurs de «MaDoVi» là encore, avec l'idée de le partager avec la Communauté qui pourra l'enrichir de flux correspondant à ses centres d'intérêt et sur son périmètre.


On en discute On en discute sur le forum


1. Création du container LXC

On considère que le container lxc-web est déjà crée via la procédure décrite ici. On l'a construit avec un serveur ssh; on va donc s'y connecter dans ce mode, à partir de la console de notre serveur, sur le compte défini au moment de la création du container:

  • On s'assure qu'il tourne:
    visto@wasabi:~$ lxc-ls -f
    NAME        STATE   AUTOSTART GROUPS             IPV4      IPV6 UNPRIVILEGED 
    lxc-web     RUNNING 1         onboot, webserver  10.0.3.51 -    true         
  • On s'y connecte:
    visto@wasabi:~$ ssh admin@lxc-web
    amdin@lxc-web's password: 
    Welcome to Alpine!
     
    The Alpine Wiki contains a large amount of how-to guides and general
    information about administrating Alpine systems.
    See <http://wiki.alpinelinux.org/>.
     
    You can setup the system with the command: setup-alpine
     
    You may change this message by editing /etc/motd.
     
    lxc-web:~$ 
  • Notre compte a des privilèges root dans le container. On y bascule pour faire nos manip:
    lxc-web:~$ sudo -i
    [sudo] password for admin: 
    lxc-web:~# 

2. Préparation & Installation

(On pourra avantageusement se référer à la documentation en particulier la partie installation et s'en inspirer)


2.1. Préparation

☛ L'outil qu'on installe des dépendance, en particulier avec PHP. Il a besoin, outre PHP, de : php-curl, php-gmp, php-intl, php-mbstring, php-sqlite3, php-xml, php-zip et enfin php-mysql pour la relation avec le SGBD MariaDB. Assurons-nous que ces modules sont bien déjà présents dans notre container:

lxc-web:~# apk info -vv | grep php | sort 

Avec notre container, on constate l'absence de certains modules qu'on ajoute donc (exemple ici de ceux qui manquent):

lxc-web:~# apk add php7-intl php7-xml php7-xmlrpc php7-xmlreader php7-xmlwriter php7-json

2.2. Installation

☛ On se positionne dans le dossier cible des services web, dans l'arborescence des sites:

lxc-web:~# cd /var/www/

☛ On télécharge la dernière version (elle est récente à date, à vérifier sur le site Github au préalable):

lxc-web:/var/www# wget https://github.com/FreshRSS/FreshRSS/archive/master.zip -O freshrss.zip

☛ On décompresse l'archive et on renomme le répertoire résultat:

lxc-web:/var/www# unzip freshrss.zip
lxc-web:/var/www# mv FreshRSS-master freshrss

☛ On change propriétaire et droits:

lxc-web:/var/www# chown -R www:www freshrss
lxc-web:/var/www# chmod -R g+r freshrss
lxc-web:/var/www# chmod -R g+w freshrss/data/

2.3. Base de données

On l'a dit, FreshRSS utilise une base de données. Or, on dispose déjà d'un container qui héberge le moteur de base de données MariaDB, qu'on va donc exploiter pour stocker les données de FreshRSS (le container a été défini ici).

Dans le souci de ne pas surcharger notre container avec le binaire mariadb-client – qui n'est ici utilisé qu'une fois pour définir la base – on va se connecter directement à notre container MariaDB et définir le schéma de données pour notre outil. On peut le faire, les container se «connaissent» car ils sont sur le même réseau privé et lxc-mariadb dsipose d'un serveur SSH:

  • On s'y connecte donc (première fois: reconnaissance clé publique):
    lxc-web:~# ssh admin@lxc-mariadb
    The authenticity of host 'lxc-mariadb (10.0.3.10)' can't be established.
    ED25519 key fingerprint is SHA256:Q2dEqCRWLUH6NGZ1QMd+DXl/610UqQpj/o7iu8sQcbk.
    This key is not known by any other names
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added 'lxc-mariadb' (ED25519) to the list of known hosts.
    admin@lxc-mariadb's password: 
    Welcome to Alpine!
     
    The Alpine Wiki contains a large amount of how-to guides and general
    information about administrating Alpine systems.
    See <http://wiki.alpinelinux.org/>.
     
    You can setup the system with the command: setup-alpine
     
    You may change this message by editing /etc/motd.
     
    lxc-mariadb:~$ 
  • On crée, conformément à la documentation, la base de données dédiée et l'utilisateur freshrss (mettez le mot de passe que vous voulez derrière 'IDENTIFIED BY …':
    lxc-mariadb:~$ mysql -u admin -p
    CREATE DATABASE `freshrss`;
    CREATE USER 'freshrss'@'%' IDENTIFIED BY 'freshrss';
    GRANT ALL privileges ON `freshrss`.* TO 'freshrss'@'%';
    FLUSH PRIVILEGES;
    QUIT;

    Remarque: On pourra remplacer % partout par lxc-web pour limiter l'accès à la base de la seule provenance de notre container web.

  • On sort pour revenir dans notre container web:
    lxc-mariadb:~$ logout
    lxc-web:~#

2.4. Accès web

☛ Pour le serveur HTTP Nginx du container, la configuration de l'hôte virtuel correspond au fichier / contenu suivant:

lxc-web:/var/www# nano /etc/nginx/http.d/freshrss.lxc-web.conf 
# Agrégateur de flux RSS - Solution FreshRSS
server {
    listen         80;
    server_name    freshrss.*;
    access_log     /var/log/nginx/freshrss.access.log;
    error_log      /var/log/nginx/freshrss.error.log;
 
    root           /var/www/freshrss/p/;
    index          index.php index.html index.htm;
 
    location / {
	try_files $uri $uri/ index.php;
    }
 
    location ~ ^.+?\.php(/.*)?$ {
        fastcgi_pass unix:/var/run/php7.sock;
	fastcgi_split_path_info ^(.+\.php)(/.*)$;
	# By default, the variable PATH_INFO is not set under PHP-FPM
	# But FreshRSS API greader.php need it. If you have a “Bad Request” error, double check this var!
	# NOTE: the separate $path_info variable is required. For more details, see:
	# https://trac.nginx.org/nginx/ticket/321
	set $path_info $fastcgi_path_info;
	fastcgi_param PATH_INFO $path_info;
	include fastcgi_params;
	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

»» Prise en compte:

lxc-web:/var/www# nginx -s reload

☛ Dans le cadre de «» on utilise un proxy web dans le container lxc-proxy, dont on adapte donc la configuration avec:

lxc-proxy:~# nano /etc/nginx/http.d/freshrss.wasabi.conf
server {
    listen                     80;
    server_name                freshrss.wasabi;
    include                    includes/redirect_https.inc;
}
 
server {
    listen                     443 ssl http2;
    server_name                freshrss.wasabi www.freshrss.wasabi;
    ssl_certificate            /etc/nginx/nginx-selfsigned.crt;
    ssl_certificate_key        /etc/nginx/nginx-selfsigned.key;
 
    access_log /var/log/nginx/freshrss.wasabi.access.log;
    error_log /var/log/nginx/freshrss.wasabi.error.log;
 
 
    location / {
        ## outil forum très basique
        include includes/proxy_set_header.inc;
        proxy_pass http://freshrss.lxc-web;
    }
 
}

»» Prise en compte:

lxc-proxy:~# nginx -s reload

2.5. Finalisation «IHM»

☛ Dans ce contexte « reverse proxy», l'URL https://freshrss.wasabi aboutie à la finalisation de la configuration via une série d'écrans:


#1 - Langue de l'interface »»»\_\_


#2 - Vérifications \_\_»»»\_\_ J'ai zappé la copie d'écran qui vérifie – et signale en cas d'erreur – les présences des bons outils, en particulier les librairies PHP :-(


#3 - Configuration de l'accès à la base de données »»»\_\_


#4 - Compte administrateur \_\_»»»


#5 - « Bien joué ! » \_\_»»»


3. Configurations


3.1. Rafraîchir automatiquement

C'est le script ./app/actualize_script.php qui réalise la mise à jour des flux RSS.
Il est conçu pour ne pas rafraîchir un flux donné plus d'une fois toutes les vingt minutes.

On va ici planifier son lancement de façon régulière et automatique (on va le «croner»): il est donc inutile de le déclencher plus souvent que toutes les vingt minutes.

On va définir un job dans la table des actions planifiées, en précisant notre «utilisateur web» www:

  • On créé le dossier pour les scripts recurrents à 20mns:
    lxc-web~:# mkdir /etc/periodic/20min
  • On y définit notre script qui fait appel au rafraîchissement de FreshRSS, en fixant l'utilisateur web www avant:
    lxc-web~:# cat << EOF > /etc/periodic/20min/freshrss
    #!/bin/sh 
    su www -s /bin/sh -c 'php /var/www/freshrss/app/actualize_script.php' >> /tmp/FreshRSS.log
    EOF
  • On rend exécutable tout le contenu du dossier:
    lxc-web~:# chmod -R a+r /etc/periodic/20min/
  • On va ajouter la définition d'un lancement récurrent toutes les 20mns qui a cette tête: /20 * * * * run-parts /etc/periodic/20min.
    Ce qui doit donner au final, via la commande d'édition crontab -e (notre ajout en seconde ligne):
    lxc-web~:# crontab -e
    # do daily/weekly/monthly maintenance
    # min   hour    day     month   weekday command
    */15    *       *       *       *       run-parts /etc/periodic/15min
    */20    *       *       *       *       run-parts /etc/periodic/20min
    0       *       *       *       *       run-parts /etc/periodic/hourly
    0       2       *       *       *       run-parts /etc/periodic/daily
    0       3       *       *       6       run-parts /etc/periodic/weekly
    0       5       1       *       *       run-parts /etc/periodic/monthly

    NB: L'option -e de crontab lance l'éditeur par défaut vi avec des commandes dédiées: donc i pour entrer en mode insertion, Esc pour en sortir; puis :w pour enregistrer et :q pour quitter.
    Si vous ne voulez pas être «dépaysé», utilisez la commande EDITOR=nano crontab -e


3.2. To be continued...


services/web/tuto/freshrss_tuto1.txt · Dernière modification: 29/04/2022 10:36 de Cram