Installation de l'agrégateur de flux RSS : TinyTiny

Ici se trouve tous les tutoriels rédigés en priorité par l'équipe de root66 mais aussi ceux d'autres sites qui seront jugés pertinents et pédagogiques
Répondre
Avatar du membre
jbnewbie
apprenti libriste
apprenti libriste
Messages : 8
Enregistré le : ven. 9 sept. 2022 10:34
Localisation : Fontenay-le-Fleury
adhérent root66 : oui

Installation de l'agrégateur de flux RSS : TinyTiny

Message par jbnewbie » dim. 25 févr. 2024 22:11

Voici un tuto pour aider les adhérents qui le souhaite à installer sur leur poste de travail l'agrégateur de flux RSS : TinyTiny. Pourquoi celui-ci plus qu'un autre ? Tout simplement parce que c'est le nom que j'ai retenu à la conférence de Benzo sur le réseau Mastodon. Il y a eu un aparté sur les flux RSS pendant la conférence qui m'a donné l'envie d'installer un agrégateur sur mon PC Linux.

NB: Pour suivre ce tuto il est préférable de savoir ouvrir un Terminal de commandes, et d'avoir quelques notions sur les lignes de commandes "bash". Il faut également savoir ouvrir et éditer un fichier de texte, et il faut avoir les accès administrateur "root". Enfin ce tuto ne fonctionnera que sur un PC Linux relié à internet, il faut avoir un accès direct sans passer par un proxy, ce que vous pouvez tester ainsi:

Code : Tout sélectionner

myuser@myhost:~$ ping root66.net
PING root66.net (151.80.141.124) 56(84) bytes of data.
64 bytes from 124.ip-151-80-141.eu (151.80.141.124): icmp_seq=1 ttl=53 time=7.55 ms
64 bytes from 124.ip-151-80-141.eu (151.80.141.124): icmp_seq=2 ttl=53 time=7.49 ms
64 bytes from 124.ip-151-80-141.eu (151.80.141.124): icmp_seq=3 ttl=53 time=7.97 ms
^C
--- root66.net ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 7.491/7.670/7.971/0.214 ms
Il existe de nombreux autres produits peut-être mieux et plus simple d'installation, je n'ai pas fait de recherche ni de comparatifs. Pour les débutants et les pressés qui veulent arriver au résultat rapidement, il vaut mieux utiliser une appli cliente sur le smartphone, et sinon, comme dit Benzo, "un bon compromis facilité d'utilisation, accès depuis partout, est d'utiliser l'appli Nextcloud News https://apps.nextcloud.com/apps/news qui s'installe sur n'importe quelle instance de Nextcloud. On peut la synchroniser avec une appli sur son smartphone et les liens sont conservés sur le serveur."

Je rédige ce tuto qui sera principalement une traduction/explication des sites originaux en anglais, et parce que je trouve que c'est une bonne illustration d'un mécanisme client/serveur très utilisé en informatique. Il y a donc de quoi apprendre un peu plus que la simple installation de l'agrégateur de flux RSS : TinyTiny

Sans détailler, je rappelle qu'un flux RSS est une ressource du World Wide Web dont le contenu est produit automatiquement en fonction des mises à jour d’un site Web. Et un agrégateur de flux RSS est un outil permettant de rassembler automatiquement, sur une même interface, les articles parus sur différents sites. Utilisé suivre l'actualité de contenus sur internet, il facilite le classement de l'information récupérée sur les blogs, médias en ligne, mais aussi sur les réseaux sociaux.

L' agrégateur de flux RSS : TinyTiny n'est donc pas une application que l'on démarre à partir d'un menu de son bureau, c'est un serveur web, un service qui va s'exécuter localement sur votre PC et dont l'interface va s'afficher dans une page de votre navigateur préféré.
Exemple:
TinyTiny-interface.png
interface de TinyTiny dans le navigateur
|
1. Installation de la partie serveur de TinyTiny dans un conteneur Docker :
Oui, il est recommandé sur la page du site de TinyTiny https://tt-rss.org/ de suivre le guide d'installation via un conteneur Docker. Alors avant d'aller plus loin il faut commencer par installer Docker sur sont PC. En deux mots, Docker est un moteur de conteneurs, c'est une technique de virtualisation d'un service, un serveur web dans ce tuto, avec son contexte de fonctionnement, OS, variables, fichiers de configuration, etc ... C'est une technique moderne, très largement utilisée pour "encapsuler" et mettre en œuvre ce type de service web.

