個人用Wayback Machineを構築:Docker上のArchiveBox運用6ヶ月の記録

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

5分で始めるクイックスタート

DockerでArchiveBoxを立ち上げるのは、ホームラボ(HomeLab)愛好家にとって、即座に効果を実感できる数少ない成功例の一つです。ここでは Docker Compose を使用するのが最適です。セットアップ全体を数秒で他のサーバーに移動できるほどのポータビリティが得られます。私のホームラボ環境では、管理を容易にするために最小限の構成を採用しています。

まず、アーカイブ用のディレクトリを作成し、docker-compose.ymlファイルを用意します。

mkdir ~/archivebox && cd ~/archivebox
touch docker-compose.yml

次に、以下の設定をファイルに貼り付けます。1つのYouTube動画でブートドライブが一杯にならないよう、MEDIA_MAX_SIZEを750MBに制限している点に注意してください。

version: '3.9'

services:
  archivebox:
    image: archivebox/archivebox:latest
    command: server --bind 0.0.0.0:8000
    ports:
      - "8000:8000"
    volumes:
      - ./data:/data
    environment:
      - ALLOW_REGISTRATION=False
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=your_secure_password
      - MEDIA_MAX_SIZE=750m

初期化は非常に簡単です。以下のコマンドを実行してデータベースをセットアップし、エンジンを起動します。

docker compose run archivebox init --setup
docker compose up -d

これで、新しいアーカイブがhttp://localhost:8000で公開されました。テストとして、CLIから直接URLを追加してみましょう。

docker compose run archivebox add 'https://itfromzero.com'

デジタル保存の現実

私たちは皆、「リンク切れ(Link Rot)」の苦しみを知っています。難解なLinuxカーネルパニックに対する完璧な解決策を見つけてブックマークしたのに、半年後に戻ってみると404エラーやドメインの期限切れに遭遇する.ArchiveBoxは、Headless Chrome、Wget、Curl、SingleFileといった強力なツールキットを統合して、あらゆるページのフォレンジック・スナップショットを取得することで、この問題を解決します。

ArchiveBoxは単にリンクを保存するだけではありません。多層的なフォールバックシステムを構築します。URLを追加するたびに、システムはPDF、高解像度のPNGスクリーンショット、WARCファイル、そしてローカライズされたHTMLファイルを生成します。もし2030年に一つの形式が読み込めなくなっても、他に3つの形式が控えているのです。これはデジタル主権における基礎となります。

パフォーマンス面では、デフォルトのSQLiteデータベースは驚くほど堅牢です。2,140件のアイテムをアーカイブした後でも、ダッシュボードの動作は軽快なままです。システムは/data/archive内でフラットファイル構造を使用しています。つまり、ArchiveBoxコンテナが完全に停止していても、grepfindを使ってスナップショットを検索できるということです。

応用編:アーカイブの自動操縦化

手動でURLを追加するのは初心者向けです。ArchiveBoxの真の力は、自動化と深い統合によって、既存の日々のワークフローに組み込むことで発揮されます。

1. ブラウザとブックマークの同期

ブラウザ拡張機能も便利ですが、リンクライブラリ全体を同期する方がさらに効果的です。PocketやWallabagを使用して記事を保存している場合は、一括でインポートできます。私はブラウザから500個のリンクをエクスポートし、以下のコマンドでインポートしました。

docker compose run archivebox add --depth=0 < /data/bookmarks_export.html

2. RSSフィードの定期取得

私は毎週更新される、質の高い技術系ブログをいくつか購読しています。手動でチェックする代わりに、内蔵のスケジューラを使用して、RSSフィードから新しいコンテンツを自動的に取得しています。毎日の同期設定は数秒で完了します。

docker compose run archivebox schedule --every=day 'https://example.com/rss.xml'

3. 認証:最後の難関(ラスボス)

ペイウォール(有料壁)やログイン画面は、綺麗なアーカイブを作成する上での最大の障害です。これらを回避するために、ArchiveBoxはブラウザのクッキーを使用できます。アクティブなセッションクッキーをデータボリューム内のcookies.txtに書き出します。これにより、MediumやO’Reillyのような、通常はブロックされてしまうサイトの非公開ドキュメントや有料記事をアーカイブできるようになります。

本番運用6ヶ月で得た教訓

個人でインターネットアーカイブを運用するのはリソースを消費します。インスタンスをスケールさせる際に出会った具体的なボトルネックをいくつか紹介します。

ストレージ戦略

ArchiveBoxは膨大なストレージを消費します。「軽い」ブログ記事でも、PDF、高解像度PNG、メディア抽出を行うと、50MBまで膨れ上がることがあります。私のアーカイブはわずか半年で124.5GBに達しました。/dataフォルダは大容量のHDDやNAS共有にマウントすることを強くお勧めします。容量が厳しい場合は、archivebox.confを編集して、動画やchrome-headlessのような帯域を消費する抽出を無効にしてください。

セキュリティと公開

デフォルトでは、これはローカル専用ツールです。外出先からリンクを追加するためにインターネットに公開する場合、組み込みの管理者パスワードだけでは不十分です。私はインスタンスをTraefikリバースプロキシの背後に置き、さらに2要素認証(2FA)のためにAutheliaレイヤーを追加しています。また、機密性の高いページを含むアーカイブデータは、ディスク上に暗号化されずに保存されることに注意してください。ホストマシンのフルディスク暗号化は必須です。

メンテナンスとアップデート

ArchiveBoxチームの開発スピードは速く、YouTubeなどのサイトが構造を変更するため、yt-dlpのようなヘルパーツールも頻繁な更新が必要です。私は毎月新しいイメージをプルしています。ルーチンはシンプルです。

docker compose pull
docker compose up -d
docker compose run archivebox init

initコマンドは決して飛ばさないでください。データベースのマイグレーションを処理し、新しいコンテナバージョン内で全てのヘルパーバイナリが正しくマッピングされることを保証します。

検索機能の課題

組み込みの検索機能はタイトルとURLに重点を置いています。2,000件以上のPDFやHTMLファイルの全文インデックスを作成すると、CPU使用率が跳ね上がります。4コアのVPSでインデックス作成中に80%のスパイクが発生するのを確認しました。ほとんどのホームラボ環境では、全ページの全単語をインデックス化しようとするよりも、しっかりとしたタグ付けシステム(例:#linux, #networking)を構築する方が効率的です。

Share: