FreshRSSとは?VPSへのインストール方法

読了時間 6分
Tropic
FreshRSSとは?VPSへのインストール方法

FreshRSS:アルゴリズムに左右されない自分専用のニュースフィード

SNSでは、どの投稿を最初に表示するかをサービス側が決めます。そのため、プロジェクトの重要な更新を見逃し、代わりに何十件ものおすすめが表示されることがあります。FreshRSSの仕組みは異なります。情報源を自分で選び、新しい記事を1つの時系列フィードで確認できます。

FreshRSSは自分のサーバーにインストールし、ブログ、ニュース、ソフトウェアの更新、フォーラム、ポッドキャスト、その他のRSSまたはAtom対応サイトをまとめる「受信トレイ」として利用できます。ここでは、アプリケーションの機能、サーバー要件、DockerとHTTPSを使ってVPSに導入する手順を説明します。

5ステップで導入するFreshRSS

  1. Linux VPSを作成し、rss.example.comなどのサブドメインをそのVPSに向けます。
  2. DockerとDocker Composeをインストールします。
  3. FreshRSSとCaddyを起動し、HTTPSを自動設定します。
  4. サブドメインを開き、SQLiteを選択してアカウントを作成します。
  5. OPMLから購読情報をインポートするか、サイトを手動で追加します。

設定後は、ユーザーのパソコンが電源オフでも、VPSがスケジュールに従って情報源を自動確認します。

FreshRSSとは

FreshRSSは、無料で利用できるセルフホスト型のRSS・Atomアグリゲーターです。セルフホスト型とは、アプリケーションとデータベースをクラウドサービス側ではなく、自分で管理するサーバー上で動かす方式を指します。

RSSフィードは、サイトが新しいコンテンツを公開したときに更新する専用ファイルです。FreshRSSは選択した情報源からこれらのファイルを定期的に取得し、記事を1つの画面にまとめます。未読記事、スター付きの記事、閲覧履歴は端末間で同期されます。

基本的な考え方は単純です。誰を購読し、どの順番で記事を読むかをユーザー自身が決めます。FreshRSSはエンゲージメントに基づいて記事を並べ替えず、購読記事の間におすすめコンテンツを挿入しません。

FreshRSSの機能

機能用途
カテゴリー、ステータス、お気に入り仕事、技術、個人用の情報源を分ける
検索、フィルター、保存済みクエリ必要なテーマの記事だけを表示する
OPMLのインポートとエクスポート購読リストをすばやく移行する
Google Reader APIとFever APIスマートフォンやパソコンの互換アプリを接続する
WebSub対応する情報源から公開直後に記事を受信する
複数ユーザー家族やチーム向けに個別アカウントを作成する
テーマと拡張機能画面を変更し、機能を追加する
XPathとJSON Feed通常のRSSやAtomがない一部の情報源を購読する

保存済みクエリは、独立したテーマ別フィードとして利用できます。たとえば、セキュリティに関する記事だけ、または特定製品の更新だけをまとめられます。結果はFreshRSS内で閲覧できるほか、HTMLまたはRSSとして公開できます。フィード一覧にはOPMLも利用できます。

WebSubに対応したサイトは、次回の定期確認を待たずに、新しい記事の公開をFreshRSSへ直接通知できます。この機能を利用するには、FreshRSSインスタンスが正しい公開アドレスを通じてインターネットからアクセス可能である必要があります。

FreshRSSは開発者や管理者に特に便利です。プロジェクトのブログ、リリース情報、障害レポート、セキュリティ情報を1つのフィードにまとめられます。一般的な情報収集でも、何十個ものブラウザータブを開く必要がなくなり、すべての端末で正確な「既読」状態を維持できます。

FreshRSSのシステム要件

FreshRSSは多くのリソースを必要としません。SQLite、PostgreSQL、MariaDB、MySQLに対応しています。手動でインストールする場合は、WebサーバーとPHP 8.1以降が必要です。公式の説明では、150個のフィードと2万2,000件の記事を登録したRaspberry Pi 1での動作例も紹介されています。