1.1 Installation de Docker :
Il existe des versions de Docker incluses dans les gestionnaires de paquets des distributions Linux, mais je vous recommande la méthode officielle du site de Docker, qui est valable pour différentes distributions. https://docs.docker.com/engine/install/
Mon PC installé avec la distribution Ubuntu, j'ai donc suivi les instructions de la page : https://docs.docker.com/engine/install/ubuntu
qui se résument aux commandes suivantes avec les droits administrateur "root" :
root@myhost:~# cat /root/.env

Code : Tout sélectionner

   apt-get update
   apt-get install ca-certificates curl
   install -m 0755 -d /etc/apt/keyrings
   curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
   chmod a+r /etc/apt/keyrings/docker.asc
   echo   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
   $(. /etc/os-release && echo "$VERSION_CODENAME") stable" |   tee /etc/apt/sources.list.d/docker.list 
   apt-get update
   apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Ce tuto n'est qu'une rapide évocation de cette technologie de conteneur : Docker aussi j'invite les curieux à creuser le sujet, il y a de la documentation un peu partout en français. https://doc.ubuntu-fr.org/docker

1.2 Fichiers de configuration de la partie serveur de TinyTiny :
Une fois Docker installé sur le PC il n'y a que 2 fichiers de configuration à utiliser afin de pouvoir démarrer le conteneur serveur de l'agrégateur.

Le premier fichier de la page https://tt-rss.org/wiki/InstallationNotes est le fichier .env que j'ai copié à la racine /root par simplicité et dans lequel j'ai apporté les modifications suivantes:

root@myhost:~# cat /root/.env

Code : Tout sélectionner

#Put any local modifications here.

# Run FPM under this UID/GID.
OWNER_UID=1000
OWNER_GID=1000

# FPM settings.
PHP_WORKER_MAX_CHILDREN=3
PHP_WORKER_MEMORY_LIMIT=256M

# ADMIN_USER_* settings are applied on every startup.
# Set admin user password to this value. If not set, random password will be generated on startup, look for it in the 'app' container logs.
#ADMIN_USER_PASS=
# Sets admin user access level to this value. Valid values:
# -2 - forbidden to login
# -1 - readonly
#  0 - default user
# 10 - admin
#ADMIN_USER_ACCESS_LEVEL=
# Auto create another user (in addition to built-in admin) unless it already exists.
AUTO_CREATE_USER=my_user_name
AUTO_CREATE_USER_PASS=my_password
AUTO_CREATE_USER_ACCESS_LEVEL=10

# Default database credentials.
TTRSS_DB_USER=postgresjbftiny
TTRSS_DB_NAME=my_tinyrss_db_user
TTRSS_DB_PASS=my_tinyrss_db_password

# You will likely need to set this to the correct value - it should point to external tt-rss URL as seen in your browser.
TTRSS_SELF_URL_PATH=http://tt-rss.org/tt-rss

# You can customize other config.php defines by setting overrides here. See tt-rss/.docker/app/Dockerfile for complete list. Examples:
# TTRSS_PLUGINS=auth_remote
# TTRSS_SINGLE_USER_MODE=true
# TTRSS_SESSION_COOKIE_LIFETIME=2592000
# TTRSS_FORCE_ARTICLE_PURGE=30

# Bind exposed port to 127.0.0.1 to run behind reverse proxy on the same host. If you plan expose the container, remove "127.0.0.1:".
HTTP_PORT=127.0.0.1:8765
Les parties importantes sont les valeurs indiquées après AUTO_CREATE.... car c'est là que vous définissez le nom et le mot de passe de l'utilisateur qui vont vous servir dans la partie cliente, la page web de TinyTiny. Il est donc important de retenir les valeurs de AUTO_CREATE_USER=...
et de AUTO_CREATE_USER_PASS=...
Les champs TTRSS_DB_... sont important aussi mais il n'est pas nécessaire de retenir leurs valeurs, il suffit de les modifier pour personnaliser votre installation.
Enfin il faut retenir également la valeur de HTTP_PORT= puisque c'est l'adresse de la page web de la partie cliente de TinyTiny que vous allez appeler dans votre navigateur.

Le second fichier de la page https://tt-rss.org/wiki/InstallationNotes est à recopier à la racine /root sans modifications avec le nom : compose.yml (toujours pour des raisons de simplicité)
root@myhost:~# cat /root/compose.yml

Code : Tout sélectionner

