Google Reader è morto e ora...? Ci pensa TT-RSS

ttrss-logo

Google Reader è stato "terminato" il primo di luglio. Io personalmente ero uno di quei tanti che lo usava in maniera particolarmente intensiva.
La mia scuola di pensiero è che non ci si può affidare ai social network per veicolare un flusso coerente di notizie, ma soprattutto poterle fruire in modo ordinato. Nulla potrà mai sostituire lo stream RSS, e nel dire questo è anche corretto ricordare il caro Aaron Swartz.
Sarò pur vecchia scuola ma non riuscirei nemmeno per un secondo a concepire l'idea di utilizzare Google+, Twitter o Facebook per leggere le varie news. Magari questo potrebbe andare bene con qualche sottoscrizione ma con centinaia di sottoscrizione immagino sia la ricetta per non capire una mazza e diventare letteralmente stupidi. Un reader RSS web-based è sicuramente più auspicabile. Un client RSS desktop lo trovo poco pratico, ormai è risaputo che tablet, smarpthone, molteplici PC sono alla base di una persona che di IT se ne intende almeno un pochino. D'altro canto la possibilità di fruire delle proprie feed da qualsiasi luogo e da qualsiasi dispositivo è sicuramente l'obbiettivo migliore.

Feedly è in lizza per diventare l'erede di Google Reader. Seppur ora sia disponibile in versione totalmente web-based, senza l'ausilio di estensioni sul browser, questo prodotto non mi convince proprio per niente. Sarò io che sono troppo affezionato allo stile del vecchio Reader by Google o che sono propenso per una soluzione self-hosted. Lo ho utilizzato due giorni e poi sono passato ad altro.

Come appena detto, prediligo di gran lunga una soluzione self-hosted ad un servizio gestito da terzi. Questo mi permette di averete il massimo controllo su ogni aspetto e soprattutto qualsiasi dato rimane in mano mia. Quindi sotto con il DIY. 😀
Self-hosted implica che ci si prenda in carino la realizzazione e il mantenimento dell'intera infrastruttura. Non è sicuramente l'alternativa migliore per chi vuole avere la "pappa pronta" però è un ottimo modo per imparare ed affrontare potenziali problemi.

Alla fine ho trovato quello che fa per me, e soddisfa in pieno la filosofia "se vuoi una cosa fatta bene... fattela da solo :D". La risposta non poteva che essere che Tiny Tiny RSS. Soluzione seft-hosted per la gestione dei flussi RSS. L'implementazione tuttavia non è proprio alla portata di tutti, in quanto è necessario avere a disposizione una VPS o un server dedicato. Gli shared hosted potenzialmente potrebbero avere problemi, in quanto solitamente non permettono l'esecuzione perpetua di script php e in pochi offrono crontab.

Personalmente utilizzo una VPS CentOS ed nginx come webserver, ovviamente tt-rss gira alla perfezione ed è super-reattivo. La macchina ha a disposizione 1GB di RAM e due core, un'esagerazione per quello che deve fare. 😀

Giusto per la cronaca, quando si parla di soluzioni RSS self-hoted Tiny-Tiny RSS non è l'unico nome che compare, alcune alternative che mi vengono in mente sono: feedafever, stringer, selfoss e owncloud (anche se non è nato per fare questo lavoro). Ma sicuramente ne esisteranno molti altri.

L'installazione non è complessa, i requisiti sono l'interprete PHP, un webserver (apache o nginx) e un database MySQL o PostgreSQL. Non mi starò a dilungare su come installarlo ed implementare alcuni accorgimenti per migliorare la sicurezza. Basta fare qualche ricerca su google con le parole chiave "how to install", "secure apacha/nginx/mysql/ssh", "hardening nginx..." e così via.

Forse l'unico sbaglio che ho fatto è stato di aver utilizzato MySQL, dove lo stesso sviluppatore di tt-rss, pur garantendo il supporto al DBMS di casa Oracle, consiglia l'utilizzo di PotregeSQL. Sarà per la prossima volta.

Se siete dei grandi lettori vi suggerisco di prepararvi ad avere per le mani un DB veramente grosso, tanto per darvi un termine di paragone in 5 giorni il db è ingrassato di 30MB, con poco più di un centinaio di sottoscrizioni. Per non aggravare troppo sullo storage le immagine non vengono tenute in cache e vengono prelevate direttamente dalla sorgete. Comunque se ci pensate 30MB non sono pochi. Anche perchè a me piace tenerle le feed in quanto faccio assidue operazioni di ricerca (qualcuno ha detto Sphinx! :D). La mia politica di retention è sui 365 giorni... 😛

