Обновить

Готовясь к отключению Google Reader-а

Open source
Из песочницы
В преддверии 1 июля, дня когда произойдёт отключение самой удобной, на мой взгляд, читалки rss-фидов, я озадачился выбором альтернативы. И учитывая привычку Google отключать сервисы, которые казалось бы пользуются успехом, мой выбор лежал скорее в стороне относительно независимых решений. Доверить хранение кучи своих фидов кому-либо кроме гугла я уже не хотел, мало ли что придёт в голову какому-нибудь эффективному интернет-менеджеру. Кроме того, мне очень хотелось ещё и помочь друзьям, которые тоже пользовались google reader и так же как я настороженно ждут его конца. Не буду останавливаться на вариантах, которые возникли передо мной — об этом уже достаточно написано другими.
Мой выбор пал на Tiny Tiny RSS — tt-rss.org/redmine/projects/tt-rss/wiki.

Как написано на сайте tt-rss,
Tiny Tiny RSS — это аггрегатор и читалка RSS/Atom фидов с открытым исходным кодом, созданный чтоб позволить вам читать новости из любого места с ощущением максимально близким к реальному приложению на компьютере
. Из чего следует, что для неё характерны несколько требований — наличие либо VPS(virtual private server), либо хостинга с php(с определёнными оговорками) и базой либо mysql, либо postgre. Вариантов, где развернуть её — масса, начиная от любого подходящего хостинга до Amazon EC2. Однако, в силу некоторых причин, у меня уже был подходящий вариант — отдельный контейнер OpenVZ под Proxmox (www.proxmox.com/), крутящегося на арендованном у Hetzner Online AG (www.hetzner.de/) сервере. Proxmox — это платформа виртуализации с открытым исходным кодом, основанная на KVM и OpenVZ. Останавливаться на этих технологиях, как и на самом датацентре в рамках этой статьи я не буду — об этом тоже уже написано немало.
Итак, у меня был дополнительный публичный IPv4 адрес, сервер с Proxmox и некоторое количество свободного времени.
Первым делом я создал контейнер OpenVZ из готового шаблона Debian используя веб-интерфейс Proxmox. Нажимаем «Create CT», выбираем ноду, номер будущей виртуальной машины, её hostname, пул ресурсов и пароль рута, далее выбираем шаблон, в моём случае это — debian-6.0-standard_6.0-6_amd64.tar.gz, жмём «далее», выделяем ресурсы для контейнера, в моём случае это 512 оперативки, 512 swap, 1 процессор и 8Гб места (с этим проблем быть в дальнейшем не должно — размер образа диска меняется очень просто и быстро).
В свойствах контейнера, во вкладке «Network» меняем venet-у, виртуальному сетевому устройству ip-адрес на наш публичный или, если это необходимо, т.е. нам нужен отдельный MAC-адрес — создаём veth, виртуальное Ethernet-устройство. В моём случае — вполне хватит одного мака.
Всё тоже самое можно сделать и из консоли, используя vzctl, руки и мозг, но мне привычнее так.
Дальше удобнее делать из консоли Proxmox-хоста.
Входим в консоль виртуальной машины — vzctl enter CTID, где CTID — номер нашего контейнера.
Настраиваем вход в машину по ssh, желательно по ключам, а не с паролем — на этом так же не буду останавливаться, тема исчерпанная в целом.
Отключаемся и уже заходим в машину как в отдельный хост. Поднимаем файрвол, дающий возможность захода на машину по ssh, http, https (на будущее) и возможность update-демону tt-rss обновлять фиды без ограничений.
Я не знаток iptables, но на основе разных статей сделал нижеследующий скрипт для запуска:
#!/bin/sh
#/etc/init.d/fw
case "$1" in
  start)
    echo "Starting iptables"
        # Flushing all rules
        iptables -F
        # Setting default filter policy
        iptables -P INPUT DROP
        iptables -P OUTPUT DROP
        iptables -P FORWARD DROP
        iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
        iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        #ssh
        iptables -A INPUT -p tcp --dport 22 -j ACCEPT
        iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
        # Allow unlimited traffic on loopback
        iptables -A INPUT -i lo -j ACCEPT
        iptables -A OUTPUT -o lo -j ACCEPT
        #Allow outbound DNS
        iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
        iptables -A INPUT -p udp --sport 53 -j ACCEPT
        #ping from
        iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
        iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
        #http,https
        iptables -A INPUT -p tcp --dport 80 -j ACCEPT
        iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
        iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
        iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
        iptables -A INPUT -p tcp --sport 80 --dport 1024:65535 -j ACCEPT
        iptables -A INPUT -p tcp --sport 443 --dport 1024:65535 -j ACCEPT
        #logging
        iptables -N LOGGING
        iptables -A INPUT -j LOGGING
        iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
        iptables -A LOGGING -j DROP
        # make sure nothing comes or goes out of this box
        iptables -A INPUT -j DROP
        iptables -A OUTPUT -j DROP
  ;;
  stop)
    echo "Stopping iptables"

