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