tt-rss è sicuramente un buon prodotto, è semplice e funzionale e mette a disposizioni funzioni veramente evolute tipo il multi-user e gestione dei profili. In termini di sicurezza è possibile abilitare l'autenticazione a due fattori tramite Google Authenticator. I plugin ufficiali e non offrono un buon grado di espandibilità. L'unica cosa che non mi ispira tantissimo è la procedura di aggiornamento delle feed. Ci sono fondamentalmente 4 vie. Aggiornamento tramite script php, questo necessita che il server permetta l'esecuzione di script php senza che quest'ultimi vengano killati dal webserver. Abbiamo l'aggiornamento tramite cron, questo necessita che cron sia disponibile sul server. L'aggiornamento ogni n minuti quando tt-rss è aperto nel browser ed infine l'aggiornamento completamente manuale che viene fatto cliccando due volte sulla subscription.

Il primo metodo è quello consigliato, il demone di upgrade però non va in background, il che non è il massimo. Il problema più grosso è che non parte automaticamente al riavvio della macchina. Quindi ad ogni reboot bisogna accedere via SSH e rilanciarlo. Senza considerare che non è il massimo lasciare che uno script php rimanga in esecuzione a tempo indeterminato...
Io per risolvere ho fatto così, ho creato il seguente file nella cartella /etc/init.d chiamandolo ttrss

#!/bin/bash
## reader daemon
# chkconfig: 345 20 80
# description: reader update daemon
# processname: reader

# Source function library.
. /etc/init.d/functions

# Define some variables
TT_PATH=""

DAEMON=/usr/bin/php
#DAEMONOPTS="update.php --daemon --feeds"
DAEMONOPTS="update_daemon2.php"

NAME=ttrss
DESC="reader update daemon"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
USER=nginx

case "$1" in
start)
printf "%-50s" "Starting $NAME..."
cd $TT_PATH

if [ ! -f $PIDFILE ]; then

daemon --user=$USER $DAEMON $DAEMONOPTS > /dev/null 2>&1 &
sleep 5
PID=`ps aux|grep -vE 'grep|runuser|bash'|grep -w '/usr/bin/php update_daemon2.php'|awk '{print $2}'`

if [ -z "$PID" ]; then
printf "%s\n" "Fail"
else
echo $PID > $PIDFILE
printf "%s\n" "Ok"
fi
fi
;;
status)
printf "%-50s" "Checking $NAME..."
if [ -f $PIDFILE ]; then
PID=`cat $PIDFILE`
if [ -z "`pgrep $PID`" ] && [ "$PID" != "`ps aux|grep -vE 'grep|runuser|bash'|grep -w '/usr/bin/php update_daemon2.php'|awk '{print $2}'`" ]; then
printf "%s\n" "Process dead but pidfile exists"
else
echo "Running"
fi
else
printf "%s\n" "Service not running"
fi
;;
stop)
printf "%-50s" "Stopping $NAME"
if [ -f $PIDFILE ]; then
PID=`cat $PIDFILE`
cd $TT_PATH
kill -HUP $PID 2>/dev/null
printf "%s\n" "Ok"
rm -f $PIDFILE
else
printf "%s\n" "pidfile not found"
fi
;;

restart)
$0 stop
$0 start
;;

*)
echo "Usage: $0 {status|start|stop|restart}"
exit 1
esac

Mi raccomando di correggere alcune variabili che trovate all'interno, come il path della cartella di tt-rss ed il nome dell'utente che esegue il webserver. Fatto questo date un chmod per consentirne l'esecuzione.

chmod +x /etc/init.d/ttrss

Ora personalmente non sono riuscito a far partire lo script tramite "chkconfig ttrss on" ho risolto tuttavia modificando il file rc.local.

nano /etc/rc.local

Ed aggiungendo:

service ttrss start

Ora il demone di upgrade sarà disponibile appena la macchina verrà accesa e continuerà ad aggiornare in background le nostre preziose feed. 😀

UPDATE

Le impostazioni che utilizzo per dare a tt-rss un google reader style sono le seguenti:

tt-rss-settings

Date poi un'occhiata al plugin ttrss-article-headline-toggle che vi permetterà di espandere/collassare la feed facendo click sull'header. Proprio come Google Reader. 😉