Raspberry Pi: Tiny Tiny RSS Reader installieren
RSS Feedreader werden auch in Zeiten von Facebook, Twitter und Google+ immer noch gerne benutzt. Nach dem Ende von Google Reader etablierte sich Feedly als das Mittel der Wahl am Markt. Jedoch macht man sich von solchen Anbietern abhängig, da deren Server ausfallen können (wie es bei Feedly schon öfter der Fall war) oder sich die Konditionen der Anbieter ändern können. Ein beliebter selbst gehosteter Feedreader ist Tiny Tiny RSS. Diese PHP Applikation lässt sich auch auf dem Raspberry Pi betreiben, womit man sie direkt zuhause betreiben kann. Ein weiteres Merkmal, neben dem relativ aufgeräumten Design, ist die Tatsache, dass es sowohl für Android als auch iOS Geräte, den Bewertungen zu urteilen, gute Apps gibt. Wie man Tiny Tiny RSS auf dem Raspberry Pi installiert, erkläre ich im Folgenden.
Voraussetzung: Raspbian oder vergleichbare Distribution installiert
Zunächst müssen wir einen Webserver installieren. Da nginx performanter als Apache2 ist und die Ressourcen des Raspberry Pis nicht die Größten sind, installieren wir nginx mit php5-fpm. Wie dies geht, erklärte ich bereits in dem Artikel Webserver Nginx installieren.
Nun müssen wir noch MySQL als Datenbankserver und das PHP Modul php5-curl installieren. Dies können wir bequem über den Paketmanager APT erledigen. Während der Installation müssen wir ein Passwort für den Root-Benutzer in dem MySQL-Server angeben. Dieses sollte möglichst stark sein.
sudo apt-get install mysql-server mysql-client php5-mysql php5-curl git
Wir sollten MySQL nun noch von Test-Datenbanken und anonymen Benutzern befreien, damit mehr Sicherheit gewährleistet wird. Hierzu führen wir folgendes Kommando aus. Dabei geben wir zunächst das gerade definierte Passwort ein, geben an, das Passwort nicht ändern zu wollen, den anonymen Benutzer zu löschen, den Remote Login für den Root-Benutzer zu deaktivieren, die Testdatenbank zu löschen und privilege tables zu neuzuladen.
sudo mysql_secure_installation
Nun müssen wir einen Benutzer und eine Datenbank in MySQL für Tiny Tiny RSS anlegen. Dazu müssen wir folgende Kommandos (du siehst im Folgenden die Ausgabe im Terminal) ausführen. In Zeile 8 muss PWD durch ein möglichst starkes Passwort für den Tiny Tiny RSS MySQL Benutzer ersetzt werden.
pi@raspberrypi ~ $ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. [...] mysql> CREATE DATABASE ttrss; Query OK, 1 row affected (0.01 sec) mysql> GRANT ALL ON ttrss.* TO ttrss@localhost IDENTIFIED BY 'PWD'; Query OK, 0 rows affected (0.04 sec) mysql> exit Bye
Jetzt sind wir soweit, dass wir Tiny Tiny RSS herunterladen können. Dieses speichern wir in das Webroot-Verzeichnis von nginx, wo wir es entpacken und den Ordner in tt-rss umbenennen. Zum Zeitpunkt, als dieses Tutorial entstand, war die Version 1.11 aktuell. Das Projekt hat mittlerweile ein rolling Release, weshalb wir den Quellcode vom Git Repository des Projects holen.
cd /usr/share/nginx/www
git clone https://tt-rss.org/gitlab/fox/tt-rss.git
sudo chown -R www-data:www-data tt-rss/
Hat alles geklappt, so können wir die Installation von Tiny Tiny RSS nun im Browser unter http://IP/tt-rss/install/ (IP durch IP-Adresse oder DynDNS des Raspberry Pis ersetzen; wenn eine DynDNS Domain eingesetzt wird, unbedingt über diese aufrufen) aufrufen.
Dort angekommen wählen wir MySQL in dem Feld Database type, geben als Username und Database name den Namen ttrss an und geben das in Step 4 gewählte Passwort in das Feld Password ein. Bei Port geben wir 3306 an. Das Feld Host name können wir leer lassen. Anschließend klicken wir auf Test configuration.
Haben wir die Daten richtig eingegeben, so erhalten wir die Ausgabe Database test succeeded und können anschließend auf Initialize database klicken. Daraufhin sollte ein fettes Generated configuration file erscheinen mit einer Textbox darunter. Den darinstehenden Text (Inhalt der Konfigurationsdatei) kopieren wir und fügen ihn in die config.php Datei ein. In dem Editor nano kann man einfach mittels STRG + V einfügen und speichern kann man über STRG + X, Y und Enter.
sudo nano /usr/share/nginx/www/tt-rss/config.php
Wir müssen jetzt noch ein paar Rechte von den Ordnern im Tiny Tiny RSS Verzeichnis so abändern, dass sie beschreibbar sind.
cd /usr/share/nginx/www/tt-rss
sudo chmod -R 777 cache/images
sudo chmod -R 777 cache/upload
sudo chmod -R 777 cache/export
sudo chmod -R 777 cache/js
sudo chmod -R 777 feed-icons
sudo chmod -R 777 lock
Nun ist es an der Zeit den Daemon, der die eingetragenen RSS Feeds auf neue Artikel überprüft, zu starten. Dies können wir mit folgendem Kommando bewerkstelligen.
sudo -u www-data /usr/bin/php /usr/share/nginx/www/tt-rss/update.php --feeds --daemon > /dev/null &
Damit der Daemon beim Booten des Raspberry Pis immer automatisch startet, legen wir das soeben Ausgeführte noch in den Autostart. Dazu müssen wir folgende Zeile am Ende der Datei /etc/rc.local vor exit 0 in eine neue Zeile kopieren.
sudo nano /etc/rc.local
sudo -u www-data /usr/bin/php /usr/share/nginx/www/tt-rss/update.php --feeds --daemon > /dev/null &
Zuletzt können wir nun über http://IP/tt-rss/ (IP durch IP-Adresse oder DynDNS Domain des Raspberry Pis ersetzen) Tiny Tiny RSS aufrufen und uns mit dem Benutzer admin und dem Passwort password anmelden. Die Zugangsdaten können wir nun über Aktionen (oben rechts) > Einstellungen > Benutzer ändern.
Fertig installiert! Dein Tiny Tiny RSS Feedreader ist nun einsatzbereit. Und nicht vergessen auch den Feed meines Blogs einzutragen 😉
Zugriff außerhalb des eigenen Netzwerks
Portfreigabe im Router
Soll der soeben installierte Dienst auch außerhalb des eigenen Netzwerkes verfügbar sein, so müssen folgende Ports im Router freigegeben werden. Wie man freigibt, beschrieb ich in dem Artikel Portforwarding bei Fritz!Box und Speedport.
34 Kommentare. Hinterlasse eine Antwort
Vielen Dank, die Anleitung ist superhilfreich!
Hallo Jan!
Es fehlt ein wesentlicher Teil in deinem Tutorial:
Der Eintrag des TT-RSS Scrapers in crontab.
So wie du es beschrieben hast holt TT-RSS die neusten Feeds nur ab wenn man auf TT-RSS zugreift, was nicht funktioniert wenn man mal ein paar Tage TT-RSS nicht nutzt, dann kann es sein das manche Meldungen in manchen Feeds schon wieder raus gefallen sind.
In der TT-RSS Dokumentation wird ausdrücklich darauf hingewiesen das diese Methode unvorteilhaft ist.
Wäre vorteilhaft wenn du das noch hinzufügen könntest.
Grüße,
Chris
Schöner Artikel, ich lese dich auch via ttrss.
Du solltest aber noch dringend darauf hinweisen, dass man nach der Installation noch einen Update Daemon einrichten muss. Sonst macht ttrss nämlich gar keinen Sinn. Im Raspberry Pi Forum steht auch wie das geht:
http://www.forum-raspberrypi.de/Thread-tutorial-google-reader-und-feedly-alternative-zum-selber-hosten-tiny-tiny-rss
Danke euch beiden für den Hinweis. Der Punkt aus der Doku ging mir beim Schreiben durch die Lappen. Habe ich nun aber ergänzt.
Die Updates sollte man statt mich crontab aber besser per php update daemon erledigen. Ist wesentlich effizienter und belastet den Pi weniger als cron.
Habe auch deinen Verbesserungsvorschlag umgesetzt.
Hatte Tiny Tiny RSS auch mal ausprobiert, war aber irgendwie nicht so ganz zufrieden damit. Dieser Feed Reader ist ne nette Alternative zu Tiny Tiny RSS: https://github.com/Cacodaimon/CacoCloud
Das Projekt hat jedoch noch keine Releases und kein Build System, weshalb ich davon ausgehen muss, dass die Software noch nicht als stabil zu betrachten ist.
Seit ca. 2 Monaten nutze ich selbst Tiny Tiny RSS auf dem RPi .. das war sogar mein Hauptgrund, warum ich mir diesen „Supercomputer“ /wie es meine Tochter einmal genannt hat/ zugelegt habe.
Allerdings ich muss fragen, warum man sich für MySQL und nicht für PostgreSQL entschieden hat. PostgreSQL wird aus performance Gründen nämlich als bevorzugter „database backend“ empfohlen …
Ich denke so stark sollte der Unterschied nicht zu spüren – außer die Instanz wird von vielen Leuten zur selben Zeit genutzt 😉 Beide Datenbankserver haben Vor- und Nachteile. Ich habe mich in diesem Fall, aus Gewohnheit, für MySQL entschieden.
Hmmm … da ich beide Datenbanksysteme vorher gar nicht kannte, war ich nicht „vorbelastet“ und folgte in diesen Punkt die TTRSS Wiki.
Obwohl, wenn man so guckt, MySQL wäre für meine andere, später enstandene, kleinere Projekte (WordPress, MediaWiki) der besserer Wahl gewesen 🙂
Aus reinen ungesunden Neugier habe noch eine Frage: wie hoch „klettert“ der CPU Load beim Feedsaktualisierung in deinem System?
Ich habe 3 aktive Benutzer, die zusammen ca. 250 Feeds beobachten … „mein“ CPU Load geht dann für ein paar Minuten auf 2,5 bis 3,5 hoch, in „normalen“ Betrieb liegt es aber völlig unbedenklich deutlich unter 1.
Wenn man mit anderen PHP Apps noch etwas rumspielt ist MySQL auf jeden Fall die sinnvoller Wahl, da mehr Apps dieses unterstützen als PostgreSQL.
Bzgl. Load: Ich habe es nur mal getestet und kann dir keine Vergleichswerte liefern, jedoch klingen die Daten, die du gepostet hast, für mich relativ normal, da der Raspberry Pi ja nicht der Leistungsstärkste ist 😉
Danke für deine Einschätzung.
Hallo Jan,
obwohl ich ein absoluter Raspberry Pi- und Linuxanfänger bin, hat die Installation Dank Deiner Anleitung wunderbar funktioniert.
Vielen Dank dafür.
Ich habe allerdings noch eine Frage:
Kann ich, zusätzlich zu der Tiny Tiny RSS-Installation, auch noch Seafile auf dem Raspberry Pi installieren oder ist das nicht empfehlenswert?
Gruß
Klaus
Geht, aber ist von der Performance her meiner Erfahrung nach äußerst knapp.
Hallo Jan,
vielen Dank für Deine Einschätzung. Dann werde ich mir einen zweiten Pi kaufen.
Zur TTRSS-Installation habe ich noch zwei Fragen:
1. Wo und wie stelle ich den Update-Intervall ein, z. B. alle 15 Minuten aktualisieren?
2. Gibt es eine Log-Datei, wo ich sehen kann, ob die Aktualisierungen ohne Fehler durchlaufen?
Ich habe schon im Netz recherchiert, aber zu beiden Fragen keine Antwort gefunden.
Wäre schön, wenn Du mir noch einmal helfen könntest.
Vielen Dank.
Gruß
Klaus
Zu 1: Beim Daemon weiß ich ehrlich gesagt nicht ganz genau wie dieser funktioniert. Aber jedoch denke nicht mit klassischen fixen Intervallen.
Zu 2: In Step 8 könntest du „/dev/null“ durch „/var/log/ttrss.log“ ersetzen. Dann findest du unter /var/log/ttrss.log die Logfiles.
Versuche gerade TTRSS auf meinem Seafile Server (https) zu installieren – stecke aber bei Punkt 6 fest, bei der Installation.
Bekomme die Meldung:
403 Forbidden
nginx/1.2.1
Vermutlich muß ich eine 2. nginx-Instanz für TTRSS erstellen. Wie mach ich das?
Was muß man noch alles beachten?
Eine zweite Instanz brauchst du nicht, aber eine zweie site config. Der Aufbau ist nicht ganz easy, jedoch im Nginx Wiki beschrieben.
Kann nichts finden. Läuft das unter „virtual hosts“?
Das ist hierfür ebenfalls eine gängige Bezeichnung.
Das ist die 2. site config:
server {
listen 2345;
ssl on;
ssl_certificate /etc/nginx/ssl/seahub.crt;
ssl_certificate_key /etc/nginx/ssl/seahub.key;
error_page 497 https://$host:$server_port$request_uri;
root /usr/share/nginx/www/tt-rss/install;
server_name myserver.de;
}
https://myserver.de:2345 –> 403 forbidden
Was mach ich falsch?
Hat es einen Grund, dass du den root in das install Verzeichnis gesetzt hast? Bist du sicher, dass die Rechte des Tiny Tiny RSS Ordners richtig gesetzt sind?
Danke für diese tolle Anleitung. Als Debian Anfänger ist das eine große Hilfe. Ist es richtig, dass das Starten des Daemons (Step 8) eine Meldung dieser Art ausspuckt: [1] 2088 ??
Ich finde die Anleitung super jedoch hänge ich bei der Installation von tt-rss im Browser fest, da ich einfach nicht auf die Site komme.
Auf 10.0.0.6 (was die Ip meines Pi’s ist) kann ich problemlos zugreifen und bekomme die nginx Standartmeldung: „Welcome to nginx!“. Aber wenn ich ein paar Ebenen tiefer gehen will (10.0.0.6/tt-rss/install/) kommt das die Website nicht vorfügbar ist.
Hast du eine Lösung dafür?
Ich nutze übrigens die Version 1.13 von tt-rss
Bist du dir sicher, dass du die Rechte wie in Step 7 erklärt gesetzt hast?
Ich habe dasselbe Problem wie Moritz:
Bei Aufruf nur mit der IP meldet sich nginx, URL mit Zusatz „/tt-rss/install/“ meldet Website nicht verfügbar, Ordnerberechtigungen aus Step 7 habe ich gesetzt, obwohl die Konfiguration per Browser ja schon in Step 6 durchgeführt wird.
Hast du einen Tipp?
Hallo Jan,
ich habe die Schritte befolgt und kann mich nun nicht einloggen. Gebe ich im Login-Fenster den User ‚admin‘ und mein gewähltes Passwort aus Schritt 4 ein, bekomme ich ‚Benutzername oder Passwort falsch‘. Ich habe zusätzlich einen Seafile- und Baikal-Server am Laufen (auch nach deiner Anleitung). Kann das damit zusammenhängen? Woran kann das liegen?
Übrigens: Vielen Dank für deine Tutorials!
Gruß,
Marcel
bekomme auch eine Warnung in Schritt 8:
> sudo -u www-data /usr/bin/php /usr/share/nginx/www/tt-rss/update.php –feeds –daemon > /dev/null &
PHP Warning: PHP Startup: Unable to load dynamic library ‚/usr/lib/php5/20100525+lfs/sqlite.so‘ – /usr/lib/php5/20100525+lfs/sqlite.so: cannot open shared object file: No such file or directory in Unknown on line 0
Und zusätzlich nach dem Login folgende Fehlermeldung:
curl: option –feeds: is unknown
kann mir jemand helfen?
Klingt mir so als sei SQLite von den anderen Anwendungen zerschossen. Versuch das doch noch einmal drüber zu installieren:
sudo apt-get install php5-sqlite
bringt leider auch nichts. Habe bis jetzt auch noch nicht herausgefunden, woran das liegen kann. Gibt es evtl. Logfile wo man nachschauen könnte?
[…] oder an der Konfiguration kommt eine entsprechende Meldung im Webfrontend. Quelle: Unter anderem Jan Karres und […]
Hallo,
ich hänge bei Schritt 5 und 6. (Ein bisschen veraltet ist die Anleitung ja schon, einige Links sind nicht mehr aktuell.)
Ich komme zwar bei Schritt 6 mit meiner dyndns auf die install-Seite, aber wenn ich auf „Test Configuration“ klicke, kommt eine Fehlermeldung:
Dann gibt’s leider auch kein config file für mich.
Leider finde ich keine FAQ für tiny tiny rss und kann auch die Antwort nicht durch eine Internetsuche heraus bekommen. Hast du vielleicht eine Idee? Danke.
Vielen Dank für das Tutorial! Ließ sich ohne Probleme einrichten. Allerdings mußte das Root-Verzeichnis noch angepaßt werden. Bei /etc/nginx/sites-available/default steht bei root /var/www/ drin. Das muß geändert werden zu /usr/share/nginx/html/. Denn Nginx wird mit dem Verzeichnis html ausgeliefert, nicht mit www. Kann man ja nach Gusto ändern. Und nicht vergessen: nginx braucht dann einen restart. Sonst kommt da wieder 404.