実用的な初期構成:

用途CPURAMストレージデータベース
個人用フィード1 vCPU1 GB10~20 GB SSDSQLite
家族または小規模チーム1~2 vCPU2 GB20~40 GB SSDSQLiteまたは外部データベース
多数のユーザーと大規模アーカイブ2 vCPU以上4 GB以上40 GB SSD以上PostgreSQLまたはMariaDB

これらは目安であり、厳密な最低要件ではありません。必要なディスク容量は、情報源の数、公開頻度、履歴の保存期間によって変わります。24時間の自動更新、外部からのアクセス、モバイル同期、WebSubが必要な場合は、自宅のパソコンよりVPSのほうが便利です。

Dockerを使ってFreshRSSをVPSにインストールする方法

以下の構成では、FreshRSSをCaddyの背後で動かします。Caddyが外部からのリクエストを受け付け、TLS証明書を自動取得します。

必要なものは、Linux VPS、docker composeコマンドを利用できるDocker、サーバーのIPアドレスを指すAレコードを設定したサブドメイン、そして開放された80番・443番ポートです。

ステップ1. ディレクトリを作成する

sudo mkdir -p /opt/freshrss
sudo chown "$USER":"$USER" /opt/freshrss
cd /opt/freshrss

ステップ2. compose.yamlを作成する

services:
  freshrss:
    image: freshrss/freshrss:latest
    container_name: freshrss
    restart: unless-stopped
    logging:
      options:
        max-size: 10m
    environment:
      TZ: Etc/UTC
      CRON_MIN: '3,33'
      FRESHRSS_ENV: production
      TRUSTED_PROXY: 172.16.0.0/12
    volumes:
      - freshrss_data:/var/www/FreshRSS/data
      - freshrss_extensions:/var/www/FreshRSS/extensions

  caddy:
    image: caddy:2
    container_name: freshrss-caddy
    restart: unless-stopped
    depends_on:
      - freshrss
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config

volumes:
  freshrss_data:
  freshrss_extensions:
  caddy_data:
  caddy_config:

CRON_MIN: '3,33'は、毎時3分と33分にフィード確認を開始します。FreshRSSは同じフィードを約20分に1回より高い頻度では更新しないため、通常はこれ以上頻繁に実行する必要はありません。

ステップ3. Caddyfileを作成する

rss.example.com {
    reverse_proxy freshrss:80
}

ドメインを自分のものに置き換えてください。DNSレコードが反映され、ポートにアクセスできる状態になると、Caddyが証明書を自動で取得し、更新します。

ステップ4. FreshRSSを起動する

docker compose up -d
docker compose ps

ログは次のコマンドで確認できます。

docker compose logs -f --tail=100

https://rss.example.comを開きます。インストールウィザードが環境を確認し、データベースの選択と最初のユーザー作成を案内します。個人用サーバーでは、別のデータベースコンテナが不要なSQLiteが最も簡単です。

初期設定

FreshRSSは通常、サイトの一般的なURLからRSSまたはAtomフィードを検出できます。自動検出できない場合は、フィードの直接URLを入力してください。Feedly、Inoreader、その他のリーダーからは、OPMLを使って購読情報を簡単に移行できます。

最初から情報源を「必読」「仕事」「セキュリティ」「長文」「時間があるときに読む」などのカテゴリーに分けておきます。投稿数の多いニュースサイトによって、本当に重要な更新がメインフィードから押し出されないようにしてください。

アプリを接続するには、認証設定でAPIを有効にし、プロフィールで専用のAPIパスワードを設定します。Google Reader APIのアドレスは次のとおりです。

https://rss.example.com/api/greader.php

メインパスワードとAPIパスワードは同じにしないことをおすすめします。

未読記事に埋もれないための設定

