ホームサーバー完全構築ガイド #4 情報収集システムの構築
シリーズ記事:
ホームサーバー完全構築ガイド #0 計画とハードウェア選定
ホームサーバー完全構築ガイド #1 OS導入とインフラ設定
ホームサーバー完全構築ガイド #2 サービス群の選定
ホームサーバー完全構築ガイド #3 WordPressのデプロイ
はじめに
ホームサーバー完全構築ガイドシリーズへようこそ。このシリーズでは、ホームサーバーを活用したさまざまなシステム構築方法を紹介しています。今回のテーマは、効率的に情報を収集し管理するシステムの構築です。RSSHub と FreshRSS を組み合わせ、Docker を活用して手軽に運用可能なシステムを構築します。
さらに、Nginx を使ったリバースプロキシ設定を行い、Cloudflare を DNS サービスプロバイダーとして HTTPS 通信を最適化します。
今回のゴール
- RSSHub の導入:カスタマイズ可能な RSS フィードを生成
- FreshRSS の導入:RSS リーダーとして、収集した情報を管理
- Nginx を使ったリバースプロキシと HTTPS 設定:ドメイン名での安全なアクセスを実現
- パフォーマンスとセキュリティの最適化:システムを安定して運用可能に
RSSHub と FreshRSS とは?
-
RSSHub
RSSHub は、Web サービスやサイトからカスタム RSS フィードを生成するためのオープンソースツールです。例えば、Twitter の特定ユーザーの投稿、GitHub のリポジトリ更新、ニュースサイトの新着記事など、RSS で直接提供されない情報を簡単に取得できます -
FreshRSS
FreshRSS は軽量で多機能なオープンソースの RSS リーダーです。複数ユーザーをサポートしており、簡単に拡張機能を追加できる点も魅力です
1. 準備
1.1 必要な環境
-
ネットワーク:
- ドメイン名(例:
example.com
)が利用可能 - サーバーがインターネットからアクセス可能な IPv4 または IPv6 アドレスを持っていること
- ドメイン名(例:
-
ソフトウェア:
- OS:Ubuntu 20.04、CentOS 7、または Docker をサポートする他の Linux ディストリビューション
- Docker および Docker Compose(インストール方法は以下のリンクを参照):
Docker のインストールガイド - Nginx:Ubuntu の場合、以下のコマンドでインストール可能です
sudo apt update sudo apt install nginx
2. Nginx の設定
2.1 Nginx 設定についての注意事項
以下の 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
以下是剩余部分的内容,完整翻译为日语,并调整为针对日本读者习惯优化的本地化表达。
3. RSSHub のデプロイ
docker-compose.yml
作成
3.1 RSSHub 用の 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
3.2 RSSHub の起動
docker-compose.yml
ファイルがあるディレクトリで以下のコマンドを実行して RSSHub を起動します:
sudo docker-compose up -d
RSSHub が正しく動作しているか確認するには、以下の URL にアクセスしてください:
http://<サーバーのIPアドレス>:ポート
RSSHub のトップページが表示されれば、正常に動作しています。
4. FreshRSS のデプロイ
docker-compose.yml
作成
4.1 FreshRSS 用の 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>
4.2 FreshRSS の起動
docker-compose.yml
ファイルがあるディレクトリで以下のコマンドを実行して FreshRSS を起動します:
sudo docker-compose up -d
FreshRSS が正しく動作しているか確認するには、以下の URL にアクセスしてください:
http://<サーバーのIPアドレス>:ポート
ブラウザで FreshRSS の初期設定ページが表示されるはずです。画面の指示に従って設定を完了してください:
- 管理者アカウントの作成:ユーザー名とパスワードを入力
-
データベースの設定:
docker-compose.yml
で指定した MySQL の設定を入力 -
言語とタイムゾーンの設定:日本語と
Asia/Tokyo
を選択
5. 情報収集システムの利用
5.1 RSSHub を活用したフィード生成
例えば、Twitter の特定ユーザーの投稿を RSS フィード化する場合、以下の形式の URL を使用します:
http://rsshub.example.com/twitter/user/ユーザー名
5.2 FreshRSS にフィードを登録
- FreshRSS にログイン
- 左上の 「購読管理」 をクリック
-
「新しいフィードを追加」 を選択し、RSSHub で生成した URL(例:
http://rsshub.example.com/twitter/user/ユーザー名
)を入力 - カテゴリを選択して 「追加」 をクリック
FreshRSS が自動的にフィードを取得し、記事をリストに表示します。
6. セキュリティと最適化
6.1 RSSHub のアクセス制限
RSSHub へのアクセスを制限するため、API キーを設定できます。
docker-compose.yml
の rsshub
サービスに以下の設定を追加します:
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>
6.2 FreshRSS の自動更新
FreshRSS は定期的に RSS フィードを更新します。この更新間隔を調整するには、CRON
を設定します。
docker-compose.yml
の freshrss
サービスに以下を追加します:
environment:
CRON_MIN: '0,30' # 30分ごとに更新
設定を変更したら、コンテナを再起動します:
sudo docker-compose up -d
7. トラブルシューティング
よくある問題
-
RSSHub が動作しない
- コンテナのログを確認します:
sudo docker logs rsshub
- Nginx の設定やポートが正しいか確認してください
- コンテナのログを確認します:
-
FreshRSS が RSS フィードを取得しない
- FreshRSS のログを確認します:
sudo docker logs freshrss
- フィードの URL が正しいか、アクセス可能か確認してください
- FreshRSS のログを確認します:
8. まとめ
本記事では、RSSHub と FreshRSS を活用した情報収集システムを構築しました。以下の内容をカバーしました:
- Docker Compose を使用して RSSHub と FreshRSS をデプロイ
- Nginx を使ってリバースプロキシと HTTPS を設定
- フィード生成から管理までのワークフローを紹介
これにより、効率的で安全な情報収集システムを運用可能になりました。ぜひ、ご自身のニーズに合わせてカスタマイズしてみてください。
Discussion