Go製self hosted型RSSリーダーMinifluxをrocky linux9上に構築したときのメモ
minifluxとは?
ミニマムでオープンソースのGo製 RSSリーダー
なぜself hostedを使うのか?
理由① 有名なRSSをそれなりに使い倒した場合、有料版が必要になるが、そこそこの価格がかかる
feedly https://feedly.com/ 1000円/月〜
inoreader https://www.inoreader.com/pricing $7.99/月〜
feader https://feeder.co/pricing $7.50/月〜
(feedlyはpriceページ無いのでこちら↓)
理由② AI時代、記事をサマリー・要約してアウトプットする要件が出てくることを見越すと、
自分で利用するAIを選択したり、記事を柔軟にコントロールできたほうが後々得策になるはず。
スペック
特に推奨スペックの記載がなかったので、
kagoyaのVPS 2コア / 2 GB, 200GB(SSD) の大容量プランを選択。(32円/日 880円/月)
conf# セットアップ
変数設定
変数は、このファイルに記述する。
(minifluxのsytstemdが拾ってくれるとのことだが、なぜか反映されなかったのでこのあとのコマンドでは常に設定ファイルを指定して実行してます)
/etc/miniflux.conf
全種類はこちらに記述
コマンドライン
インストール・セットアップ
方針
パッケージされたrpmファイルから構築もできるが、
今後ソースを編集する可能性があるので、手動でビルドからやってみる。
DB設定
PostgreSQL >= 9.5(※ HSTORE拡張を利用する。本体では未使用だがmigratioに使うとのこと)
$ sudo dnf update && sudo dnf upgrade
$ sudo dnf install postgresql-server postgresql-contrib
# check version
$ psql --version
psql (PostgreSQL) 13.18
# 初期設定
$ sudo postgresql-setup --initdb
# postgresにリモートで接続するので、
peer設定を解除しておく(詳細はpostgresの話になるので省略。セキュリティや環境を考慮して適宜設定します)
$ sudo vi /var/lib/pgsql/data/pg_hba.conf
pear/ident→ 必要に応じて、trustに変更
# postgres起動する
$ sudo systemctl start postgresql
$ sudo systemctl status postgresql
$ sudo systemctl enable postgresql
# Switch to the postgres user
$ sudo -u postgres -i
# Create a database user for Miniflux
$ createuser -P miniflux
Enter password for new role: ******
Enter it again: ******
# Create a database for miniflux that belongs to our user
$ createdb -O miniflux miniflux
#明示的に権限付与(ドキュメントに記載がないが、一応基本的な権限つけておいた)
$ psql
postgres=# alter role miniflux LOGIN CREATEDB;
# Create the extension hstore as superuser
$ psql miniflux -c 'create extension hstore'
CREATE EXTENSION
#接続確認。先にユーザーをもとに戻して、minifluxユーザーでログインできるか確認
$ psql --username miniflux --password
$ ************** (パスワード入力)
psql (13.18)
Type "help" for help.
miniflux=>
(ログイン成功)
接続情報、その他の情報をconfigに書き込む
userを戻して、
sudo vi /etc/miniflux.conf
format↓
postgres://user:password@localhost/dbname?sslmode=disable
DATABASE_URL=postgres://miniflux:xxxxxx@localhost/miniflux?sslmode=disable
BASE_URL=https://miniflux.xxxxxx.com
LOG_FILE=/var/log/miniflux/miniflux.log
上記指定したログディレクトリも準備しておく
sudo mkdir /var/log/miniflux/miniflux.log
sudo chmod 777 /var/log/miniflux
ビルド
ソースコードをローカルに落として、
#ビルドして、バイナリ作成
$ make miniflux
バイナリを、/usr/local/bin/ に配置
#権限設定
$ sudo chmod +x /usr/local/bin/miniflux
#DB接続などの設定ファイルを指定して、migrationを実行
$ miniflux -c /etc/miniflux.conf -migrate
level=INFO msg="Running database migrations" current_version=0 latest_version=101 driver=postgresql
#管理者ユーザーを作成します
$ miniflux -c /etc/miniflux.conf -create-admin
Enter Username: <admin_user_name>
Enter Password: **********
level=INFO msg="Created new admin user" username=<admin_user_name> user_id=1
[
migration実行されたっぽいので、DBを確認してみるpgadminから接続
テーブルが作成されてます。
select * from users
→これで管理者ユーザーが登録されているのも確認できました。
実行
$ miniflux -c /etc/miniflux.conf
level=INFO msg="Starting HTTP server" listen_address=127.0.0.1:8080
# curlで指定のポートに接続すると、minifluxのサイトが表示されてることが確認できた。
$ curl http://127.0.0.1:8080
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<title>Sign In - Miniflux</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
ドメイン経由の接続
あとは、nginxなどのプロキシ設定をして、ドメインから接続させれば利用できます。
その際の細かい設定は、こちらを見ながら調整してくこととなります。
気づきがあれば、適宜追記していきます。
webhookの挙動について
entry(記事)が追加されると、ほかサービスに連携する仕組みがあります。
その中にwebhookもあり、指定したURLに対してデータ送信が可能です。
ただし、このwebhookは、
・entryが追加された時
・entryに変更があった時
のみで、
・新規でfeedを登録して、初期のentryが登録されたタイミングでは飛んでこない
です。
従って、例えば英語のサイトで、すべての記事を日本語に翻訳して保存したいような時、
・webhookで記事情報を受けとり、日本語訳して元の記事を更新する
といった仕組みを作れば実現するのですが、
初期の記事についてはwebhookが走らないので、日本語翻訳処理がされないままとなります。
結局、webhookだけでなく、巡回して処理を走らせる仕組みを作ることで対応しました。
migration
最新のソースを落としてきて、makeコマンドでバイナリ生成し、binを更新する。
make miniflux
filezillaで、minifluxにアップし、以下コマンドで再作成
migrationする
sudo /usr/local/bin/miniflux -migrate -c /etc/miniflux.conf
service restart
sudo systemctl restart miniflux
sudo systemctl status miniflux