自分専用のオフライン・インターネットを構築:DockerでKiwixをホストする

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

インターネットが遮断されたとき

想像してみてください。日曜日の午後11時、システムの重要な移行作業の真っ最中だとします。突然、ISP(インターネットサービスプロバイダー)の計画外メンテナンスで回線が落ちました。私にも経験があります。古いPythonライブラリの特定の構文を確認したかったのですが、Stack Overflowにも公式ドキュメントにもアクセスできませんでした。完全に手詰まりです。この瞬間、私のHomeLabに大きな欠陥があることが露呈しました。バックアップやメディアの自動化は済んでいましたが、自分の機材を修理するための知識については、100%外部의接続に依存していたのです。

私たちはインターネットを照明のスイッチのように、当たり前に使えるものだと思いがちです。しかし、HomeLab愛好家にとって、真の自立とは、たとえ世界との接続が断たれても情報にアクセスできることを意味します。地域の停電であれ、電波の届かない僻地であれ、人類の知識のローカルコピーを保持しておくことは、究極のセーフティネットになります。

オフラインデータの技術的な壁

オフライン化への本当の障壁は、意欲ではなく、データの技術的な煩雑さにあります。従来のツールでWikipediaをダウンロードしようとすると、数百万もの小さなHTMLファイルが生成されます。これらを効率的にインデックス化したり検索したりするのはほぼ不可能です。PDFも同様に厄介です。サイズが肥大化し、500ものマニュアルから目的の情報を検索するのは苦痛なほど時間がかかります。

この規模のデータセットは膨大です。2024年版の英語版Wikipedia「all-max」(全画像を含む)は、現在約112GBあります。それだけのデータのストレージ管理、検索インデックス作成、ウェブインターフェースの運用を個人で行うのは、それだけで重労働です。多くの人が、記事を読むためだけにカスタムデータベースを構築したくないという理由で諦めてしまいます。

最適なオフラインツールの選択

私はこの課題を解決するために3つの主要な方法を検討し、最終的な勝者を見つけました。

  • 手動のPDFコレクション: 書籍には適していますが、技術リファレンスとしては不向きです。ウェブを便利にしている相互参照や検索スピードが失われてしまいます。
  • HTTrack Website Copier: サイトをミラーリングできますが、リンク切れが頻発します。また、コピー先のサーバーに過度な負荷をかけるという問題もあります。
  • KiwixとZIMフォーマット: KiwixはZIMファイルを使用します。これはウェブサイト全体を単一の最適化されたファイルに圧縮するオープン標準規格です。組み込みの検索インデックスが含まれており、元のフォーマットも維持されます。

Kiwixが勝者である理由は、コンテンツとリーダーを分離している点にあります。このモジュール性により、DockerベースのHomeLabに最適な候補となります。

DockerによるKiwixサーバーのデプロイ

Using Dockerを使用するのがKiwixを実行する最も効率的な方法です。セットアップを隔離した状態に保ち、ネットワーク上のあらゆるデバイスにコンテンツを提供できます。ノートPC、タブレット、スマートフォンから、標準的なブラウザ経由でライブラリにアクセス可能です。

私はこの構成を控えめなスペックのRaspberry Pi 4で1年以上運用しています。低電力なハードウェアでも、Kiwixは200ミリ秒未満で検索結果を返します。ZIMフォーマットは、まさにこのような高性能なインデックス作成のために設計されています。

ステップ1:ストレージの準備

まず、WikipediaやStack Overflowなどのサイトのローカル「データベース」として機能する、ZIMファイルを保存するためのディレクトリ構造を作成します。

mkdir -p ~/homelab/kiwix/data
cd ~/homelab/kiwix

ステップ2:コンテンツのダウンロード

次に、Kiwix Libraryにアクセスしてデータを取得します。技術的なラボには、以下のものがおすすめです。

  • Wikipedia: 全画像を含む「max」バージョン(110GB以上)、またはテキストのみの「nopic」(約50GB)。
  • Stack Overflow: 完全なQ&Aコレクション(約42GB)。
  • MDN Web Docs: ウェブ開発には欠かせません。
  • ArchWiki: おそらく史上最高のLinuxリソースです。

これらの .zim ファイルを ~/homelab/kiwix/data フォルダに移動します。

ステップ3:Docker Composeの設定

次に、docker-compose.yml ファイルを作成します。KiwixはCPUとRAMの消費が非常に少ないのが特徴です。唯一必要なのはディスク容量だけです。

services:
  kiwix:
    image: kiwix/kiwix-serve
    container_name: kiwix-server
    restart: always
    volumes:
      - ./data:/data
    ports:
      - "8080:80"
    command: ["/data/*.zim"]

この設定では、command によってディレクトリ内のすべてのZIMファイルを読み込むようKiwixに指示しています。これにより更新が簡単になります。新しいライブラリを追加したい場合は、ファイルを置いてコンテナを再起動するだけです。

ステップ4:サーバーの起動

コマンド1つでオフラインライブラリを起動します。

docker-compose up -d

起動したら、ブラウザで http://[YOUR-SERVER-IP]:8080 を開いてください。ダウンロードしたすべてのコンテンツが表示されるクリーンなダッシュボードと、即座に機能するグローバル検索バーが表示されます。

エクスペリエンスの最適化

基本的な機能でも十分ですが、いくつかの調整を加えることで、よりプロフェッショナルなシステムになります。

大規模なコレクションの管理

コレクションが数十ファイルに増えると、ダッシュボードが乱雑になることがあります。その場合は、composeファイルの command セクションでワイルドカード * を使う代わりに、正確なファイル名を指定することで整理できます。

DNSとリバースプロキシ

プロフェッショナルな仕上げとして、Nginx Proxy Managerなどのリバースプロキシを使用しましょう。wiki.home.arpa のようなローカルドメインをコンテナにマッピングできます。これにより、ポート番号を覚える必要がなくなり、家族もライブラリを使いやすくなります。

コンテンツを最新に保つ

ZIMファイルはスナップショットであることに注意してください。自動的には更新されません。私は通常、半年に一度Wikipediaの最新ダンプを、四半期ごとにStack Overflowの新しいセットをダウンロードしています。data フォルダのファイルを入れ替えて、docker-compose restart kiwix を実行するだけです。

最後に

HomeLabは通常、「どのように」ホストするか、保護するか、自動化するかといった手法に焦点が当てられます。しかし、「何を」ホストするかも同様に重要です。私たちがホストするデータこそが真の価値です。Kiwixサーバーを構築することで、ISP의稼働状況に関わらず、重要な知識を常に利用可能な状態に保つことができます。

自分のデータが安全であると知ることは、一種の安心感をもたらします。明日、世界がオフラインになったとしても、あなたのクローゼットにはWikipediaと数十年にわたるStack Overflowの知恵があり、ミリ秒単位で検索可能なのです。

Share: