0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ホームサーバー完全構築ガイド #5 情報収集システムの構築

Last updated at Posted at 2024-12-06

ホームサーバー完全構築ガイド シリーズ記事:

ホームサーバー完全構築ガイド #0 計画とハードウェア選定
ホームサーバー完全構築ガイド #1 OS導入と基本設定
ホームサーバー完全構築ガイド #2 インフラの構築
ホームサーバー完全構築ガイド #3 サービス群の選定
ホームサーバー完全構築ガイド #4 WordPressのデプロイ
ホームサーバー完全構築ガイド #6 クラウドストレージの構築
ホームサーバー完全構築ガイド #7 DevOpsプラットフォームの構築

はじめに

ホームサーバー完全構築ガイドシリーズへようこそ。このシリーズでは、ホームサーバーを活用したさまざまなシステム構築方法を紹介しています。今回のテーマは、効率的に情報を収集し管理するシステムの構築です。RSSHubFreshRSS を組み合わせ、Docker を活用して手軽に運用可能なシステムを構築します。

さらに、Nginx を使ったリバースプロキシ設定を行い、Cloudflare を DNS サービスプロバイダーとして HTTPS 通信を最適化します。

今回のゴール

  1. RSSHub の導入:カスタマイズ可能な RSS フィードを生成
  2. FreshRSS の導入:RSS リーダーとして、収集した情報を管理
  3. Nginx を使ったリバースプロキシと HTTPS 設定:ドメイン名での安全なアクセスを実現
  4. パフォーマンスとセキュリティの最適化:システムを安定して運用可能に

RSSHub と FreshRSS とは?

  • RSSHub
    RSSHub は、Web サービスやサイトからカスタム RSS フィードを生成するためのオープンソースツールです。例えば、Twitter の特定ユーザーの投稿、GitHub のリポジトリ更新、ニュースサイトの新着記事など、RSS で直接提供されない情報を簡単に取得できます

  • FreshRSS
    FreshRSS は軽量で多機能なオープンソースの RSS リーダーです。複数ユーザーをサポートしており、簡単に拡張機能を追加できる点も魅力です


準備

必要な環境

  • ネットワーク

    • ドメイン名(例:example.com)が利用可能
    • サーバーがインターネットからアクセス可能な IPv4 または IPv6 アドレスを持っていること
  • ソフトウェア

    • OS:Ubuntu 20.04、CentOS 7、または Docker をサポートする他の Linux ディストリビューション
    • Docker および Docker Compose(インストール方法は以下のリンクを参照):
      ホームサーバー完全構築ガイド #2 インフラの構築
    • Nginx:Ubuntu の場合、以下のコマンドでインストール可能です
      sudo apt update
      sudo apt install nginx
      

Nginx の設定

Nginx 設定についての注意事項

Nginxのインストールはホームサーバー完全構築ガイド #2 インフラの構築を参照してください。

以下の Nginx 設定は、Cloudflare を DNS プロバイダーとして利用し、最適化されたものです。Cloudflare を利用しない場合、設定を適宜調整してください。


RSSHub 用の Nginx 設定

/etc/nginx/sites-available/rsshub に以下の内容を追加します:

server {
    listen 80;
    listen [::]:80;

    server_name rsshub.example.com;

    server_tokens off;

    include /etc/nginx/trust_source/cloudflare;
    deny all;

    access_log /var/log/nginx/rsshub/access80.log;
    error_log /var/log/nginx/rsshub/error80.log;

    return 301 https://$server_name$request_uri;
}

server {
    listen 443      ssl;
    listen [::]:443 ssl;

    http2 on;

    server_name rsshub.example.com;

    server_tokens off;

    include /etc/nginx/trust_source/cloudflare;
    deny all;

    ssl_certificate     /path/to/example.com.pem;
    ssl_certificate_key /path/to/example.com.key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_dhparam /path/to/dhparam;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers off;

    add_header Strict-Transport-Security "max-age=63072000" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;

    ssl_stapling on;
    ssl_stapling_verify on;

    ssl_trusted_certificate /path/to/origin_ca_rsa_root.pem;

    resolver 1.1.1.1;

    access_log /var/log/nginx/rsshub/access443.log;
    error_log /var/log/nginx/rsshub/error443.log;

    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_min_length 256;

    location / {
        proxy_pass http://127.0.0.1:7270$request_uri;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-Scheme $scheme;
        proxy_set_header Host $host;
    }
}

FreshRSS 用の Nginx 設定

/etc/nginx/sites-available/freshrss に以下の内容を追加します:

upstream freshrss {
    server 127.0.0.1:7273;
    keepalive 64;
}

server {
    listen 80;
    listen [::]:80;

    server_name news.example.com;

    server_tokens off;

    include /etc/nginx/trust_source/cloudflare;
    deny all;

    access_log /var/log/nginx/freshrss/access80.log;
    error_log /var/log/nginx/freshrss/error80.log;

    return 301 https://$server_name$request_uri;
}

server {
    listen 443      ssl;
    listen [::]:443 ssl;

    http2 on;

    server_name news.example.com;

    server_tokens off;

    include /etc/nginx/trust_source/cloudflare;
    deny all;

    ssl_certificate     /path/to/example.com.pem;
    ssl_certificate_key /path/to/example.com.key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    ssl_dhparam /path/to/dhparam;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers off;

    add_header Strict-Transport-Security "max-age=63072000" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;

    ssl_stapling on;
    ssl_stapling_verify on;

    ssl_trusted_certificate /path/to/origin_ca_rsa_root.pem;

    resolver 1.1.1.1;

    access_log /var/log/nginx/freshrss/access443.log;
    error_log /var/log/nginx/freshrss/error443.log;

    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_min_length 256;

    location / {
        proxy_pass http://freshrss/;

        add_header X-Frame-Options SAMEORIGIN;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy

_read_timeout 90;
    }
}