FreshRSSは少し設定するだけで、より便利になります。

  • メインフィードには重要な情報源だけを残す。
  • フィルターを使い、不要なカテゴリーを自動で既読にする。
  • 製品、著者、テーマごとの検索クエリを保存する。
  • 定期的に統計を確認し、ノイズしか生まない情報源を削除する。

拡張機能を利用すると、読了時間の表示、単語のハイライト、画像のプロキシ、YouTubeの埋め込み、Webhook通知、互換性のあるLLM APIによる記事分類などを追加できます。サードパーティー製の拡張機能は、信頼できる配布元からのみインストールしてください。

更新、セキュリティ、バックアップ

コンテナを更新するには、次のコマンドを実行します。

cd /opt/freshrss
docker compose pull
docker compose up -d

大規模な更新の前にはバックアップを作成してください。freshrss_dataボリュームにはユーザー設定が保存され、SQLiteを使用している場合は記事データベースも含まれます。拡張機能を利用している場合は、freshrss_extensionsも保存してください。PostgreSQL、MariaDB、MySQLでは、データベースのダンプを別途作成する必要があります。

最低限のセキュリティ対策:

  • HTTPSを使用する。
  • 必要なアカウントを作成した後、公開登録を無効にする。
  • 必要がない限り匿名アクセスを有効にしない。
  • 専用のAPIパスワードを使用する。
  • FreshRSSと拡張機能を定期的に更新する。
  • バックアップをVPSの外部に保存する。

OPMLのエクスポートは完全なバックアップの代わりにはなりませんが、互換性のあるRSSリーダーで購読リストをすばやく復元できます。

tropic.hostのVPSでFreshRSSを運用する

FreshRSSは最初のセルフホストサービスに適しています。必要なリソースが少なく、Dockerで起動でき、購読情報をインポートするとすぐに役立ちます。公開VPSなら、24時間のフィード更新、スマートフォンからのアクセス、WebSubの正常な動作を実現できます。

個人利用なら、通常は小規模なLinux構成で十分です。tropic.hostでは、FreshRSS専用のサブドメインを用意し、入門向けVPSから始めて、自宅のパソコンとは独立してサービスを運用できます。プランを選ぶ際は、大きなCPU余力よりも、安定性、アーカイブ用の容量、バックアップを重視してください。

まとめ

FreshRSSは、何十ものサイトを、アルゴリズムによる順位付けのない管理しやすい個人フィードにまとめます。モバイルクライアント、フィルター、保存済みクエリ、複数ユーザー、WebSub、拡張機能に対応しながら、小規模なVPSでも動かせる軽さを保っています。

導入に必要なのはDocker、ドメイン、SQLiteです。インストール後にカテゴリー、自動更新、HTTPS、バックアップを設定してください。そうすれば、FreshRSSは選んだ情報源だけを表示し、読む内容をユーザー自身が管理できます。

FAQ

FreshRSSは無料ですか?

はい。FreshRSSはAGPL-3.0ライセンスで提供されています。レンタルVPS上で動かす場合は、インフラの料金だけが必要です。

FreshRSSはドメインなしでも利用できますか?

はい。コンテナのポートを公開すれば利用できます。ただし、常用する場合はドメインとHTTPSを設定することをおすすめします。安全なアクセス、モバイル同期、WebSubの利用が簡単になります。

FreshRSSにはどのくらいのメモリが必要ですか?

個人用フィードなら、1 GBのRAMとSQLiteから始めるのが現実的です。大規模なアーカイブ、複数ユーザー、追加サービスを利用する場合は、より多くのメモリが必要です。

RSSがないサイトも追加できますか?

場合によっては可能です。FreshRSSはXPathによるWebスクレイピングに対応していますが、ルールは手動で設定する必要があります。サイトのレイアウトが変わると、その情報源の修正が必要になる場合があります。

必ずバックアップすべきものは何ですか?

最優先はfreshrss_dataボリュームです。SQLiteを使用している場合、記事データベースが保存されています。freshrss_extensionsも保存し、外部データベースを利用している場合はダンプを作成してください。