Tiny Tiny RSS (TTRSS) это, несмотря на название, довольно мощный агрегатор RSS новостей, главный плюс которого это то, что его можно поднять на своём собственном сервере. Далее в статье подразумевается, что у вас уже есть рабочий настроенный сервер с поддержкой PHP и MySQL, которые необходимы для работы TTRSS.

Установка

Получение TTRSS

TTRSS представляет собой набор PHP скриптов, поэтому для его установки необходимо просто распаковать архив в папку /var/www и переименовать распакованную папку в tt-rss. Установочный архив можно взять на официальном сайте в разделе Download.

Добавление базы MySQL

TTRSS в работе использует базу MySQL, которую необходимо добавить перед началом её настройки. Для этого в терминале вашего сервера введите:

mysql -p  -e "CREATE DATABASE `ttrssdb` CHARACTER SET utf8"

Настройка TTRSSS

После создания базы MySQL необходимо перейти по адресу http://www.ваш_домен./tt-rss/install. Где нужно будет ввести:

  1. Database type – Тип базы данных (MySQL)
  2. Username – Имя пользователя базы данных (root)
  3. Password – Пароль пользователя
  4. Database name – Имя созданной ранее базы данных
  5. Host name, Port – Оставляем пустыми, если база данных хранится на вашем сервере
  6. Tiny Tiny RSS URL – Место расположения TTRSS на вашем сервере.

После ввода всех данных необходимо нажать кнопку Test Configuration, после чего смотрим предупреждающие сообщения, нажимаем Initialize database, а потом Save configuration. Настройка окончена, можно заходить на WEB-интерфейс агрегатора.

Запуск службы обновления новостных лент

По умолчанию после установки новостные ленты обновляться не будут. В вики на официальном сайте описано 3 способа запуска службы обновления лент. Рассмотрим самый качественный из них с учётом того, что сервер наш собственный и воротить там можно всё, что душе угодно.

Конфигурация через init скрипт

Создайте скрипт запуска службы в /etc/init.d/ttrss-update

ttrss-update
#! /bin/sh
### BEGIN INIT INFO
# Provides:          skeleton
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO
 
# Author: Ваше имя здесь
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
 
# Do NOT "set -e"
 
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/bin/php:/sbin:/usr/sbin:/bin:/usr/bin
DESC="Update tt-rss feeds"
NAME=ttrss-update
DAEMON=/var/www/tt-rss/update.php
DAEMON_ARGS="--daemon --quiet"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
 
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
 
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
 
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
 
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions
 
#
# Function that starts the daemon/service
#
do_start()
{
	# Return
	#   0 if daemon has been started
	#   1 if daemon was already running
	#   2 if daemon could not be started
	start-stop-daemon --start --quiet -b --pidfile $PIDFILE --chuid www-data --exec $DAEMON --test > /dev/null \
		|| return 1
	start-stop-daemon --start --quiet -b --pidfile $PIDFILE --chuid www-data --exec $DAEMON --  \
		$DAEMON_ARGS \
		|| return 2
	# Add code here, if necessary, that waits for the process to be ready
	# to handle requests from services started subsequently which depend
	# on this one.  As a last resort, sleep for some time.
}
 
#
# Function that stops the daemon/service
#
do_stop()
{
	# Return
	#   0 if daemon has been stopped
	#   1 if daemon was already stopped
	#   2 if daemon could not be stopped
	#   other if a failure occurred
	start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
	RETVAL="$?"
	[ "$RETVAL" = 2 ] && return 2
	# Wait for children to finish too if this is a daemon that forks
	# and if the daemon is only ever run from this initscript.
	# If the above conditions are not satisfied then add some other code
	# that waits for the process to drop all resources that could be
	# needed by services started subsequently.  A last resort is to
	# sleep for some time.
	start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
	[ "$?" = 2 ] && return 2
	# Many daemons don't delete their pidfiles when they exit.
	rm -f $PIDFILE
	return "$RETVAL"
}
 
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
	#
	# If the daemon can reload its configuration without
	# restarting (for example, when it is sent a SIGHUP),
	# then implement that here.
	#
	start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
	return 0
}
 
case "$1" in
  start)
	[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
	do_start
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
	esac
	;;
  stop)
	[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
	do_stop
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
	esac
	;;
  status)
       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
       ;;
  #reload|force-reload)
	#
	# If do_reload() is not implemented then leave this commented out
	# and leave 'force-reload' as an alias for 'restart'.
	#
	#log_daemon_msg "Reloading $DESC" "$NAME"
	#do_reload
	#log_end_msg $?
	#;;
  restart|force-reload)
	#
	# If the "reload" option is implemented then remove the
	# 'force-reload' alias
	#
	log_daemon_msg "Restarting $DESC" "$NAME"
	do_stop
	case "$?" in
	  0|1)
		do_start
		case "$?" in
			0) log_end_msg 0 ;;
			1) log_end_msg 1 ;; # Old process is still running
			*) log_end_msg 1 ;; # Failed to start
		esac
		;;
	  *)
	  	# Failed to stop
		log_end_msg 1
		;;
	esac
	;;
  *)
	#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
	echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
	exit 3
	;;
esac
 
:

Скрипт запускается от имени пользователя www-data, от root скрипт работать не будет. Делаем исполняемым и создаём ссылки для автозапуска:

sudo chmod +x /etc/init.d/ttrss-update
sudo update-rc.d ttrss-update defaults

Запускаем скрипт:

sudo service ttrss-update start

Обновление

FIXME

Перед обновлением необходимо отключить все сторонние темы и плагины. Обновление осуществляется до последней актуальной версии через WEB-интерфейс.

Добавление тем

Стандартная тема оформления, которая поставляется с дистрибутивом достаточно аскетичная, но есть темы сторонних разработчиков, которые довольно сильно преображают вид WEB интерфейса агрегатора.

Feedly Theme

Ссылка на Github
Скачать ZIP
После этого копируем из скачанного архива папку Feedly и файл feedly.css в папку /var/www/tt-rss/themes В меню «Действия»-«Preferences» в пункте «Theme» выбираем Feedly и получаем совершенно иное оформление:

Клиенты

Для возможности подключения сторонних приложений к вашему TTRSS в настройках через WEB интерфейс необходимо разрешить «Enable API access»

Linux

Android

Windows

FIXME

Ссылки