Tiny Tiny RSS unter Ubuntu Linux

Aus Laub-Home Wiki

Dieser Artikel beschäftigt sich mit der Installation von Tiny Tiny RSS, einem Open Source News Feed Aggregator, unter Ubuntu Linux 12.04.

Einführung

Bei Tiny Tiny RSS (kurz: tt-rss) handelt es sich um eine auf PHP basierende Webapplikation mit deren Hilfe News Feeds (RSS) verwaltet werden können. Mittlerweile gibt es auch Client-Apps für Android und iOS, womit die gesammelten Feed sowohl am Desktop als auch mobil synchron gehalten werden.

Systemvorraussetzungen

Für die Installation werden folgende Elemente benötigt:

  • Ein Webserver
Theoretisch kann jeder PHP-kompatibler Webserver zum Einsatz kommen, in diesem Beispiel wird der Apache Webserver aus den Ubuntu Paketquellen verwendet.
  • PHP 5.3 oder neuere Versionen
  • Eine Datenbank
Unterstützt werden MySQL und PostgreSQL, in dem Beispiel wird MySQL eingesetzt.

Installation

Benötigte Pakete

Als erstes werden die benötigten Pakete installiert.

aptitude install apache2 mysql-server php5 php5-mysql php5-curl screen

Das Programm screen wird für die automatischen Updates der Feeds benötigt (siehe hier). Sollte man eine andere Methode wählen muss screen nicht installiert werden.

Erstellen der MySQL-Datenbank

Nun wird eine dedizierte MySQL-Datenbank mit dazugehörigem User angelegt. Dazu meldet sich man an der Datenbank als root an und geht wie folgt vor.

# Anmeldung an der Datenbank (localhost)
mysql -u root -p
CREATE DATABASE ttrss;
GRANT ALL PRIVILEGES ON ttrss.* TO 'ttrss'@'localhost' IDENTIFIED BY 'secret_password';

Erstellen des Apache vHosts

Ob nun ein dedizierter vHost für tt-rss erstellt oder dieser in einen bestehenden integriert wird ist egal. In folgendem Beispiel wird tt-rss in dem Unterordner /rss zur Verfügung gestellt.

vi /etc/apache2/sites-available/www.your-vhost.de.conf
<VirtualHost *:80>
   ServerName www.your-vhost.de
   ServerAlias your-vhost.de

   CustomLog /var/log/apache2/www.your-vhost.de-access.log combined
   ErrorLog /var/log/apache2/www.your-vhost.de-error.log

   DocumentRoot /srv/apache2/vhosts/www.your-vhost.de/htdocs/

   <Directory /srv/apache2/vhosts/www.your-vhost.de/htdocs/>
      Order deny,allow
      Options -Indexes FollowSymLinks -Includes -MultiViews
      AllowOverride None
      allow from all
   </Directory>
</VirtualHost>
# aktivieren des vHosts
a2ensite www.your-vhost.de.conf
# neustarten zum übernehmen der Änderungen
service apache2 restart

Installation des tt-rss Paketes

Nun lädt man sich das Installationspaket von tt-rss herunter, entpackt es und verschiebt es in den DocumentRoot.

cd /usr/src
wget https://github.com/gothfox/Tiny-Tiny-RSS/archive/1.7.9.tar.gz
tar -vxzf 1.7.9.tar.gz
mkdir -p /srv/apache2/vhosts/www.your-vhost.de/htdocs
mv Tiny-Tiny-RSS-1.7.9/ /srv/apache2/vhosts/www.your-vhost.de/htdocs/rss
chown -R www-data:www-data /srv/apache2/vhosts/www.your-vhost.de/htdocs

Wenn man nun die Webseite http://www.your-vhost.de/rss aufruft wird man automatisch auf die Installationsseite weitergeleitet. Dort gibt man die Datenbank-Informationen ein. Nachdem diese bestätigt wurden wird der Zugriff zur Datenbank getestet und bei einem erfolgreichem Ergebnis die config.php generiert. Beim drücken des Buttons "save configuration" wird diese automatisch im Installationsverzeichnis gespeichert. Sollte es Probleme beim speichern geben, dann auch der angezeigt Inhalt per Hand im Installationsverzeichnis als "config.php" gespeichert werden. Sobald dies erledigt ist, kann man sich an der Oberfläche anmelden.

Das Admin-Passwort muss sofort geändert werden, da es sehr unsicher ist. Auch sollte der Admin-Account, wie der Name schon sagt, für rein administrative Zwecke eingesetzt werden und nicht zum Verwalten von News Feeds. Dafür sollte ein dedizierter User Account angelegt werden.

(automatisches) Update der Feeds

Standardmäßig werden Feeds nur dann aktualisiert, wenn man auf den jeweiligen Feed doppelklickt. Dies kann, wenn man sehr viele Feeds hat, sehr aufwendig sein. Daher gibt es einige Möglichkeiten, dies zu automatisieren. Am einfachsten führt man auf dem Terminal folgenden Befehl aus:

# Für single process
sudo -u www-data screen -d -m /usr/bin/php /srv/apache2/vhosts/www.simonask.de/htdocs/rss/update.php --daemon
# Für multi process
sudo -u www-data screen -d -m /usr/bin/php /srv/apache2/vhosts/www.simonask.de/htdocs/rss/update_daemon2.php

Dieser Befehl startet als User www-data (von der Ausführung als root wird abgeraten) eine screen Session mit dem Update daemon und detached sie gleich (sie läuft im Hintergrund).

Damit der Daemon nach einem Reboot automatisch gestartet wird muss der oben aufgeführte Befehl in die /etc/rc.local Datei eingefügt werden. Vielen Dank hierfür an einen Leser, der mich auf diese Lösung aufmerksam gemacht hat :-)

Alternativ kann auch das sogenannte Simple Update genutzt werden. Dazu muss in der config.php der Wert von SIMPLE_UPDATE_MODE auf true gesetzt werden:

# Standard-Eintrag
define('SIMPLE_UPDATE_MODE', false);
# Neuer Eintrag
define('SIMPLE_UPDATE_MODE', true);

Ist Simple Update aktiv werden die Feeds automatisch aktualisier, solange die Weboberfläche geöffnet ist (nicht wenn man über eine mobile App zugreift!). Der Intervall ist standardmäßig 30 Minuten, kann allerdings in den Einstellungen geändert werden.

Erhöhte Sicherheit

Zugriff Über SSL

Soll der Zugriff verschlüsselt über SSL zur Verfügung gestellt werden, dann kann man die folgende vHost-Konfig verwenden (anstatt die weiter oben):

<VirtualHost *:443>
   ServerName www.your-vhost.de
   ServerAlias your-vhost.de

   CustomLog /var/log/apache2/www.your-vhost.de-access.log combined
   ErrorLog /var/log/apache2/www.your-vhost.de-error.log

   DocumentRoot /srv/apache2/vhosts/www.your-vhost.de/htdocs/

   # SSL
   SSLEngine On
   SSLHonorCipherOrder On
   # No weak cyphers
   SSLCipherSuite ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH
   SSLProtocol SSLv3 +TLSv1
   SSLCertificateFile /etc/apache2/ssl.crt/www.your-vhost.de.crt
   SSLCertificateKeyFile /etc/apache2/ssl.key/www.your-vhost.de.key

   <Directory /srv/apache2/vhosts/www.your-vhost.de/htdocs/>
      Order deny,allow
      Options -Indexes FollowSymLinks -Includes -MultiViews
      AllowOverride None
      allow from all
   </Directory>
</VirtualHost>

Für SSL benötigt man ein SSL-Zertifikat. Will man hierfür kein Geld für ein "offizielles" Zertifikat ausgeben, kann ein sogenanntes SelfSign Zertifikat genutzt werden (siehe hier). Dann erscheint allerdings beim Aufruf eine Zertifikatswarnung, dass dem Aussteller nicht vertraut werden kann.

Absichern der Anmeldung mit Basic-/DigestAuth

