FreshRSS

¿Se acuerdan de la Really Simple Syndication? Bueno, no, nadie los conocía por su nombre sino por sus siglas: ¿Se acuerdan de los RSS? Algunos jamás los usaron pero otros estaban suscritos a sus publicaciones favoritas a través de Google Reader u otras plataformas (algunas de escritorio, otras en la web). Te permitía recibir actualizaciones de todos los blogs o portales de noticias que seguías entrando a una sola aplicación y dando un vistazo rápido. Aparentemente era más rentable atraer visitas directo a la página y cayeron en desuso pero era muy práctico, especialmente en la era de los blogs.

Hoy está muy en boga utilizar un equipo casero para mantener aplicaciones así que he decidido usar mi Raspberry Pi para almacenar mis RSS y verlos donde quiera que esté. Es allí donde entra FreshRSS. FreshRSS es una aplicación web que funciona con PHP y un motor de bases de datos o SQLite y que almacena los RSS de los blogs que uno quiere revisar. FreshRSS permite visualizar los sitios y los mantiene actualizados, además de realizar tareas algo más avanzadas como tener varios usuarios a la vez, ver feeds de pago (con usuario y contraseña) o hacer “web scrapping” para recuperar el contenido que el RSS mismo no nos trae (no todos los RSS traen el contenido completo, a veces es sólo el enlace o un extracto).

Instalando FreshRSS

Para instalarlo necesitamos 3 cosas:

  1. Un servidor web (Apache, nginx o algo similar)
  2. Una versión reciente de PHP con ciertos módulos activados (están detallados en el README)
  3. Un motor de base de datos (los típicos MariaDB o Postgresql pero un sqlite igual sirve, yo uso eso para mi instancia monousuario)

Además necesitas un dominio o un subdominio para usarlo. Si lo quieres usar fuera de tu casa lo más probable es que lo necesites.

Las instrucciones están en el repositorio pero están en inglés (obvio). Como supondrán dado que nunca lo he mencionado acá, no soy muy fan de docker, uno tiene que saber lo que está metiendo en su equipo, si no no se aprende nada y sobre todo en un Raspberry Pi donde los recursos son escasos (no uso mi Raspberry Pi sólo para esto).

Lo primero que tenemos que hacer es descargar FreshRSS, preferentemente clonado del repositorio, modificarlo y moverlo a /usr/share/FreshRSS/ estableciendo un enlace simbólico de la carpeta p/ al servidor web. Luego hay que dejar que el usuario que utiliza el servidor web para ejecutarse tenga acceso a data/

# chown www:www /usr/share/FreshRSS/data/

o en el caso de Raspbian con Nginx:

# chown www-data:www-data /usr/share/FreshRSS/data/

Para nginx utilizo una configuración muy similar a esta (que es la que aparece en la documentación):

server {
	listen 80;
	listen 443 ssl;

	# HTTPS configuration
	ssl on;
	ssl_certificate /etc/nginx/server.crt; # es preferible cambiar estos por un certificado let's encrypt 
	ssl_certificate_key /etc/nginx/server.key;

	# your server’s URL(s)
	server_name rss.example.net;

	# the folder p of your FreshRSS installation (enlace simbólico a /usr/share/FreshRSS/p/)
	root /var/www/p/;

	index index.php index.html index.htm;

	# nginx log files
        # revisa que /var/log/nginx exista
	access_log /var/log/nginx/rss.access.log;
	error_log /var/log/nginx/rss.error.log;

	# php files handling
	# this regex is mandatory because of the API
	location ~ ^.+?\.php(/.*)?$ {
		fastcgi_pass unix:/var/run/php/php7.0-fpm.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;
	}

	location / {
		try_files $uri $uri/ index.php;
	}
}

Luego al entrar al sistema se entra a un proceso de instalación y configuración donde le indicamos cómo queremos usar FreshRSS de forma básica, por ejemplo, para personalizar su nombre, logo o determinar el motor de base de datos, el nombre de la base, etc.

Después es necesario configurar la automatización de las actualizaciones de los RSS:

Es necesario agregar una tarea al cron, bien como www-data o como root que haga lo siguiente:

30 * * * * php -f /usr/share/FreshRSS/app/actualize_script.php > /tmp/FreshRSS.log 2>&1

La tarea de arriba está configurada como ejecutable por www-data y se ejecuta a los 30 minutos de cada hora. Puede configurarse más rápido pero creo que ese tiempo está bien y si tienes muchos feeds es posible que a tu servidor le tome algo de tiempo llevar a cabo la tarea. Esto es importante porque de no estar esta tarea programada vas a tener que actualizar los feeds manualmente desde la web.

Si creaste una base de datos con un motor de bases de datos como MariaDB o Postgres recuerda tener a mano los datos para ingresarlos en el proceso de instalación. Entonces entra a (siguiendo la configuración de arriba) a rss.example.net y sigue las instrucciones. Como dice la documentación, para que funcione la actualización de los RSS tienes que darle permisos de escritura al grupo, esto es, a www-data sobre la carpeta p/ para que se pueda actualizar desde la web.

Utilizando FreshRSS

Agregar un feed en FreshRSS

La interfaz es muy amigable. Todo lo que hay que hacer es pulsar el botón con la flecha azul al lado de “Administración de suscripciones” y agregas el RSS, al cual le puedes asignar una categoría e incluso etiquetas.

Lo que también puedes hacer es editar el RSS para obtener el texto completo. Si sabes algo de HTML y CSS entiendes de lo que estoy hablando. Como muchos RSS te intentan hacer ir a la web para monetizar anuncios es mejor traer directamente el texto desde la página a la que apunta cada entrada y así no tener que hacer clic ¿no?

Modificar un feed en FreshRSS

Interacción con Android y iOS

Ojo que FreshRSS requiere que te crees una cuenta de usuario pero también necesita otra contraseña más para acceder desde una aplicación de RSS (y se define en Configuración -> Perfil) Si no aparece tienes que habilitarlo dentro de la carpeta data/config.php y dejar 'api_enabled' => true Yo uso la de FreshRSS que encontré en F-Droid pero hay otras detalladas en una tabla en el README del repositorio. Ahí tienes que elegir la que te sirva más. Tuve algunos problemas al principio por temas de permisos y por no fijarme en la existencia de las carpetas que estaban indicadas en los archivos de configuración, así que si no te resulta la comunicación entre un smartphone y tu instancia probablemente es por eso.

FreshRSS en Android

Una vez con esa clave puedes entrar a tu instancia utilizando una aplicación y dando la contraseña de API en vez de la contraseña de la web.

Conclusión

Así que ahí está mi recomendación. Creo que es un software muy útil y al menos yo lo uso todos los días, de paso esto le da más sentido a mi Raspberry Pi. Quizás si fuese un modelo más reciente le hubiera agregado un motor de MariaDB o de Postgres para ir a juego y crearle cuentas a amigos. Ya con que funcione estoy contento.

El próximo artículo ya está pensado y será sobre un complemento a FreshRSS y bastante útil por sí solo también que se llama Wallabag.