version: '3'

services:
  db:
    image: postgres:15-alpine
    restart: unless-stopped
    env_file:
      - .env
    environment:
      - POSTGRES_USER=${TTRSS_DB_USER}
      - POSTGRES_PASSWORD=${TTRSS_DB_PASS}
      - POSTGRES_DB=${TTRSS_DB_NAME}
    volumes:
      - db:/var/lib/postgresql/data

  app:
    image: cthulhoo/ttrss-fpm-pgsql-static:latest
    restart: unless-stopped
    env_file:
      - .env
    volumes:
      - app:/var/www/html
      - ./config.d:/opt/tt-rss/config.d:ro
    depends_on:
      - db

#  optional, makes weekly backups of your install
#  backups:
#    image: cthulhoo/ttrss-fpm-pgsql-static:latest
#    restart: unless-stopped
#    env_file:
#      - .env
#    volumes:
#      - backups:/backups
#      - app:/var/www/html
#    depends_on:
#      - db
#    command: /opt/tt-rss/dcron.sh -f

  updater:
    image: cthulhoo/ttrss-fpm-pgsql-static:latest
    restart: unless-stopped
    env_file:
      - .env
    volumes:
      - app:/var/www/html
      - ./config.d:/opt/tt-rss/config.d:ro
    depends_on:
      - app
    command: /opt/tt-rss/updater.sh

  web-nginx:
    image: cthulhoo/ttrss-web-nginx:latest
    restart: unless-stopped
    env_file:
      - .env
    ports:
      - ${HTTP_PORT}:80
    volumes:
      - app:/var/www/html:ro
    depends_on:
      - app

volumes:
  db:
  app:
  backups:
Lorsque tout est prêt, toujours dans un Terminal, démarrez le conteneur du serveur TinyTiny ainsi:
root@myhost:~#docker compose up
Dans la fenêtre se déroulent alors toutes les lignes d' informations du démarrage du conteneur, et de son activité et c'est sans fin jusqu'à la commande "CTRL+C" qui va terminer l’exécution du serveur.

Code : Tout sélectionner

root@myhost:~# docker compose up
[+] Running 4/0
 ✔ Container root-db-1         Created                                                      0.0s 
 ✔ Container root-app-1        Created                                                      0.0s 
 ✔ Container root-web-nginx-1  Created                                                      0.0s 
 ✔ Container root-updater-1    Created                                                      0.0s 
Attaching to app-1, db-1, updater-1, web-nginx-1
db-1         | 
db-1         | PostgreSQL Database directory appears to contain a database; Skipping initialization
db-1         | 
db-1         | 2024-02-25 20:59:27.995 UTC [1] LOG:  starting PostgreSQL 15.6 on x86_64-pc-linux-musl, compiled by gcc (Alpine 13.2.1_git20231014) 13.2.1 20231014, 64-bit
db-1         | 2024-02-25 20:59:27.995 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db-1         | 2024-02-25 20:59:27.995 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db-1         | 2024-02-25 20:59:28.000 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db-1         | 2024-02-25 20:59:28.006 UTC [23] LOG:  database system was shut down at 2024-02-25 20:59:20 UTC
db-1         | 2024-02-25 20:59:28.014 UTC [1] LOG:  database system is ready to accept connections
app-1        | db:5432 - accepting connections
web-nginx-1  | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web-nginx-1  | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web-nginx-1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web-nginx-1  | 10-listen-on-ipv6-by-default.sh: info: IPv6 listen already enabled
web-nginx-1  | /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
web-nginx-1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
web-nginx-1  | 20-envsubst-on-templates.sh: Running envsubst on /etc/nginx/templates/nginx.conf.template to /etc/nginx/nginx.conf
web-nginx-1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
web-nginx-1  | /docker-entrypoint.sh: Configuration complete; ready for start up
app-1        | updating all local plugins...
app-1        | updating /var/www/html/tt-rss/plugins.local/nginx_xaccel...
app-1        | From https://git.tt-rss.org/fox/ttrss-nginx-xaccel
app-1        |  * branch            master     -> FETCH_HEAD
app-1        | Already up to date.
app-1        | NOTICE:  extension "pg_trgm" already exists, skipping
app-1        | [20:59:29/85] Lock: update.lock
app-1        | [20:59:29/85] Database schema is already at latest version.
app-1        | [20:59:29/87] Lock: update.lock
app-1        | [20:59:29/90] Lock: update.lock
app-1        | [25-Feb-2024 20:59:29] NOTICE: fpm is running, pid 1
app-1        | [25-Feb-2024 20:59:29] NOTICE: ready to handle connections
updater-1    | uid=1000(app) gid=1000(app) groups=1000(app),1000(app)
updater-1    | db:5432 - accepting connections
updater-1    | [20:59:58/12] Installing shutdown handlers
...
blablabla
...

