Ubuntu 18.04 LTS – Installation de Tiny Tiny RSS avec Nginx, PHP-FPM et MariaDB
Tiny Tiny RSS (tt-rss) est un agrégateur auto-hébergé de flux RSS et Atom libre sous licence libre GNU GPL v3.
Depuis la fin de Google Reader au mois de juillet 2013, les services concurrents (Feedly, NetVibes, etc.) se sont multipliés. En majorité, il s’agit de services tiers qui nécessitent simplement de s’inscrire afin de disposer d’une interface web prête à l’emploi.
Pourquoi donc héberger un lecteur de flux RSS ?
- Dépendance du service : vous ne dépendrez plus du bon vouloir d’un tiers (augmentation des tarifs ou fermeture du service). En effet ces services tels que Feedly, Digg Reader ou encore NetVibes permettent d’obtenir un lecteur de flux RSS contre une simple inscription mais, de base, vous n’aurez accès qu’à certaines fonctionnalités.
- Données personnelles : les flux auxquels vous êtes abonné et les articles lus sont une information importante pour quiconque souhaite renseigner un profil utilisateur et d’utiliser ces données à des fins commerciales…
- Filtrage en entreprise : les lecteurs de flux connus sont souvent bloqués par les proxies d’entreprise, votre URL personnalisée a beaucoup moins de chance d’être filtrée.
Tiny Tiny RSS constitue une bonne alternative avec de nombreux avantages et fonctionnalités :
- Interface fluide et responsive
- Multi-utilisateurs
- Mode hors-connexion pour continuer à lire vos feeds
- Multilingue
- Gestion des tags et catégories
- Moteur de recherche
- Raccourcis clavier
- Support du format OPML
- Podcasts
- Personnalisations via des plugins et des thèmes
- Applications Android et iOS
- Gratuit
Si côté client, seul un navigateur est nécessaire, côté serveur, Tiny Tiny RSS a besoin d’un serveur web (Nginx), de PHP, d’une interface permettant la communication entre le serveur web et PHP (PHP-FPM) et d’une base de données (MariaDB). Nous améliorerons les performances de tt-rss grâce à OPCache et sécuriserons les échanges grâce à un certificat SSL/TLS délivré par Let’s Encrypt.
1 – Prérequis
- Vous devez disposer d’Ubuntu 18.04 LTS.
- Votre utilisateur doit avoir accès à sudo.
2 – Nginx
Notre choix se portera sur le serveur HTTP Nginx pour une question de performances. Nginx est reconnu pour ses hautes performances, sa stabilité, son ensemble de fonctionnalités, sa configuration simple ainsi que sa faible consommation en ressources.
2.1 – Installation
Installez le paquet nginx :
$ sudo apt-get -y install nginx
2.2 – Configuration
Modifiez les directives suivantes du fichier de configuration Nginx /etc/nginx/nginx.conf :
user www-data; worker_processes 8; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ...
- worker_processes 8; : l’un des paramètres à ajuster immédiatement est le worker_processes. Pour profiter pleinement de la puissance de votre serveur, il est recommandé de mettre autant de worker_processes que de cœurs disponibles sur votre serveur. Pour connaître le nombre de cœurs sur votre serveur, il suffit de lancer la commande :
$ grep processor /proc/cpuinfo | wc -l 8
- server_tokens off; : pour des raisons de sécurité, il est recommandé de désactiver l’envoi d’informations telles que le numéro de version de votre Nginx. Pour cela, décommentez cette directive dans le bloc http.
3 – Installation et téléchargement de Tiny Tiny RSS
- Installez le paquet git afin de récupérer les sources de tt-rss :
$ sudo apt-get -y install git
- Téléchargez les sources de tt-rss :
$ cd /var/www $ sudo git clone https://tt-rss.org/git/tt-rss.git ttrss
4 – Droits Unix
Lors du déploiement basique d’un serveur HTTP, l’utilisateur sous lequel fonctionne ce serveur (Apache, Nginx…) est la plupart du temps www-data, nobody ou apache. Cela signifie que si plusieurs sites existent sous la même instance de Nginx, tous utilisent le même utilisateur. Or si l’un des sites s’avère corrompu par un utilisateur malveillant alors l’assaillant peut profiter pleinement de tous les droits de l’utilisateur sous lequel tourne le serveur web. Tous les sites s’avèrent donc vulnérables.
Pour des raisons évidentes de sécurité, il est donc recommandé de cloisonner ces utilisateurs et d’avoir un utilisateur dédié à la gestion du dossier ttrss. Cet utilisateur aura des droits aussi restreints que possible à ce répertoire.
Nous allons donc modifier le propriétaire du répertoire /var/www/ttrss et l’attribuer à un nouvel utilisateur dédié : ttrss.
Par ailleurs, Nginx est lancé sous l’utilisateur www-data et doit avoir accès en lecture au répertoire /var/www/ttrss pour lire les ressources statiques (HTML, CSS, JS, etc.). Nous allons donc attribuer le répertoire /var/www/ttrss au groupe www-data.
Enfin nous retirerons toutes les permissions de ce répertoire aux autres utilisateurs.
- Créez un utilisateur ttrss :
$ sudo adduser ttrss
- Modifiez le propriétaire et le groupe du répertoire /var/www/ttrss :
$ sudo chown -R ttrss:www-data /var/www/ttrss
- Retirez toutes les permissions aux autres utilisateurs :
$ sudo chmod -R o-rwx /var/www/ttrss
5 – PHP et ses modules
Tiny Tiny RSS nécessite certains modules PHP pour fonctionner :
- PHP PDO : connecteur pour MariaDB
- PHP JSON & PHP XML : opérations sur la lecture des flux RSS
- PHP mbstring : support des caractères multi-octets
- PHP fileinfo : améliore les performances d’analyse de fichiers
- PHP CURL : nécessaire pour certains plugins
- PHP POSIX : nécessaire pour le processus de mise à jour des flux
- PHP GD : opérations sur les images présentes dans les flux
- PHP INTL : support de l’internationalisation.
Installez les paquets suivants :
$ sudo apt-get -y install php-cli php-mysql php-json php-xml php-mbstring php-fileinfo php-curl php-posix php-gd php-intl
Vous devez disposer d’une version de PHP égale ou supérieure à 5.4.
Pour connaître la version installée sur votre système, tapez la commande suivante :$ php -v
6 – PHP-FPM
Le module PHP-FPM permet la communication entre le serveur Nginx et PHP, basée sur le protocole FastCGI. Ce module, écoutant sur le port 9000 par défaut ou sur un socket UNIX, permet notamment l’exécution de scripts PHP dans un processus indépendant de Nginx avec des UID et GID différents. Il sera alors possible, dans le cas de la gestion de plusieurs applications sur un même serveur, de créer et configurer un groupe (appelé aussi pool) par application. Un pool définit notamment le UID/GID des processus PHP et le nombre de processus minimum, maximum ou encore le nombre de processus en attente à lancer.
6.1 – Installation
Installez le paquet php-fpm :
$ sudo apt-get install -y php-fpm
6.2 – Création du pool ttrss
Créez le pool dédié à Tiny Tiny RSS en créant le fichier de configuration suivant : /etc/php/7.2/fpm/pool.d/ttrss.conf
[ttrss] listen = /var/run/ttrss.sock listen.owner = ttrss listen.group = www-data user = ttrss group = www-data pm = ondemand pm.max_children = 10 pm.process_idle_timeout = 60s pm.max_requests = 500
Certaines valeurs sont très arbitraires et seront, en fonction des ressources disponibles sur votre serveur et celles que vous souhaiterez dédier à votre tt-rss, différentes d’une configuration à l’autre. Cependant ces différentes directives respectent certaines conditions :
- [ttrss] : nom du pool. Il est possible de créer plusieurs pools par fichier. Chaque pool doit commencer par cette directive.
- listen : interface d’écoute des requêtes. Les syntaxes acceptées sont ADRESSE_IP:PORT (exemple : listen = 127.0.0.1:9000) et /path/to/unix/socket (exemple : listen = /var/run/ttrss.sock). Le socket est représenté comme un simple fichier sur le système et permet d’interfacer des processus entre eux sans passer par la couche réseau du système, ce qui est inutile lorsque Nginx et PHP-FPM sont hébergés sur le même serveur. Je vous conseille donc d’utiliser un socket.
- listen.owner & listen.group : affecte l’utilisateur et le groupe au socket Unix si utilisé. Ces deux paramètres peuvent être associés au paramètre listen.mode qui définit les permissions du socket (660 par défaut). Il est important que Nginx ait les droits de lecture sur le socket Unix.
- user & group : utilisateur et groupe sous lesquels le pool de processus sera exécuté. Cet utilisateur et ce groupe doivent bien sûr exister sur votre système et surtout accéder aux fichiers PHP de votre tt-rss. Cela veut dire aussi que chaque fichier et répertoire créé dans tt-rss appartiendra à cet utilisateur et à ce groupe. Comme nous l’avons vu dans le chapitre dédié aux droits Unix, chaque fichier devra appartenir à l’utilisateur ttrss et au groupe www-data.
- pm : directive acceptant les 3 valeurs suivantes : static, dynamic et ondemand.
- static : les processus, au nombre de pm.max_children, sont continuellement actifs (quelle que soit la charge et l’affluence de votre tt-rss) et sont susceptibles de consommer de la mémoire inutilement. Cette directive est recommandée si tt-rss est l’unique application de votre serveur.
- dynamic : le nombre de processus fils pourra varier suivant la charge. Cependant, nous gardons le contrôle sur le nombre de processus fils à créer au démarrage du serveur, le nombre de processus maximum, en attente de requêtes, etc. Les directives suivantes deviennent obligatoires : pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers. Cette directive est recommandée si vous avez plusieurs pools avec un fort trafic (plus de 10 000 requêtes/jour).
- ondemand : aucun processus fils n’est lancé au démarrage du serveur, les processus s’activent à la demande et auront une durée de vie définie par la directive pm.process_idle_timeout. L’intérêt de cette directive est de libérer de la mémoire en cas de faible charge mais celle-ci peut légèrement augmenter le temps de réponse de votre tt-rss. Cette directive est recommandée si vous avez plusieurs pools avec potentiellement une faible affluence.
Sachant que l’utilisation de tt-rss est personnelle et souvent limitée à quelques utilisateurs, nous choisirons et détaillerons ici la directive ondemand.
- pm.max_children : nombre maximum de processus fils. La valeur du paramètre pm.max_children varie d’un système à l’autre. Voici la procédure à réaliser pour déterminer la valeur de ce paramètre :
- Arrêtez le service php-fpm :
$ sudo systemctl stop php7.2-fpm.service
- Affichez la mémoire disponible (colonne available) sur votre système :
$ free -m total used free shared buff/cache available Mem: 3913 58 2532 39 1322 3539 Swap: 1048 0 1048
Sur cet exemple, le système dispose de 3539Mo de RAM disponible. La quantité de RAM que vous souhaitez allouer au maximum à tt-rss dépend de vous et des autres services actifs que vous disposez sur ce même système. Dans notre exemple, nous partirons du principe que nous souhaitons allouer au maximum 256Mo de RAM à tt-rss.
- Affichez la mémoire utilisée par un processus fils php-fpm :
$ sudo systemctl start php7.2-fpm.service && ps --no-headers -o "rss,cmd" -C php-fpm7.2 | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }' 18M
- Déterminez le nombre de pm.max_children en appliquant la méthode de calcul suivante :
pm.max_children = mémoire allouée (en Mo) / mémoire utilisée par un processus fils
Dans notre exemple : 256 / 18 = 14 - Éditez à nouveau le fichier /etc/php/7.2/fpm/pool.d/ttrss.conf et ajustez la valeur du paramètre pm.max_children :
[ttrss] listen = /var/run/ttrss.sock listen.owner = ttrss listen.group = www-data user = ttrss group = www-data pm = ondemand pm.max_children = 14 pm.process_idle_timeout = 60s pm.max_requests = 500
- Arrêtez le service php-fpm :
- pm.process_idle_timeout : durée en secondes avant qu’un processus fils inactif soit détruit.
- pm.max_requests : nombre de requêtes que chaque processus fils devra exécuter avant d’être détruit. Cette valeur ne doit pas être trop élevée afin de contourner d’éventuelles fuites mémoires, ni trop faible pour ne pas solliciter régulièrement le CPU à chaque création de processus fils. 500 reste une valeur recommandée.
Redémarrez le service php-fpm afin d’activer le nouveau pool ttrss :
$ sudo systemctl restart php7.2-fpm.service
7 – Création de la base de données sous MariaDB
7.1 – Installation de MariaDB
Installez les paquets suivants :
$ sudo apt-get install -y mariadb-server mariadb-client
7.2 – Configuration de MariaDB
Lancez le script de configuration (recommandé) :
$ sudo mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): [Touche Entrée] OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] Y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] Y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] Y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] Y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
7.3 – Création de la base de données ttrss
- Tout d’abord, connectez-vous sur l’interface MySQL avec l’utilisateur root et grâce au mot de passe saisi lors de la configuration de MariaDB :
$ sudo mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 49 Server version: 10.1.29-MariaDB-6 Ubuntu 18.04 Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
- Créez la base de données ttrss :
MariaDB [(none)]> CREATE DATABASE ttrss; Query OK, 1 row affected (0.00 sec)
Tout comme pour la gestion du répertoire ttrss et pour plus de sécurité, vous allez tout d’abord créer un utilisateur MySQL ttrss dédié à la base de données ttrss, renseigner un mot de passe et ensuite lui donner les droits sur cette base de données :
MariaDB [(none)]> CREATE USER "ttrss"@"localhost"; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> SET password FOR "ttrss"@"localhost" = password('mon_password'); Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON ttrss.* TO "ttrss"@"localhost" IDENTIFIED BY "mon_password"; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> EXIT Bye
8 – Nom de domaine & virtual host
- Créez le fichier suivant /etc/nginx/sites-available/ttrss et modifiez les lignes en surbrillance en fonction de votre configuration :
server { listen 80; listen [::]:80; server_name ttrss.mondomaine.com; root /var/www/ttrss; location / { index index.php; } location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/ttrss.sock; } location /cache { deny all; } location = config.php { deny all; } }
- Activez le virtual host :
$ sudo ln -s /etc/nginx/sites-available/ttrss /etc/nginx/sites-enabled/ttrss
- La nouvelle configuration sera prise en compte après redémarrage du service Nginx :
$ sudo systemctl restart nginx.service
9 – SSL/TLS avec Let’s Encrypt
Let’s Encrypt est une autorité de certification libre, automatisée et ouverte. Cette autorité fournit des certificats gratuits X.509 pour le protocole cryptographique SSL/TLS au moyen d’un processus automatisé destiné à se passer du processus complexe actuel impliquant la création manuelle, la validation, la signature, l’installation et le renouvellement des certificats pour la sécurisation des sites internet. En juin 2017, Let’s Encrypt a livré plus de 40 millions de certificats.
9.1 – Installation
Installez les paquets software-properties-common et certbot :
$ sudo apt-get install -y software-properties-common $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update $ sudo apt-get install -y certbot
9.2 – Génération des certificats
Let’s Encrypt permet de générer de différentes façons plus ou moins automatisées un certificat. La méthode standalone permet de générer simplement un certificat. En revanche, celle-ci demande d’arrêter le serveur Nginx et ceci est valable à chaque renouvellement dudit certificat. Il existe aussi des plugins Apache et Nginx entièrement automatisés. Ces plugins mettent à jour automatiquement la configuration des virtual hosts mais le plugin Nginx est encore expérimental. Dans cet article, nous recommandons d’utiliser le plugin webroot pour Nginx qui permet de générer et renouveler son certificat sans interrompre le serveur Nginx.
Le plugin webroot crée un fichier temporaire /var/www/ttrss/.well-known/acme-challenge dans le dossier racine de votre tt-rss, celui-ci permettra aux serveurs de Let’s Encrypt de valider votre certificat en appelant ce fichier temporaire.
- Générez votre certificat en remplaçant email@mondomaine.com et mondomaine.com par vos informations personnelles :
$ sudo certbot certonly --webroot -w /var/www/ttrss --agree-tos --email --no-eff-email email@mondomaine.com -d ttrss.mondomaine.com --rsa-key-size 4096 Saving debug log to /var/log/letsencrypt/letsencrypt.log Obtaining a new certificate Performing the following challenges: http-01 challenge for ttrss.mondomaine.com Using the webroot path /var/www/ttrss for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/ttrss.mondomaine.com/fullchain.pem. Your cert will expire on 20XX-XX-XX. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Vous obtiendrez 4 fichiers dans le répertoire /etc/letsencrypt/live/ttrss.mondomaine.com :
- cert.pem : le certificat de votre domaine ttrss.mondomaine.com
- chain.pem : le certificat Let’s Encrypt
- fullchain.pem : les certificats cert.pem et chain.pem combinés
- privkey.pem : la clé privée du certificat.
- SSL/TLS utilise un système de chiffrement asymétrique (comme RSA ou Diffie-Hellman) afin de sécuriser les échanges de vos flux. Par défaut, Nginx utilise une clé de 1048 bits. En augmentant la longueur de la clé à 4096 bits, vous augmenterez ainsi la sécurité de votre protocole SSL/TLS.
Générez une nouvelle clé Diffie-Hellman (DH) de 4096 bits et attribuez-lui un minimum de permissions :
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096 $ sudo chmod 600 /etc/ssl/certs/dhparam.pem
- Editez votre virtual host en ajoutant les lignes suivantes dans (/etc/nginx/sites-available/ttrss) en remplaçant les chemins des directives ssl_certificate, ssl_certificate_key, ssl_trusted_certificate et ssl_dhparam par l’emplacement de vos certificats et de la clé DH précédemment générés :
server { listen 80; listen [::]:80; server_name ttrss.mondomaine.com; return 301 https://$host$request_uri; } server { listen 443 ssl; listen [::]:443 ssl; server_name ttrss.mondomaine.com; root /var/www/ttrss; location / { index index.php; } ssl_certificate /etc/letsencrypt/live/ttrss.mondomaine.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ttrss.mondomaine.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/ttrss.mondomaine.com/chain.pem; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED'; ssl_ecdh_curve secp384r1; ssl_session_cache shared:SSL:1m; ssl_session_timeout 1440m; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4; add_header Strict-Transport-Security max-age=31536000; location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/ttrss.sock; } location /cache { deny all; } location = config.php { deny all; } }
- Rechargez votre configuration Nginx :
$ sudo systemctl reload nginx.service
9.3 – Renouvellement automatique du certificat
Les certificats délivrés par Let’s Encrypt sont valides 90 jours. L’outil certbot fournit une option renew permettant de renouveler l’ensemble des certificats présents sur votre serveur si et seulement si ceux-ci expirent dans moins de 30 jours.
Nous allons créer une règle crontab où le script de renouvellement sera planifié pour exécution tous les lundis à 23h42. Les traces liées à l’exécution du script seront enregistrées dans un fichier /var/log/le-renew.log.
- Éditez la crontab :
$ sudo crontab -e
- Ajoutez la ligne suivante :
42 23 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
- Sauvegardez et quittez.
10 – HTTP2
Je vous conseille vivement d’activer le nouveau protocole HTTP2 qui augmentera la sécurité et la rapidité de votre tt-rss.
HTTP2 permet notamment :
- la compression des headers des requêtes et des réponses qui permet de réduire la bande passante lorsque les headers (comme les cookies) sont similaires
- le multiplexage des requêtes au serveur consistant à faire passer de multiples informations via un seul tuyau de transmission. Ainsi, on économise les multiples connexions entre le client et le serveur. Les requêtes, quant à elles, sont effectuées simultanément par le navigateur. Les requêtes ne se suivent donc plus les unes derrière les autres (HTTP1) et les plus prioritaires (CSS par exemple) ne sont plus bloquées par les moins prioritaires (images par exemple)
- le push des ressources du serveur au navigateur. Désormais, le serveur pourra envoyer l’ensemble des ressources référencées dans une même page (CSS, JS…), avant même que le navigateur n’ait analysé celle-ci.
L’activation du protocole HTTP2 est très simple et consiste en l’ajout de la directive http2 dans votre virtual host :
server { listen 80; listen [::]:80; server_name ttrss.mondomaine.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name ttrss.mondomaine.com; # Path to the root of your installation root /var/www/ttrss/; ...
Une fois la modification effectuée, n’oubliez pas de recharger votre configuration Nginx :
$ sudo systemctl reload nginx.service
11 – Améliorer les performances de votre tt-rss avec OPcache
OPcache (qui signifie Optimizer Plus Cache) est introduit depuis la version 5.5.0 de PHP. Il sert à cacher l’opcode de PHP, c’est-à-dire les instructions de bas niveau générées par la machine virtuelle PHP lors de l’exécution d’un script. Autrement dit, le code pré-compilé est stocké en mémoire. Cela évite ainsi l’étape de compilation à chaque requête PHP. De plus, OPcache va optimiser l’exécution du code afin d’en améliorer les performances.
- Éditez le fichier /etc/php/7.2/fpm/php.ini, décommentez et modifiez les lignes suivantes dans la section [opcache] :
[opcache] opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.revalidate_freq=1 opcache.save_comments=1
- La nouvelle configuration sera prise en compte après redémarrage du service PHP-FPM :
$ sudo systemctl restart php7.2-fpm.service
12 – Configuration de Tiny Tiny RSS
Lancez votre navigateur et rendez-vous à l’adresse suivante : http://ttrss.mondomaine.com/.
[Cliquez sur les images pour suivre chaque étape de la configuration de Tiny Tiny RSS]
La configuration est désormais terminée ! Connectez-vous avec le login admin et le password password. Je vous conseille fortement de changer ces valeurs par défaut et de créer un autre compte administrateur dans Actions… → Configuration… → Utilisateurs.
Pour mettre à jour vos flux, il vous suffit de double-cliquer sur les catégories. En effet, Tiny Tiny RSS ne se met pas à jour automatiquement.
Si vous optez pour une mise à jour automatique des flux, 3 solutions s’offrent à vous :
Cette méthode consiste à créer un service qui mettra automatiquement à jour vos flux.
- Ajoutez le service ttrss-backend en créant le fichier /etc/systemd/system/ttrss-backend.service :
[Unit] Description=TTRSS Backend update Documentation=https://git.tt-rss.org/fox/tt-rss/wiki/UpdatingFeeds Requires=network.target mysql.service After=network.target mysql.service [Service] User=ttrss Group=www-data ExecStart=/var/www/ttrss/update_daemon2.php [Install] WantedBy=multi-user.target
- Activez et démarrez le service ttrss-backend :
$ sudo systemctl daemon-reload $ sudo systemctl enable ttrss-backend $ sudo systemctl start ttrss-backend
La deuxième méthode consiste à créer une tâche via crontab qui s’exécutera périodiquement (toutes les 30 minutes dans notre exemple) :
- Connectez-vous sous l’utilisateur ttrss :
$ su ttrss
- Éditez la crontab :
$ crontab -e
- Ajoutez la ligne suivante :
*/30 * * * * /usr/bin/php /var/www/ttrss/update.php --feeds --quiet
Sauvegardez et quittez.
Enfin la dernière méthode consiste à modifier le fichier de configuration de Tiny Tiny RSS. La mise à jour se fait uniquement via l’interface web de Tiny Tiny RSS, ce qui implique que celle-ci doit être ouverte dans un navigateur pour que les flux se mettent à jour. Cette méthode peut présenter des inconvénients pour les utilisateurs de l’API Tiny Tiny RSS et de l’application Android.
- Connectez-vous sous l’utilisateur ttrss :
$ su ttrss
- Dans le fichier /var/www/ttrss/config.php, modifiez la constante SIMPLE_UPDATE_MODE à true pour activer la mise à jour automatique :
- Enfin revenez sous votre super utilisateur et relancez Nginx et PHP-FPM pour prendre en compte la nouvelle configuration :
$ exit $ sudo systemctl restart nginx $ sudo systemctl restart php7.2-fpm.service
13 - Améliorer l'extraction des contenus avec Mercury Web Parser
Tiny Tiny RSS extrait le contenu de chaque article à partir du feed RSS. Cependant, la plupart des sites produisant ces flux RSS ont le contrôle sur ces flux et ces derniers ne contiennent que le résumé des articles ou des contenus tronqués.
Il existe un plugin mercury_fulltext qui extrait l'intégralité du contenu d'un article. Ce plugin utilise l'API de Mercury Web Parser qui se charge d'extraire le contenu pertinent d'un article directement à la source de celui-ci (via l'URL) et non à partir du feed.
- Créez un compte sur Mercury et récupérez la clé de l'API.
- Connectez-vous sous l'utilisateur ttrss :
$ su ttrss
- Téléchargez les sources du plugin mercury_fulltext dans le dossier plugins :
$ git clone https://github.com/WangQiru/mercury_fulltext.git /var/www/ttrss/plugins/mercury_fulltext
- Revenez sous votre super-utilisateur et modifiez les droits du dossier /var/www/ttrss/plugins/mercury_fulltext :
$ exit $ sudo chown -R ttrss:www-data /var/www/ttrss/plugins/mercury_fulltext
- Connectez-vous sur l'interface tt-rss et activez le plugin mercury_fulltext dans Configuration → Plugins → Plugins utilisateurs. Cette opération doit être répétée pour chacun de vos utilisateurs.
- Enregistrez la clé de l'API dans Flux → Mercury_fulltext settings (mercury_fulltext).
- Dans Flux, il faut activer le plugin mercury_fulltext pour chacun de vos abonnements. Il faut modifier le flux en cliquant directement sur celui-ci puis se rendre dans l'onglet Plugins pour activer Mercury.
14 - Installation d'un thème
Il est possible de modifier le thème par défaut, vous trouverez une liste de thèmes compatibles sur le site officiel.
Dans ce tutorial, nous allons installer le thème Feedly qui se base sur le thème du célèbre agrégateur du même nom.
- Connectez-vous sous l'utilisateur ttrss et déplacez-vous dans le répertoire des thèmes de tt-rss :
$ su ttrss $ cd /var/www/ttrss/themes
- Téléchargez l'archive du thème :
$ wget https://github.com/levito/tt-rss-feedly-theme/archive/master.tar.gz
- Décompressez l'archive :
$ tar xvf master.tar.gz --strip-components=1
- Supprimez l'archive téléchargée :
$ rm master.tar.gz
- Revenez sous votre super utilisateur et permettez à Nginx de lire les fichier statiques :
$ exit $ sudo chown -R ttrss:www-data /var/www/ttrss/themes
- Activez le thème dans Tiny Tiny RSS :
121Sélectionnez le thème feedly.css
2Enregistrez la configuration
15 - Tiny Tiny RSS sur Android...
Découvrez l'excellente extension Tiny Tiny RSS de l'application News+ sur Android. L'application se connectera à votre serveur pour récupérer l'ensemble de vos flux. Un mode hors-connexion est aussi disponible.
Ubuntu Server 18.04 LTSNginx 1.14.0
PHP7-FPM 7.2.3
MariaDB 10.1.29
Tiny Tiny RSS 17.4
Laisser un commentaire
Rejoindre la discussion?N’hésitez pas à contribuer !