Установка и настройка TinyTinyRSS

TinyTinyRSS - это веб-приложение для чтения RSS-подписок. Оно использует MySQL для хранения учётных записей пользователей и информации из лент новостей. Для обновления лент используется отдельный демон или скрипт, запускаемый при помощи планировщика задач.

1. Скачивание и распаковка

Находим на странице http://tt-rss.org/redmine/projects/tt-rss/wiki ссылку на скачивание. Скачиваем тарболл и распаковываем:

$ wget https://github.com/gothfox/Tiny-Tiny-RSS/archive/1.11.tar.gz
$ tar xzvf Tiny-Tiny-RSS-1.11.tar.gz

Перемещаем каталог с приложением туда, откуда к нему будет обращаться веб-сервер:

# mv Tiny-Tiny-RSS-1.11 /usr/local/share/ttrss

И даём веб-серверу права доступа к каталогу с приложением:

# chown www-data:www-data /usr/local/share/ttrss
# find /usr/local/share/ttrss -type d -exec chmod u=rwx,g=rx,o= \{\} \;
# find /usr/local/share/ttrss -type f -exec chmod u=rw,g=r,o= \{\} \;

2. Настройка пула в php5-fpm

Если php5-fpm ещё не был установлен, время сделать это:

# apt-get install php5-fpm

По умолчанию в php5-fpm имеется общий пул, настройки которого находятся в файле /etc/php/fpm/pool.d/www.conf, но в данном случае я предпочту настроить для этого приложения отдельный пул, поскольку это приложение будет использоваться редко и я не хочу постоянно держать запущенными лишние процессы. Кроме того, разные пулы, даже будучи запущенными от имени одного и того же пользователя, позволяют снизить эффект взаимного влияния разных приложений друг на друга: если одно из приложений вдруг начнёт использоваться больше остальных, оно не займёт процессы других пулов, выделенные для обработки других приложений.

Создадим файл пула /etc/php5/fpm/pool.d/rss.conf со следующим содержимым:

[rss]
user = www-data
group = www-data
listen = /var/run/rss.sock

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

pm = ondemand
pm.max_children = 2
pm.process_idle_timeout = 10m

access.log = /var/log/rss.access.log

Пул называется rss, процессы пула работают от имени пользователя www-data и группы www-data. Пул обрабатывают запросы, поступающие на юникс-сокет /var/run/rss.sock, доступный на чтение и запись только пользователю и группе www-data. Процессы пула порождаются только при обращении и завершаются, если к ним не было обращений более 10 минут. В пуле может быть не более 2 процессов. Журнал обработанных запросов будет вестись в файле /var/log/rss.access.log

Осталось перезагрузить php5-fpm, чтобы добавить новый пул:

# /etc/init.d/php5-fpm reload

3. Настройка веб-сервера nginx

Если в системе ещё не установлен веб-сервер nginx, поставим его:

# apt-get install nginx-light

Теперь можно отредактировать файл /etc/nginx/sites-available/default, добавив в него следующую секцию:

location /rss {
  alias /usr/local/share/ttrss;

  location ~ \.php$ {
    fastcgi_pass unix:/var/run/rss.sock;
    fastcgi_index index.php;

    include fastcgi_params;
  }
}

Если нужно настроить TinyTinyRSS для работы на отдельном доменном имени, например rss.domain.tld, то можно создать файл /etc/nginx/sites-available/rss со следующим содержимым:

server {
  listen 80;

  server_name rss.domain.tld;

  root /usr/local/share/ttrss;

  location ~ \.php$ {
    fastcgi_pass unix:/var/run/rss.sock;
    fastcgi_index index.php;

    include fastcgi_params;
  }
}

Чтобы вновь созданная конфигурация была задействована, нужно создать символическую ссылку на неё в каталоге /etc/nginx/sites-enabled/:

# cd /etc/nginx/sites-enabled/
# ln -s /etc/nginx/sites-available/rss rss

Осталось перезапустить веб-сервер:

# /etc/init.d/nginx restart

4. Подготовка базы данных

Разработчики TinyTinyRSS рекомендуют для хранения настроек и лент использовать СУБД PostgreSQL, но возможно использовать и MySQL. Именно его я и настрою. Если сервер MySQL ещё не установлен, сделайте это:

# apt-get install mysql-server-5.5

После установки СУБД, нужно подготовить пустую базу данных и пользователя, от имени которого приложение будет подключаться к базе данных. Соответственно, этот пользователь должен иметь полный доступ к своей базе данных. Создадим базу данных и пользователя:

$ mysql -uroot -p mysql
> CREATE DATABASE rss CHARSET UTF8;
> INSERT INTO user(user, password, host) VALUES('rss', PASSWORD('rss_password'), 'localhost');
> FLUSH PRIVILEGES;
> GRANT ALL ON rss.* TO rss@localhost;
> FLUSH PRIVILEGES;

Вместо пароля rss_password я подставил 16-символьный пароль, сгенерированный программой pwgen из одноимённого пакета:

$ pwgen 16

5. Веб-настройка приложения

Теперь перейдём на страницу настройки веб-сервера http://domain.tld/rss/install/ или http://rss.domain.tld/install/, в зависимости от выбранного вами варианта настройки веб-сервера:

Вводим настройки подключения к базе данных и нажимаем кнопку "Test configuration":

Ввод настроек подключения к базе данных

После успешной проверки подключения к базе данных нажимаем на кнопку "Initialize database":

Инициализация базы данных

Запоминаем имя созданного пользователя admin и его пароль password, а затем сохраняем сгенерированный файл конфигурации нажатием на кнопку "Save configuration":

Сохранение конфигурации

После того, как конфигурация сохранилась, можно перейти по ссылке с текстом "loading tt-rss now":

Переход по ссылке

Страница входа в приложение:

Вход в приложение

Не забудьте сразу же войти в систему и поменять пароль пользователя admin на нечто более сложное, нежели слово password.

6. Настройка демона обновлений

На странице http://tt-rss.org/redmine/projects/tt-rss/wiki/UpdatingFeeds описано несколько разных способов обновления RSS-лент. Я решил остановиться на многопроцессном демоне обновлений update_daemon2.php. Добавим демону права на запуск:

# chmod ug+x /usr/local/share/ttrss/update_daemon2.php

Теперь создадим init-файл /etc/init.d/ttrss для управления демоном (его можно скачать по ссылке ttrss):

#!/bin/sh
### BEGIN INIT INFO
# Provides:          ttrss
# Required-Start:    $syslog $remote_fs $network
# Required-Stop:     $syslog $remote_fs $network
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start the TinyTinyRSS updates daemon.
# Description:       Start the TinyTinyRSS updates daemon.
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/share/ttrss/update_daemon2.php
NAME=ttrss
DESC="TinyTinyRSS update daemon"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
USER=www-data
GROUP=www-data

test -x $DAEMON || exit 0

set -e

. /lib/lsb/init-functions

case "$1" in
    start)
        log_daemon_msg "Starting $DESC" $NAME
        if ! start-stop-daemon --start --oknodo --quiet --background --make-pidfile \
            --chuid $USER:$GROUP --pidfile $PIDFILE --exec $DAEMON
        then
            log_end_msg 1
        else
            log_end_msg 0
        fi
        ;;
    stop)
        log_daemon_msg "Stopping $DESC" $NAME
        if start-stop-daemon --stop --retry 30 --oknodo --quiet \
            --pidfile $PIDFILE --exec $DAEMON
        then
            rm -f $PIDFILE
            log_end_msg 0
        else
            log_end_msg 1
        fi
        ;;
    restart|reload|force-reload)
        check_syntax
        $0 stop
        $0 start
        ;;
    status)
        status_of_proc -p "$PIDFILE" "$DAEMON" ttrss && exit 0 || exit $?
        ;;
    *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload|status}" >&2
        exit 1
        ;;
esac

exit 0

Включим автоматический запуск и остановку демона в процессе загрузки, выключения и перезагрузки системы:

# insserv ttrss

И запустим демон обновлений прямо сейчас:

# /etc/init.d/ttrss start

Приложение настроено, дальнейшая процедура создания пользователей и добавления подписок уже выходит за рамки заметки.

Написать автору