日常的に使用しているRSSリーダーであるTiny Tiny RSSですが、久々に公式ページを覗いてみると様子が違いました。
調べてみると、以下のような状況でした。
- 物理サーバ(非Docker)で最新にすると、そのままでは使えなくなる
- 今後はDocker版でしかサポートしなくなる
最新にせずにこのまま使い続けるという選択肢もあるかもしれませんが、何らかの要因で使えなくなるかもしれません。(サーバ故障、ミドルウェアの更新、ディストリビューションの変更等)
今後の事を考え、物理サーバ上からDockerへ移行することにしました。
ただし、データベースが物理サーバ上のMySQLから、Docker上のPostgreSQLになるため、簡単にはデータ移行ができなさそうです。
なので、OPMLのバックアップ・リストアで移行を行います。
この方法では、フィードのURL、カテゴリ、フィルタなどは引き継げますが、既読、お気に入りの記事、保管された記事などは失われますが諦めます。
また、Tiny Tiny RSS のアクセスURLが変わらないよう、物理サーバ上のNginxでリバースプロキシを使用しました。
iPhoneで使用するため、feverプラグインも導入します。
■物理サーバ環境
CPU:Intel Celeron N3150
メモリ:8GB
CentOS 8.4.2105
Nginx 1.14.1
Docker 準備
Docker環境の準備をします。既に準備が終わっている場合は不要です。
Docker インストール
# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo repo の追加: https://download.docker.com/linux/centos/docker-ce.repo
# dnf install docker-ce docker-ce-cli containerd.io ======================================================================================================================== パッケージ Arch バージョン リポジトリー サイズ ======================================================================================================================== インストール: containerd.io x86_64 1.4.9-3.1.el8 docker-ce-stable 30 M docker-ce x86_64 3:20.10.7-3.el8 docker-ce-stable 27 M docker-ce-cli x86_64 1:20.10.7-3.el8 docker-ce-stable 33 M 依存関係のインストール: container-selinux noarch 2:2.162.0-1.module_el8.4.0+830+8027e1c4 appstream 52 k docker-ce-rootless-extras x86_64 20.10.7-3.el8 docker-ce-stable 9.2 M docker-scan-plugin x86_64 0.8.0-3.el8 docker-ce-stable 4.2 M fuse-common x86_64 3.2.1-12.el8 baseos 21 k fuse-overlayfs x86_64 1.4.0-3.module_el8.4.0+830+8027e1c4 appstream 72 k fuse3 x86_64 3.2.1-12.el8 baseos 50 k fuse3-libs x86_64 3.2.1-12.el8 baseos 94 k libcgroup x86_64 0.41-19.el8 baseos 70 k libslirp x86_64 4.3.1-1.module_el8.4.0+575+63b40ad7 appstream 69 k slirp4netns x86_64 1.1.8-1.module_el8.4.0+641+6116a774 appstream 51 k モジュールストリームの有効化中: container-tools rhel8 トランザクションの概要 ======================================================================================================================== インストール 13 パッケージ
# systemctl start docker # systemctl enable docker
Docker Compose インストール
# curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(unname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # chmod +x /usr/local/bin/docker-compose
バックアップ
OPMLのエクスポート
旧Tiny Tiny RSS のWebから[設定]に入り、[フィード]→[OPML]から、OPMLのエクスポートをクリックします。
ダウンロードしたファイルをDocker版でインポートします。
カスタマイズのCSS、フィルター、ラベルなども移行できました。
Docker版のセットアップ
Tiny Tiny RSS インストール
# git clone https://git.tt-rss.org/fox/ttrss-docker-compose.git ttrss-docker && cd ttrss-docker # cp .env-dist .env
普段アクセスするURLに変更。
# vi .env TTRSS_SELF_URL_PATH=http://localhost:8280/tt-rss ↓ TTRSS_SELF_URL_PATH=https://FQDN or IPアドレス/tt-rss
# docker-compose up --build -d
ホスト側Nginx設定
https://FQDN or IPアドレス/tt-rss で、Docker上のtt-rssにアクセスできるように、ホスト上のNginxの設定を変更します。
# vi /etc/nginx/nginx.conf
以下を必要な個所に追加。
location ^~ /tt-rss/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8280/tt-rss/;
break;
}
# systemctl restart nginx
初回ログイン
Webブラウザで、今まで通りのURL(https://FQDN or IPアドレス/tt-rss)でアクセスする。
デフォルトのユーザ名とパスワードは、admin/password 。
ユーザを作成する場合は、この時点で作成してログインしておく。
不正アクセスされないよう、adminのパスワードをリセットしておく。
fever プラグイン インストール
Docker Volumeの場所を確認。
docker volume inspect ttrss-docker_app | grep Mountpoint "Mountpoint": "/var/lib/docker/volumes/ttrss-docker_app/_data",
ディレクトリの所有者を確認しておく。(私の場合なぜか一般ユーザになっていました)
# ls -l /var/lib/docker/volumes/ttrss-docker_app/_data/tt-rss/
ディレクトリの所有者にsuしてから、gitをする。(git後にchownでも良いと思います)
# su ディレクトリの所有者 $ cd /var/lib/docker/volumes/ttrss-docker_app/_data/tt-rss/plugins.local $ git clone https://github.com/DigitalDJ/tinytinyrss-fever-plugin fever
fever プラグイン 有効化
Webから[設定]に入り、[プラグイン]で、feverにチェックを入れ、[Enable selected]をクリック。(私は最初から有効化されていました)
Webから[設定]に入り、[Fever Emulation]のテキストボックスにfeverプラグイン用のパスワードを入れ、[Set Password]ボタンをクリック。
リストア
OPMLのインポート
Webから[設定]に入り、[フィード]→[OPML]で、[ファイルを選択...]をクリックし、バックアップしたOPML選択、[OPML インポート]をクリックします。
しばらくすると、新着フィードが出てくるはずです。
旧Tiny Tiny RSS のフィードのアップデートを止める
# systemctl stop ttrss.service # systemctl disable ttrss.service
systemdではなく、crontabを使っていた場合は、そちらを削除。
iPhone, iPadのReeder設定
Reederがうまく動かない場合は、一旦アカウント設定を削除して再設定をします。
設定方法は以前の記事をご参照ください。
【初めてのiPhone】Tiny Tiny RSSを使いやすくする
iPhone (iOS) でTiny Tiny RSSを便利に使用する方法を記載しました。
最後に
初めてのDockerでしたが、何とか移行することができました。
不思議なのですが、Tiny Tiny RSSのWebの動作が体感で速くなった気がします。
ただ、Reederの画像同期となるとディスクアクセスが発生するためか、遅くなったように感じます。
通常のWebアクセスでの使用では全く問題ありませんので、移行をしておいた方が良いと思います。
あとDockerコンテナは、リソース使用量が少なく、思っていたより動作が軽いので驚きました。
# docker container stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 61a9ec2ad89f ttrss-docker_updater_1 0.01% 13.38MiB / 7.436GiB 0.18% 1.61GB / 918MB 28.7kB / 528MB 2 b38cc0c42bb9 ttrss-docker_web-nginx_1 0.00% 7.457MiB / 7.436GiB 0.10% 79MB / 102MB 4.1kB / 28.7kB 134 d2d7413066d4 ttrss-docker_backups_1 0.00% 468KiB / 7.436GiB 0.01% 271kB / 0B 0B / 0B 2 ea746ff82ed4 ttrss-docker_app_1 0.01% 30MiB / 7.436GiB 0.39% 120MB / 146MB 12.3kB / 41kB 5 32559d0a90b9 ttrss-docker_db_1 0.35% 41.27MiB / 7.436GiB 0.54% 947MB / 1.3GB 0B / 9.45GB 7
これからDockerで色々な事が出来そうです。
追記
Declaration of FeverAPI::before($method) must be compatible with Handler::before(string $method): bool
Tiny Tiny RSSを更新したら、Event Logに上記のログが出て、feverがsyncしなくなりました。
以下の対処をしました。
# cd /var/lib/docker/volumes/ttrss-docker_app/_data/tt-rss/plugins.local/fever # git pull
記事が更新されなくなったとき
updaterが止まって、記事が更新されなくなる事がありました。
一旦、停止から起動することで直りました。
# docker container stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 74998a1b6747 ttrss-docker_web-nginx_1 0.00% 11.34MiB / 7.432GiB 0.15% 16.5MB / 21.3MB 4.36MB / 0B 133 826792436bc6 ttrss-docker_app_1 0.00% 38.08MiB / 7.432GiB 0.50% 26.1MB / 30.7MB 73.5MB / 0B 5 de42b4d33a23 ttrss-docker_db_1 0.01% 59.13MiB / 7.432GiB 0.78% 16.3MB / 23.4MB 149MB / 38.8MB 7 # docker-compose down Stopping ttrss-docker_web-nginx_1 ... done Stopping ttrss-docker_app_1 ... done Stopping ttrss-docker_db_1 ... done Removing ttrss-docker_web-nginx_1 ... done Removing ttrss-docker_updater_1 ... done Removing ttrss-docker_backups_1 ... done Removing ttrss-docker_app_1 ... done Removing ttrss-docker_db_1 ... done Removing network ttrss-docker_default # docker-compose up --build -d (snip) Creating ttrss-docker_db_1 ... done Creating ttrss-docker_backups_1 ... done Creating ttrss-docker_app_1 ... done Creating ttrss-docker_web-nginx_1 ... done Creating ttrss-docker_updater_1 ... done # docker container stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS e89881273c59 ttrss-docker_web-nginx_1 0.00% 9.039MiB / 7.432GiB 0.12% 656B / 0B 2.18MB / 16.4kB 133 51457877c072 ttrss-docker_updater_1 0.00% 452KiB / 7.432GiB 0.01% 656B / 0B 4.1kB / 0B 2 8c5176d11ab1 ttrss-docker_backups_1 0.00% 460KiB / 7.432GiB 0.01% 740B / 0B 45.1kB / 0B 2 48ae3515f818 ttrss-docker_app_1 0.00% 20.51MiB / 7.432GiB 0.27% 1.19MB / 24.7kB 92.3MB / 1.31MB 4 28708b5fce20 ttrss-docker_db_1 0.00% 17.53MiB / 7.432GiB 0.23% 5.5kB / 4.03kB 7.67MB / 156kB 7
記事が更新されなくなったとき(iptables/nftables関連)
各コンテナが動いていても、記事が更新されなくなる事がありました。
サーバが起動する際に、nftablesよりもdockerのサービスが先に起動してしまったようで、Dockerからインターネットに通信が出来ていなかったようです。
Dockerを再起動することで直りました。
# docker-compose down # docker-compose up --build -d Creating network "ttrss-docker_default" with the default driver ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-e598b68bdf51 -j RETURN: iptables: No chain/target/match by that name. (exit status 1)) # systemctl restart docker # docker-compose up --build -d