自宅鯖 RHEL10 まとめ

自宅鯖をRHEL8からRHEL10に移行した話は、単にOSを入れ替えたというより、ハードウェア、10Gbpsネットワーク、DNS/DHCP、メール、WordPress、Dify、RAG、IT News、監視、バックアップ、セキュリティ検証まで含めた、拙宅インフラ全体の再構成になった。

関連する記事が増えてきたので、ここでは読む順番と、移行プロジェクト側の実装場所を整理しておく。細かい手順は個別記事に任せ、このページは全体像を辿るためのリファレンスにする。

全体像

現在の自宅鯖は、RHEL10上でホストネイティブなDNS/DHCP/メール系サービスを動かしつつ、WordPress、Dify、ownCloud、監視などのアプリケーションはPodman Quadletで管理している。HTTP/HTTPSの入口はTraefikで、WordPressやDifyなどの背後に振り分ける。

移行の中心になった記事は自宅鯖のRHEL8をRHEL10にAIエージェントで移行した。旧構成、移行方針、AIエージェントを使ったアセスメント、to-beモデル、Ansible Playbook化、検証作業までをまとめている。

主な役割プロジェクト側の実装関連する記事
ハードウェアCPU、メモリ、SSD、10G NICplans、ベンチマーク記事、運用メモパーツ発注、CPU、SSD
ネットワーク10Gbps LAN、IPv4/IPv6、経路、DNS配布ansible-playbooks/infra/network、baremetal/kea、baremetal/unbound、baremetal/knotネットワーク図、iperf、Kea、NetworkManager
OS基盤RHEL10、systemd、tuned、kernel/sysctlansible-playbooks/infra/*、verify-ansible-playbookRHEL10移行、チューニング結果
コンテナ基盤Podman Quadlet、Traefik、WordPress、Dify等ansible-playbooks/infra/podman-quadletQuadlet化した
アプリケーションrio.st、RAG検索、Dify、IT Newswp_news_clawler、wp-rio-st関連スクリプト、Dify/WordPress stackWordPressにRAG、IT NEWS
運用DMARC解析、OpenVAS、イメージ更新確認、バックアップansible-playbooks/operations/*、baremetal/resticDMARC、OpenVAS、各種運用記事

ハードウェア

新サーバは、RHEL10で作り直す前提で2025年7月にパーツを発注した。新・自宅鯖のパーツを発注したでは、Core Ultra 7 265、メモリ、Gen5/Gen4 SSD、10G NICなどの選定を書いている。

CPUについては自宅鯖のCPUが速いで旧旧・旧・新の差を確認した。Podmanで多数のコンテナを動かし、GPUなしでも軽いAI処理を試す前提なので、CPUとメモリは強めにしている。

SSDは自宅鯖のSSDでベースラインを取った。今後のチューニングや劣化確認のためにも、最初に基準値を残しておくのは大事。

ネットワーク

物理構成の出発点は自宅新ネットワーク図。QNAP、TP-Link、Netgearの10Gスイッチを使い、自宅内の10Gbps LANを組んでいる。

実測値はiperfで速度を測っておくにまとめた。MacStudioからTP-Link、QNAPを経由して自宅鯖までの経路で測り、sysctlやethtool側の設定値も残している。

RHEL10移行後に一番厄介だったのは、NetworkManagerとAQC107まわりのデフォルトルート問題。プロジェクト側では ansible-playbooks/infra/network に、デフォルトルートを確認して欠けていれば戻す ensure-default-route 系のsystemd timerを置いた。根本修正ではないが、運用上の回復性を上げるための暫定策。

DHCPはkeaにどハマりした件。Kea DHCPv4/DHCPv6、Unbound、HGWのRA、Zen WiFiが絡むと、問題が単純な「DHCPが動かない」では済まない。プロジェクト側では ansible-playbooks/baremetal/kea に、Keaの設定、検証、段階的cutoverの考え方を整理している。

メールとDNS

自宅鯖はDNSとメールも担っている。DNSはKnot/Unbound、メールはPostfix/Dovecot/Rspamdなどを、ホストネイティブなサービスとして管理する。コンテナに寄せないのは、DNS/DHCP/メールはホストやネットワークと密接に絡むため。

so-netのOB25B対応では、auひかりホーム10G + so-net環境でのSPF見直しについて書いた。自宅でメールを送るなら、SPF/DKIM/DMARCはもう趣味の追加設定ではなく、普通に必要な運用要件になっている。

その延長で、DMARCレポートをAIに解析させるを書いた。プロジェクト側の ansible-playbooks/operations/dmarc-report は、日次でDMARC aggregate reportを解析し、修正要否をメールで返すサービスとして管理している。

RHEL10とAnsible

プロジェクトは、移行作業のメモというより、現在の自宅鯖の構成管理リポジトリになっている。大きくは次のように分かれる。

ディレクトリ役割
ansible-playbooks/baremetalホストネイティブなサービスchrony、postfix、dovecot、rspamd、knot、unbound、kea、restic
ansible-playbooks/infraOS基盤と共通インフラnetwork、kernel-tuning、tuned-profile、podman-quadlet、users、certificates
ansible-playbooks/operations運用ジョブと監査dmarc-report、hardening、image-tag-scanner、image-update-check
verify-ansible-playbook検証、idempotence、テストホスト比較構成差分、playbook matrix、public surface比較
wp_news_clawlerIT News用WordPressプラグインRSS収集、embedding、クラスタリング、要約、ショートコード

RHEL10移行時には、AIエージェントに旧サーバのアセスメント、to-beモデル作成、サービス単位のAnsible Playbook化、検証項目の整理をかなり手伝わせた。ただし、AIエージェントに任せれば終わるわけではなく、公式ドキュメントを見る、サービス間の依存関係をまとめる、新旧サーバを取り違えない、といった運用ルールが重要だった。

Quadletとコンテナ

当初はPodman Composeを使っていたが、最終的にはQuadlet化した。理由は単純で、systemdとの親和性が高く、sliceや依存関係、起動順、運用単位を素直に扱えるから。

現在の実装上の中心は ansible-playbooks/infra/podman-quadlet。ここで wp-rio-stdifyowncloudtraefikobservabilityinfinityumami などのスタックをレンダリングする。古い quadlet-managed 配下は、かなりの部分がretired-safeな参照・退避先になっている。

WordPressは wp-rio-st スタックとして動き、Nginx、WordPress/PHP、MariaDB、Valkeyなどを含む。Difyは別スタックだが、RAGやワークフロー実験でWordPress側から参照される。

WordPress、RAG、Dify

rio.stは単なるブログではなく、WordPress上にいくつかの実験機能が載っている。WordPressにRAGを簡単に導入するでは、DifyバックエンドのRAG検索から、MariaDBのベクトルサポートを使うWordPressプラグインへ考え方を移している。

初期のWP RAG SearchはDifyに依存していたが、別スタック依存やチューニングパラメータの多さが運用上の重さになった。そのため、より単純なWP Retrieverとして、WordPress内で完結しやすい方向に寄せた。

このあたりの運用補助スクリプトは scripts/wp_rag_*.phpscripts/deploy_plugin.sh に残っている。DifyやInfinity rerankerなどの実体は、Quadletスタック側で管理される。

IT News

IT NEWS は、WordPressプラグイン wp_news_clawler で実装している。RSS/RDF/Atomを収集し、英語記事を日本語化し、embeddingを保存し、類似度でクラスタリングし、OpenAI Responses APIで日本語タイトルと短い概要を生成する。

固定ページ側は wpan_news limit="100" のショートコードで表示する。収集はWordPressのwp-cronではなく、wp-rio-st コンテナ内で wp wpan collect をsystemd timerから実行する想定にしている。これは、WordPressの画面表示と重い収集・正規化処理を分けたいから。

検証とセキュリティ

OpenVASでスキャンしてみるでは、外部露出を確認する話を書いた。プロジェクト側では ansible-playbooks/operations/hardening に、OpenSCAP/OpenVASの結果を踏まえたremediation planを置いている。

このホストはSSH、HTTPS、SMTP、Submission、SMTPS、IMAP、IMAPS、DNSなどを意図的に提供するので、一般的なベンチマークに対して「閉じればよい」とはならない。必要な公開面は例外として明記し、SSH、sudo、fail2ban、firewalld、sysctl、AIDEなどは役割に合わせて硬くする。

Playbookの検証は verify-ansible-playbook にまとめている。idempotence matrixでは、baremetal、infra、operations、podman-quadletなどを、check-first、clean-on-test、retired-safeといった分類で管理している。

チューニングと運用監視

チューニング結果では、Headless Chrome + Lightningでrio.stを測った結果を残している。プロジェクト側では ansible-playbooks/infra/tuned-profileinfra/kernel-tuninginfra/cgroup-slice などが土台になる。

コンテナイメージの運用では、同じtagのdigest driftを見る image-update-check と、新しいtagが出ているかを見る image-tag-scanner を分けている。どちらもreport-onlyで、自動更新ではなく、最終判断はoperator側に残す。

ドキュメント化

構成が大きくなると、ブログ記事だけではなく、配布用・整理用の文書も欲しくなる。OverleafでSoftware Design風レイアウトを作るは、その延長にある。AIエージェントにOverleafを立てさせ、Software Design風の誌面レイアウトを作らせた。

自宅鯖の話は、日々の作業メモとしてはブログでよいが、全体像や手順書、運用設計はPDFや同人誌の形にした方が読みやすい。プロジェクト側のREADME群と、このページのようなインデックス記事の両方が必要になる。

読む順番

初めて読むなら、以下の順が分かりやすい。

順番読むもの分かること
1RHEL8をRHEL10にAIエージェントで移行全体構成と移行方針
2新・自宅鯖のパーツを発注ハードウェアの前提
3自宅新ネットワーク図iperf10Gbps LANと実測
4KeaNetworkManager問題ネットワーク運用で詰まったところ
5Quadlet化したコンテナ運用の現在形
6WordPressにRAGIT NEWSアプリケーション層の実験
7OpenVASDMARC解析運用とセキュリティ

関連記事