Для автозапуска при старте системы — update-rc.d fw defaults

В силу того, что Tiny Tiny RSS в данный момент лежит в unstable-репозиториях debian, нам надо добавить deb ftp.debian.org/debian unstable main contrib в /etc/apt/sources.list и создать /etc/apt/apt.conf с содержимым APT::Default-Release "stable";, дабы приоритет был всё же у stable-репозиториев.
Затем обновляем debian — aptitude update, затем aptitude upgrade.
В качестве веб-сервера будет lighttpd, в качестве базы данных — mysql. aptitude install lighttpd mysql-server php5-mysql. В теории при установке tt-rss будут подтянуты зависимости, но в моём случае там тянулся ненужный мне apache2.
Затем aptitude install tt-rss и следуем указаниям установщика.
Редактируем /etc/tt-rss/config.php, где в данном случае достаточно поменять SELF_URL_PATH на адрес сервера или имя, если у вас есть свой домен. Запускаем /etc/init.d/tt-rss start и можем заходить по адресу адрес сервера/tt-rss/ для дальнейшей конфигурации.
В wiki tt-rss рекомендуется поставить акселератор php — php-apc или иной подобный, делается это весьма просто, однако, если честно огромной разницы я не заметил. Возможно потому, что сделал это почти сразу.
Заведя пользователя или, в моём случае, нескольких, можно импортировать фиды из Google Reader-а.
Экспорт с помощью google takeout подробно описан во многих статьях, например mydebianblog.blogspot.ru/2013/03/google-reader.html
И кстати, импортировать полученные shared.json и starred.json из гуглоридера поможет gritttt-rss gritttt-rss.nicolashoening.de
Так же стоит отметить наличие вполне рабочих и удобных клиентов для tt-rss в Android Market, один из которых вполне бесплатен. Для работы клиента надо включить в настройках пользователя tt-rss внешний API.

На полное раскрытие темы не претендую, просто делюсь опытом. Буду рад, если будут уточнения, комментарии и критика.

upd: В качестве дополнения: вышло очередное обновление tt-rss — 1.7.6, поправлены ошибки, упрощён инсталлятор, добавлено обратно в качестве плагина встроенное веб-приложение для мобильных устройств.

upd2: Насчёт выкачивания страниц в случае, если rss-фид какого-либо сайта содержит только заголовки и ссылку на оригинальную статью на другом сайте — tt-rss.org/forum/viewtopic.php?f=8&t=327. Очень характерный пример — Hacker News, news.ycombinator.com.
Такого функционала не будет и разработчик вполне обоснованно отвечает почему: «Если владелец содержимого хочет, чтобы вы зашли по ссылке на его сайт — то вы и должны так сделать. Проблема не сколько этическая, а сколько функциональная — т.е. данный функционал выходит за рамки работы RSS-ридера.»
Плюс проблема безопасности, возникающая при выкачивании. Жаль конечно, если честно.

upd3: Ещё раз насчёт выкачивания страниц — есть плагин embed_original, включается при просмотре конкретной заметки, на примере hacker news — работает.
Теги:google readertt-rsstiny tiny rssrssrss reader
Хабы: Open source
Рейтинг -9
Количество просмотров 11,5k Добавить в закладки 23
Комментарии
Комментарии 7

Похожие публикации

Продуктовый / web аналитик
от 180 000 ₽Kick EcosystemМожно удаленно
Android developer
от 150 000 ₽GameramУльяновскМожно удаленно
iOS Developer
от 150 000 ₽GameramУльяновскМожно удаленно
Трафик Менеджер
от 70 000 до 80 000 ₽VIONEМожно удаленно

Лучшие публикации за сутки