TinyTinyRSSって何なん?
TinyTinyRSSとはサーバインストール型のRSSリーダーです。Feedlyなどクラウドサービスと比較して更新間隔や過去記事の検索などサービスによっては設定できなかったり有料プランを契約しないと利用できない機能を好き勝手に利用できる点がメリットです。
導入手順
Tiny Tiny RSSをダウンロードする
git clone https://tt-rss.org/git/tt-rss.git
mv tt-rss ${スクリプトを置きたいパス}
ユーザーとDBの作成 (MySQL)
MySQL以外のDBを使用している場合は適宜置き換えてください。
DB_USER_NAME(ユーザー名)やDB_USER_PW(ユーザーのパスワード)、DB_NAME(データベース名)は適宜置き換えてください。
CREATE USER 'DB_USER_NAME'@'localhost' IDENTIFIED BY 'DB_USER_PW';
DBを作成して権限を付与します。
CREATE DATABASE DB_NAME CHARACTER SET utf8;
GRANT ALL ON DB_NAME.* TO 'DB_USER_NAME'@'localhost';
初期テーブルの作成
shemaディレクトリ内にDBの初期化SQLが入っているため事前に実行しておく必要があります。(初回スクリプト実行時に自動で作成してくれたら良いのに..
mysql DB_NAME -u DB_USER_NAME -p < schema/ttrss_schema_mysql.sql
設定ファイルの編集
config.php-distというファイルに設定ファイルのサンプルが書かれています。このファイルを移動して拡張子を.phpに変更します。修正しないまま直接設定を書き込んで公開すると動作しないだけで無く設定ファイルを外部からダウンロード可能になりDBのID/PWが漏洩する可能性があります。(漏洩の可能性は低いにしてもこのは実装ダメでしょ
mv config.php-dist config.php
TinyTinyRSSを動作させるための設定ファイルを編集します。FEED_CRYPT_KEYはソースを読んでいないので正確な情報は分かりませんが恐らくパスワードをハッシュ化させる際のソルトだと思います。
define('DB_TYPE', "pgsql"); // or mysql
define('DB_HOST', "localhost");
define('DB_USER', "fox");
define('DB_NAME', "fox");
define('DB_PASS', "XXXXXX");
define('DB_PORT', ''); // usually 5432 for PostgreSQL, 3306 for MySQL
define('SELF_URL_PATH', 'http://example.org/tt-rss/');
define('FEED_CRYPT_KEY', '');
パーミッションの変更
一応マニュアル通りにディレクトリのパーミッションを設定しておきます。 (配布時に設定しておけば良いのに...
chmod -R 766 cache/images
chmod -R 766 cache/upload
chmod -R 766 cache/export
chmod -R 766 cache/js
chmod -R 766 feed-icons
chmod -R 766 lock
あとはWebサーバの設定をすれば以下のようにブラウザからTinyTinyRSSの画面を見ることが出来るようになると思います。
初期ID/PWはadmin/passwordに設定してあります。ログイン後にすぐ変更しましょう。PWを変更入力して画面遷移するとエラーメッセージが表示されましたが、PWは変更されていました。
フィードの自動更新
以下のスクリプトを叩くとフィードが更新されます。
${TinyTinyRSSのパス}/update.php --feeds
ちなみに、以下のスクリプトを叩くと1分間隔でフィードを更新し続けます。
${TinyTinyRSSのパス}/update_daemon2.php
また、cronかsystemd/Timersでupdate.phpを叩くように設定しても自動で更新されます。実際のRSSフィードの更新取得はTinyTinyRSS内の設定(デフォルトだと30分間隔)で取得するため1分間隔でスクリプトを叩いてもフィード取得先サーバに負荷がかかることはありません。
以下はsystemd/Timersを利用して更新スクリプトを一分間隔で実行する設定にした際のユニットファイルです。
[Unit]
Description=Run TinyTinyRSS update script 1min
[Timer]
OnBootSec=1min
OnUnitActiveSec=55sec
AccuracySec=5sec
Unit=ttrssUpdate.service
[Install]
WantedBy=timers.target
[Unit]
Description=Run TinyTinyRSS update script
[Service]
Type=simple
ExecStart={TinyTinyRSS_PASS}/update.php --feeds
[Install]
WantedBy=default.target
systemctl --user enable ttrssUpdate-1min.timer
systemctl --user start ttrssUpdate-1min.timer
フィードの自動更新
TinyTinyRSS自体はローリングリリース形式であるため、
git pull
でアップデート可能です。
DBの更新を伴うアップデートの場合はスクリプトのアップデート後、TinyTinyRSSの管理者アカウントでログインすると自動で更新されるそうです。
最後に
ざっくりと使ってみた感想ですがTinyTinyRSSの実装自体雑な部分もあるような気がするのでlet's encrypt+(Basic|Digest)認証を設定するなどして可能な限り外部からログインフォームを見えないように制限した方が良いと思います。(NginxはDigest認証を公式にサポートしていなくてつらい...