Zenn
Open5

Go製self hosted型RSSリーダーMinifluxをrocky linux9上に構築したときのメモ

yunayuna

minifluxとは?

ミニマムでオープンソースのGo製 RSSリーダー
https://miniflux.app
https://github.com/miniflux/v2

なぜ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円/月)

yunayuna

conf# セットアップ

変数設定

変数は、このファイルに記述する。
(minifluxのsytstemdが拾ってくれるとのことだが、なぜか反映されなかったのでこのあとのコマンドでは常に設定ファイルを指定して実行してます)
/etc/miniflux.conf
全種類はこちらに記述
https://miniflux.app/docs/configuration.html

コマンドライン

https://miniflux.app/docs/cli.html

インストール・セットアップ

https://miniflux.app/docs/installation.html

方針

パッケージされたrpmファイルから構築もできるが、
今後ソースを編集する可能性があるので、手動でビルドからやってみる。

DB設定

PostgreSQL >= 9.5(※ HSTORE拡張を利用する。本体では未使用だがmigratioに使うとのこと)
https://miniflux.app/docs/database.html
https://www.postgresql.org/download/linux/redhat/

$ 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

ビルド

https://miniflux.app/docs/binary_installation.html

ソースコードをローカルに落として、

#ビルドして、バイナリ作成
$ 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">        
yunayuna

ドメイン経由の接続

あとは、nginxなどのプロキシ設定をして、ドメインから接続させれば利用できます。
その際の細かい設定は、こちらを見ながら調整してくこととなります。
https://miniflux.app/docs/configuration.html

気づきがあれば、適宜追記していきます。

yunayuna

webhookの挙動について

entry(記事)が追加されると、ほかサービスに連携する仕組みがあります。
その中にwebhookもあり、指定したURLに対してデータ送信が可能です。
https://miniflux.app/docs/webhooks.html

ただし、このwebhookは、
・entryが追加された時
・entryに変更があった時

のみで、
・新規でfeedを登録して、初期のentryが登録されたタイミングでは飛んでこない

です。
従って、例えば英語のサイトで、すべての記事を日本語に翻訳して保存したいような時、
・webhookで記事情報を受けとり、日本語訳して元の記事を更新する
といった仕組みを作れば実現するのですが、
初期の記事についてはwebhookが走らないので、日本語翻訳処理がされないままとなります。

結局、webhookだけでなく、巡回して処理を走らせる仕組みを作ることで対応しました。

yunayuna

migration

最新のソースを落としてきて、makeコマンドでバイナリ生成し、binを更新する。

make miniflux

filezillaで、minifluxにアップし、以下コマンドで再作成

migrationする

https://miniflux.app/docs/binary_installation.html

sudo /usr/local/bin/miniflux -migrate  -c /etc/miniflux.conf

service restart

 sudo systemctl restart miniflux
 sudo systemctl status miniflux
ログインするとコメントできます