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 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:
visto@wasabi:~$ lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED lxc-web RUNNING 1 onboot, webserver 10.0.3.51 - true
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:~$
root
dans le container. On y bascule pour faire nos manip: lxc-web:~$ sudo -i [sudo] password for admin: lxc-web:~#
(On pourra avantageusement se référer à la documentation en particulier la partie installation et s'en inspirer)
☛ 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
☛ 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/
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:
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:~$
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.
lxc-mariadb:~$ logout lxc-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
☛ 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 \_\_»»»
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
:
lxc-web~:# mkdir /etc/periodic/20min
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
lxc-web~:# chmod -R a+r /etc/periodic/20min/
/20 * * * * run-parts /etc/periodic/20min
. 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
…