Sollte man nicht wollen, dass der PHP-Anmeldedialog offen im Internet steht, kann dieser mit entweder Basic- oder Digest Auth abgesichert werden. Siehe dazu die Artikel:

Soll ein SSL-vHost abgesichert werden, kann die BasicAuth genutzt werden, da die komplette Kommunikation verschlüsselt abläuft. Bei einem normalen vHost über HTTP sollte die Digest Auth verwendet werden, da bei der BasicAuth das Passwort praktisch unverschlüsselt im HTTP-Header übertragen wird. D.h. ein Angreifer könnte die Verbindung abhören und so das Passwort erfahren. Bei der Digest Auth wird Benutzername und Passwort im Header verschlüsselt.

Anpassen von Dateirechten

In dem Beispiel weiter oben haben wir alle Dateien dem User www-data (Apache) gegeben. Will man dies allerdings nicht, da z.B. www-data auf so wenig Daten wie möglich Schreibrechte haben soll, so kann man diesen Schritt auch überspringen und stattdessen folgendes absetzen:

cd /srv/apache2/vhosts/www.your-vhosts.de/rss/
chmod -R 777 cache/export cache/images cache/upload cache/js feed-icons lock

Dadurch bekommt www-data nur auf diese sechs Verzeichnisse Schreibrechte anstatt auf alles.

Mobiler Zugriff

Android

Für Android gibt es eine Vielzahl an Apps, mit welchen man auf seine tt-rss Installation zugreifen kann. Ich habe die App TTRSS-Reader ausprobiert. Diese hat den Vorteil, dass sie kostenlos ist (im Gegensatz zur offiziellen App des tt-rss Projektes ist auch nicht der Kauf eines Keys nach 7 Tagen notwendig) und HTTP Authentifizierung unterstützt. D.h. man kann seinen Account von tt-rss und den der HTTP Authentifizierung getrennt angeben. Allerdings scheint die App ein Problem mit der DigestAuth zu haben, daher empfehle ich den Zugriff über SSL und BasicAuth abzusichern.

Benutz man ein SelfSign-Zertifikat muss man außerdem angeben, dass alle Hosts und Zertifikate akzeptiert werden sollen oder einen eigenen Keystore benutzen.

iOS

Bei einer Suche im AppStore habe ich nur zwei Apps gefunden, von der eine nur für iPhone und kostenpflichtig ist. Die zweite unterstützt scheinbar keine HTTP Authentifizierung.

Importieren von Google Reader Daten

Exportieren aus Google Reader

Im Google Reader oben rechts auf das Zahnrad klicken und auf "Google Reader-Einstellungen" gehen. Dann unter Export/Import unten den Link "Download your data through Takeout" auswählen. Dadurch kommt man in Google Takeout. Auf "Archiv erstellen" gehen und dann bei dem aktuellsten auf Herunterladen klicken. Nun muss man nochmal sein Google Passwort eingeben und dann beginnt der Download der ZIP-Datei.

Importieren von Feeds in tt-rss

Zuerst muss das Heruntergeladene ZIP-Archiv entpackt werden. Dann als User, welcher die Feeds erhalten soll, an tt-rss anmelden und rechts oben auf Aktionen > Einstellungen gehen. Im Reiter "Feeds" unter dem Feeds-Fenster auf OPML gehen und "Datei auswählen" klicken. In dem entpackten Ordner dann die subscriptions.xml auswählen und dann auf OPML importieren gehen. Fertig.

Importieren von markierten und geteilten Items

Hierzu muss im tt-rss in den Einstellungen unter Plugins das Plugin "googlereaderimport" aktiviert werden (Haken setzen). Einstellungen speichern und in den Feeds-Reiter wechseln. Nun befindet sich als unterster Punkt eine Option "Importiere markierte oder geteilte Einträge aus dem Google Reader". Diese auswählen, auf "Datei auswählen" gehen und im entpacken Archiv die starred.json für markierte und die shared.json für geteilte Artikel auswählen und mit "Importiere meine markierten Einträge" bestätigen.

Weblinks