2. Utilisation de l'interface cliente de TinyTiny dans un navigateur :

Petit aparté : Depuis de nombreuses années maintenant on utilise le navigateur comme interface utilisateur de nombreux programmes, et pas uniquement pour aller consulter divers sites web sur internet. Les navigateurs sont devenus des programmes puissants qui permettent même de faire tourner des mini-systèmes Linux : exemple ( https://bellard.org/jslinux/vm.html?ur ... g&mem=192 )

D'après le fichier de configuration ci-dessus, ouvrez une nouvelle page dans votre navigateur et tapez l'adresse : http://127.0.0.1:8765/ si tout se passe bien, vous arrivez à la page de "login" (authentification) de votre agrégateur.
Connectez-vous avec les valeurs de AUTO_CREATE_USER=... et de AUTO_CREATE_USER_PASS=... que vous avez indiquées dans le fichier /root/.env


3. Abonnez vous à votre premier flux RSS :
Pour un premier test très simple, je vous propose d'utiliser le flux RSS de l'émission d'histoire pour les enfants OLI de Radio-France qui est disponibles à l'adresse suivante: https://radiofrance-podcast.net/podcast09/rss_19721.xml et j'ai essayé de ne pas rendre le lien actif car c'est juste l'url du lien qu'il faut copier et coller dans la partie "S'abonner au Flux ..." accessible au menu déroulant "hamburger" tout en haut à droite de la page de votre interface:
TinyTiny-interface-log-sub.png
Invite de login et fenêtre de choix du flux RSS
|
mais vous pouvez également choisir celui du forum de root66 ( app.php/feed?sid=c4195724e22d6b9769863369acd7b077 )

Vous obtenez alors une entrée dans le menu de la colonne à gauche et une page vide ! Pour autant tout fonctionne bien soyez patient, laissez le temps à la partie serveur de TinyTiny d'aller questionner le serveur de RadioFrance ou de Root66 et de lister les dernières informations publiées sur le flux RSS auquel vous venez de vous abonner.
TinyTiny-interface-oli.png
Remplissage avec le flux OLI
4. pour terminer et arrêter le serveur

Il suffit de fermer la page du navigateur pour quitter l'interface utilisateur de TinyTiny, mais la partie serveur continue de fonctionner, le meilleur moyen pour s'en assurer c'd'utiliser la commande: docker ps par exemple si c'est le seul conteneur docker de votre système vous obtenez la sortie :

Code : Tout sélectionner

myuser@myhost:~$ sudo docker ps

CONTAINER ID   IMAGE                                    COMMAND                  CREATED          STATUS                    PORTS                    NAMES
1f2422f70518   cthulhoo/ttrss-web-nginx:latest          "/docker-entrypoint.…"   59 minutes ago   Up 59 minutes (healthy)   127.0.0.1:8765->80/tcp   root-web-nginx-1
75125f024c21   cthulhoo/ttrss-fpm-pgsql-static:latest   "/opt/tt-rss/updater…"   59 minutes ago   Up 59 minutes             9000/tcp                 root-updater-1
18cc34ccd733   cthulhoo/ttrss-fpm-pgsql-static:latest   "/bin/sh -c ${SCRIPT…"   59 minutes ago   Up 59 minutes             9000/tcp                 root-app-1
107142094b10   postgres:15-alpine                       "docker-entrypoint.s…"   59 minutes ago   Up 59 minutes             5432/tcp                 root-db-1
Dans la fenêtre du Terminal de démarrage du serveur, tapez "CTRL+C" pour terminer l’exécution du serveur.

Code : Tout sélectionner

^C 
Gracefully stopping... (press Ctrl+C again to force)
[+] Stopping 4/4
 ✔ Container root-web-nginx-1  Stopped                                                      0.2s 
 ✔ Container root-updater-1    Stopped                                                     10.1s 
 ✔ Container root-app-1        Stopped                                                      0.1s 
 ✔ Container root-db-1         Stopped                                                      0.1s 
canceled
fin de ce tuto, bon tests, cordialement, Jean-Bernard

Répondre