Nginx 設定の有効化

sudo ln -s /etc/nginx/sites-available/rsshub /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/freshrss /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Docker

Dockerのインストールはホームサーバー完全構築ガイド #2 インフラの構築を参照してください。

RSSHub のデプロイ

RSSHub 用の docker-compose.yml 作成

RSSHub の設定ファイルを保存するディレクトリを作成します:

mkdir -p ~/rsshub
cd ~/rsshub

以下の内容を含む docker-compose.yml ファイルを作成します:

version: '3.9'

services:
    rsshub:
        image: diygod/rsshub:chromium-bundled
        restart: always
        ports:
            - 'ポート:1200'
        environment:
            NODE_ENV: production
            CACHE_TYPE: redis
            REDIS_URL: 'redis://redis:6379/'
            PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'
        depends_on:
            - redis
            - browserless

    browserless:
        image: browserless/chrome
        restart: always

    redis:
        image: redis:alpine
        restart: always
        volumes:
            - /var/www/rsshub/data:/data

RSSHub の起動

docker-compose.yml ファイルがあるディレクトリで以下のコマンドを実行して RSSHub を起動します:

sudo docker-compose up -d

RSSHub が正しく動作しているか確認するには、以下の URL にアクセスしてください:

http://<サーバーのIPアドレス>:ポート

RSSHub のトップページが表示されれば、正常に動作しています。


FreshRSS のデプロイ

FreshRSS 用の docker-compose.yml 作成

FreshRSS の設定ファイルを保存するディレクトリを作成します:

mkdir -p ~/freshrss
cd ~/freshrss

以下の内容を含む docker-compose.yml ファイルを作成します:

version: "3.8"

services:
  freshrss:
    image: freshrss/freshrss:latest
    container_name: freshrss
    depends_on:
      - mysql
    restart: unless-stopped
    ports:
      - "ポート:80"
    volumes:
      - /var/www/freshrss/data:/var/www/FreshRSS/data
      - /var/www/freshrss/extensions:/var/www/FreshRSS/extensions

  mysql:
    image: mysql:latest
    container_name: mysql
    restart: unless-stopped
    volumes:
      - /var/www/freshrss/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: <MYSQL_ROOT_PASSWORD>
      MYSQL_DATABASE: freshrss
      MYSQL_USER: freshrss
      MYSQL_PASSWORD: <MYSQL_PASSWORD>

FreshRSS の起動

docker-compose.yml ファイルがあるディレクトリで以下のコマンドを実行して FreshRSS を起動します:

sudo docker-compose up -d

FreshRSS が正しく動作しているか確認するには、以下の URL にアクセスしてください:

http://<サーバーのIPアドレス>:ポート

ブラウザで FreshRSS の初期設定ページが表示されるはずです。画面の指示に従って設定を完了してください:

  1. 管理者アカウントの作成:ユーザー名とパスワードを入力
  2. データベースの設定docker-compose.yml で指定した MySQL の設定を入力
  3. 言語とタイムゾーンの設定:日本語と Asia/Tokyo を選択

情報収集システムの利用

RSSHub を活用したフィード生成

例えば、Twitter の特定ユーザーの投稿を RSS フィード化する場合、以下の形式の URL を使用します:

http://rsshub.example.com/twitter/user/ユーザー名

FreshRSS にフィードを登録

  1. FreshRSS にログイン
  2. 左上の 「購読管理」 をクリック
  3. 「新しいフィードを追加」 を選択し、RSSHub で生成した URL(例:http://rsshub.example.com/twitter/user/ユーザー名)を入力
  4. カテゴリを選択して 「追加」 をクリック

FreshRSS が自動的にフィードを取得し、記事をリストに表示します。


セキュリティと最適化

RSSHub のアクセス制限

RSSHub へのアクセスを制限するため、API キーを設定できます。

docker-compose.ymlrsshub サービスに以下の設定を追加します:

        environment:
            ACCESS_KEY: <your_access_key>

RSSHub を再起動します:

sudo docker-compose up -d

API キーを設定した場合、生成された RSS URL に ?key=<your_access_key> を追加する必要があります:

http://rsshub.example.com/twitter/user/ユーザー名?key=<your_access_key>

FreshRSS の自動更新

FreshRSS は定期的に RSS フィードを更新します。この更新間隔を調整するには、CRON を設定します。

docker-compose.ymlfreshrss サービスに以下を追加します:

        environment:
            CRON_MIN: '0,30' # 30分ごとに更新

設定を変更したら、コンテナを再起動します:

sudo docker-compose up -d

トラブルシューティング

よくある問題

  1. RSSHub が動作しない

    • コンテナのログを確認します:
      sudo docker logs rsshub
      
    • Nginx の設定やポートが正しいか確認してください
  2. FreshRSS が RSS フィードを取得しない

    • FreshRSS のログを確認します:
      sudo docker logs freshrss
      
    • フィードの URL が正しいか、アクセス可能か確認してください

まとめ

本記事では、RSSHubFreshRSS を活用した情報収集システムを構築しました。以下の内容をカバーしました:

  1. Docker Compose を使用して RSSHub と FreshRSS をデプロイ
  2. Nginx を使ってリバースプロキシと HTTPS を設定
  3. フィード生成から管理までのワークフローを紹介

これにより、効率的で安全な情報収集システムを運用可能になりました。ぜひ、ご自身のニーズに合わせてカスタマイズしてみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?