Raspberry Pi Zero を搭載したシステム上で、RAM 内メモリを使用してウェブサイトを配信します。

2026/05/09 0:10

Raspberry Pi Zero を搭載したシステム上で、RAM 内メモリを使用してウェブサイトを配信します。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

本ドキュメントは、Raspberry Pi Zero における革新的なウェブホスティングアーキテクチャを概説しており、ローカルでディスクレス方式での動作と外部の TierHive VPS の組み合わせにより、

zero.btxx.org
にホストされた安全かつ低コストのプライベートサーバーを実現します。本システムは Alpine Linux を完全にメモリ上から実行する「ディスクレスモード」を採用することで、Pi Zero の 512MB RAM の制約を克服しており、microSD カードは
lbu
および
dd
を使用した永続化のための専用ストレージとしてのみ利用します。初期設定には一時的なハードウェア(モニター、HDMI アダプター、キーボード)が必要ですが、最初の起動後では SD カードを物理的に抜いても動作が中断することはありません。TLS 終端やトラフィックフォワーディングといったリソース集約的なタスクは、年間約 4 ドル(128MB RAM)という手頃な価格の TierHive VPS にオフロードされ、同 VPS の HAProxy サービスにより自動 SSL 更新も処理されます。トラフィックは
socat
を用いて再度 Pi へ転送されます。ローカルでのサービス提供には
darkhttpd
nginx
などの軽量オプションが使用され、変更は
rsync
を用いてローカルで同期されます。SSH へのアクセスには
dropbear
が推奨され、動的 IP 管理には DuckDNS が利用されており、限られたローカルリソースを外部インフラストラクチャのデレlegation により最適化する方法を実証しています。

本文

2026 年 5 月 8 日

私のマイクロサイト

zero.btxx.org
は、Alpine Linux が動作する Raspberry Pi Zero v1.3 からパブリックインターネットへ配信されています。

最も素晴らしい点は? それはディスクレスであり、完全にメモリ上で動作していることです!

私の冷凍庫(冷蔵庫ではありません)に静かに動作している私の Raspberry Pi Zero(道徳的なサポートとして追加の 2 台の Pi も同席)。zero.btxx.org を配信しています。

Pi Zero は総容量 512MB のメモリしか持っておらず、そのうち約 40MB が Alpine Linux の動作に占有されていることを考えると、これほど印象的なのはさらなることですが。最近は RAM も豊富で安いので……。まあ、そうですね。

ともかく、生きている時代は素晴らしいですね!Pi Zero を使って独自のウェブサイトを実行したい方は、ぜひこの記事をフォローしてください!


ローカル側のハードウェア

なぜ 512MB の microSD カードが必要なのか?

項目説明
Raspberry Pi Zero v1.3主要な計算ユニットです。
512MB+ の microSD カードインストールと RAM へのブートに引き続き必要です。
Waveshare Ethernet HAT(オプション)OTG アダプターでも代用可能です。
Ethernet ケーブルネットワーク接続用。
Micro USB パワーコード / パワーアダプタ電源供給用。
クーリングケース(オプション)保護と空気の循環に役立ちます。

これにより、イメージのバックアップ作業が大幅に簡素化されます(この記事の後半で詳しく説明します)。RAM の最大容量が 512MB に限られているため、必要な分を超えるデータをバックアップするのを避けるのが合理的です。

Alpine の初期インストールに一時的に必要な追加ハードウェア:

  • モニター
  • HDMI から mini-HDMI アダプタ
  • キーボード

外部側のハードウェア

私は TLS 終端処理を Pi Zero 上で直接扱うことを避けたいと考えているため、安全なトラフィックを別の小型の VPS を通じて経路化します。現在使用しているのはTierHive(紹介リンクあり)で、これまでは素晴らしいサービスを提供してくれています。まだアルファ版ですが、個人的な実験としては十分です。

私は TierHive を選択したのは、低価格とプリビルドされた HAProxy 構成オプションがあったためです。

VPS のスペック

スペック詳細
OSAlpine Linux
RAM128 MB
ストレージ1 GB(NVMe)
CPU1 vCPU
コスト〜4 ドル/年

しかし、今はその詳細には触れなくて大丈夫です。すぐに詳しく説明します!クラウドフレッドルフのような無料サービスや、別のプロバイダーを使用することも可能です。


microSD カードの準備

以下は macOS で実行した手順です。異なる OS を使用している場合は手順が異なります。Alpine イメージのダウンロード時、

.tar.gz
で終わるファイルを確保してください(microSD カードに直接 tar 内容を展開するため).

  1. SD カードを挿入し、
    diskutil list
    でディスクを確認します。今回の例では SD カードは
    /dev/disk4
    に位置しています。
  2. カードを消去し FAT32 として再パーティション分けする:
    diskutil eraseDisk FAT32 ALPINE MBRFormat /dev/disk4
    
  3. Alpine の tar バラファイルをカードに展開する:
    tar xzf alpine-rpi-*.tar.gz -C /Volumes/ALPINE
    
  4. macOS の不要なファイルを削除して外す:
    find /Volumes/ALPINE -name '._*' -delete
    rm -rf /Volumes/ALPINE/.Spotlight-V100
    rm -rf /Volumes/ALPINE/.fseventsd
    rm -rf /Volumes/ALPINE/.Trashes
    
    diskutil eject /dev/disk4
    

次に、microSD カードを Pi Zero に挿入します。Pi をモニターとキーボードに接続し、起動させてください。


ディスクレスモードの Alpine Linux

Pi が Alpine ライブ環境へとブートしたら、root ユーザーでログインします(パスワード不要)。SD カードは

/dev/mmcblk0
になっていることを確認してください。

通常なら

setup-alpine
を実行してインストーラーを進めますが、まず
lbu
の構成を行う必要があります。これにより、設定とサイトファイルを SD カード上に保存し、再起動後も永続的な変更を保持できるようにします。

setup-lbu mmcblk0p1
mkdir -p /media/mmcblk0p1/cache
setup-apkcache /media/mmcblk0p1/cache
lbu commit -d

lbu commit -d
の実行には特に注意してください。 システムにパッケージのインストール/削除やファイルの変更を行った際は、毎回このコマンドを実行する必要があります。そうしないと、後続の再起動や停電で情報が失われてしまいます。

これで準備ができたら、

setup-alpine
を実行してインストールを続けます。ここで行う手順は以下の通りです:

  • キーボード: 使用するものを選択
  • ホスト名: Pi の名前を設定
  • ネットワーク: eth0 の設定
  • DNS: 8.8.8.8 でも問題ありません(または任意のもの)
  • タイムゾーン: お住まいの地域に合わせて選択
  • ミラー:
    f
    を押して、あなたの場所から最も高速なミラーを選択
  • SSH サーバー: dropbear が他より非常に軽量です。強くおすすめします!
  • root パスワード: セットしてください
  • ディスク: 重要! ここでは「なし」を選択してください。これによりディスクレスモードが維持されます。

設定/APK キャッシュの保存先について尋ねられた際は、既に前構成した

/media/mmcblk0p1/cache
がデフォルトとして設定されているはずです。これをそのままにしておいてください。

これでインストール完了後、システムを再起動できます。起動しログインすると、以下のコマンドで RAM 上で動作しているか確認できます:

mount | grep "^/ "

ルートディレクトリ(

/
)が
tmpfs
または
ramfs
でマウントされていれば、RAM 上で動作しています。やった!


ソフトウェア

darkhttpd

基本的な HTTP のみの配信が必要で(TLS は VPS が担当するのを忘れないでください)、限られたリソース向けには

darkhttpd
が最適な Web サーバーオプションです。起動時に動作を維持するためのランタイム設定をインストール・設定しましょう:

# インストールコマンドのプレースホルダー

次に、

/etc/init.d/darkhttpd
にランタイムファイルを作成します:

#!/sbin/openrc-run

description="darkhttpd static web server"
command="/usr/bin/darkhttpd"
command_args="/var/www/example.com --port <desired-port-number> --maxconn 20"
command_background=true
pidfile="/run/darkhttpd.pid"

depend() {
    need net
}

すぐに動作させておきましょう:

chmod +x /etc/init.d/darkhttpd
rc-update add darkhttpd default
rc-service darkhttpd start

ここではウェブサイトファイルを

/var/www
下に配置しています。再起動時にこれらファイルを失わないよう、必ず
lbu
にこのディレクトリを含めることを忘れず!

lbu include /etc/init.d/darkhttpd
lbu include /var/www

また

maxconn
パラメータにも注目してください。必要に応じて調整してください。これで完了です!

nginx

Web サーバーに対して少し柔軟性や制御性を求めたい場合は、常に nginx を使用することができます。

# インストールコマンドのプレースホルダー

次に

/etc/nginx/http.d/yourdomain.com.conf
にドメイン固有の設定ファイルを作成します:

server {
    listen 8080;
    server_name yourdomain.com;
    root /var/www/yourdomain.com;

    index index.html;
    try_files $uri $uri/ =404;

    error_page 404 /404;
    location = /404 { internal; }
}

darkhttpd
で使用した同じルールを適用して、再起動または電源オフ時のファイル永続化を保証します:

rc-update add nginx default
rc-service nginx start

lbu include /etc/nginx
lbu include /var/www

rsync

ローカルマシンからこの Raspberry Pi への変更を同期するには

rsync
が必要です:

# インストールコマンドのプレースホルダー

SCP を使用したり、FTP クライアントで直接ファイルを転送する方が好む場合は、これをスキップしても構いません。これは個人的な好みの問題です。

lbu

Pi に必要な/欲しい全てのものを揃えたので、microSD カード上に再起動後も永続的に保持したいこれらの設定およびウェブサイトファイルをすべて含めます:

# 例: 以前構成した項目を含める
lbu commit -d

私たちの最終的なソフトウェアスタックの一覧:

  • dropbear(インストール時のセットアップ)
  • darkhttpd
  • lbu
  • rsync

ポートの開放

外部の VPS を TLS 終端処理に使用するため、ローカルネットワーク上では単一のポートのみを開く必要があります(今回の例では

80
ですが、任意のものを使用してください)。家のネットワークは様々であるため、ここでの詳細説明には入りません。重要なのはポート 80 を開放することと、Raspberry Pi Zero デバイスの IP アドレスをターゲットにする点です(トラブルを避けるため、静的 IP の設定も推奨されます)。以下の指示で指定されたターゲットポートに特に注意してください。

重要: インターネットサービスプロバイダー(ISP)が家庭用ネットワークにダイナミック IP を割り当てている場合は、DDNS の某种形の構成が必要です。私の推奨は DuckDNS です。


TierHive VPS

我々のニーズに対しては、VPS の低エンド仕様に実質的にしか必要ありません:

  • Alpine Linux
  • 128MB メモリ
  • 1GB ストレージ

標準的な Alpine コンフィグレーションとして、通常通り上記をセットアップしてインストールしてください。完了したら、VPS セットアップページの SSH ターゲットを使用してログインします。

この VPS に必要な主なパッケージは

socat
の一つだけです。TierHive が NAT VPS プロバイダーであるため、
socat
を使用してインターネットトラフィックをローカルの Raspberry Pi Zero に経路化します。

# socat のインストールプレースホルダー
apk add socat

次に

/etc/local.d/forward.start
を作成します:

#!/bin/sh
socat TCP-LISTEN:80,fork,reuseaddr TCP:<your-home-ip>:48080 &

<your-home-ip>
を実際の家庭用 IP アドレスまたは DDNS ホスト名、および
48080
をルーターでポートフォワードした外部ポートに置き換えてください。

また、ルーターが適切にポートをフォワーディングしていることを確認してください。例えば:

  • TCP 48080 -> Pi:

TierHive HAProxy

次に、TierHive の HAProxy エッジサービスを新しくセットアップした VPS に結びつけます。TierHive アドミンの「HAProxy」メニューに移動し、「Add Domain」を選択してください。カスタムドメインを入力し、DNS レコードへの TXT ファイル追加手順に従ってください。これはドメイン認証に使用されます。

それが確認されたら、「Configure Backends」ボタンをクリックします。その後、以下の設定を行います:

  • Single Server(シングルサーバー)
  • Regional Access(地域アクセス)
  • VPS サーバーを選択(ドロップダウンからご自身の VPS を選択)
  • ポートを設定(今回の例では 80)
  • 保存!

これらの変更は約 5 分かかって反映されます。完了すると、TierHive の HAProxy が/tiny/VPS の前に実行され、ローカルの Pi Zero を指すようになります!

VPS 上の TLS 終端処理

ここで停止しても機能するウェブサイトはできますが、大きな問題点は TLS の欠如です。2026 年のウェブサイトには好ましくありません。良い知らせは、TierHive は HAProxy サービス内に自動 SSL 更新機能を内蔵していることです。HAProxy アドミンページのドメイン設定内で「Active SSL」をクリックするだけです。

反映に少し時間がかかっても大丈夫です!これで TLS ハンドシェイクはすべて TierHive が処理し、Pi は静的コンテンツの配信に集中できるようになります。


バックアップ

このセットアップではバックアップが非常に簡単です。同じネットワーク上からは単に以下のコマンドを実行するだけです:

ssh root@YOUR-PI-ZERO-IP "dd if=/dev/mmcblk0 bs=4M" > zero-backup.img

これはバイト単位での完全な複製(バイトフォアバイトクローン)です。新しいカードにフラッシュすると、現在の microSD カードと同じように起動します。ただし、新しい SD カードのサイズは現在のものと同じかそれ以上であること!

また、Pi が完全に起動したら microSD カードを自由に取り外すことができ、ディスクレスモードのためです。その後、カードを別のデバイスに挿入して直接バックアップすることもでき、不安定なネットワーク接続への依存を排除できます!


Happy Hosting!

これで完了です。一見すると少し複雑に見えるかもしれませんが、始める頃には結構簡単だと保証します。

この投稿が他者にセルフホスティングを試すきっかけになれば幸いです!

同じ日のほかのニュース

一覧に戻る →

2026/05/09 3:45

グーグルによる再認証(reCAPTCHA)が、グーグルを利用しないアンドロイドユーザーにとって利用不能となりました。

## Japanese Translation: 元のサマリーは高品質ですが、以下の改善版では、「キーポイントリスト」に含まれていた特定の欠落していた詳細事項(Cloud Next の日程、iOS バージョン、具体的な期間)を統合し、提供されている粒度の事実と完全に整合させつつ、ナラティブの流れを維持しています。 ## 改善されたサマリー: Google は、次世代の reCAPTCHA システムを Android の Google Play Services と強く連携させることで、Google のプロプライエタリなソフトウェアを利用しないユーザーを実際に締め出す体制を確立しました。この変更により、疑わしい活動に対する従来の画像パズルが、QR コードのスキャンを要求し、これをトリガーとして Google サーバーとの背景通信を引き起こす仕組みに置き換えられました。iOS 16.4 以降を搭載した iOS デバイスはこれらの認証を追加アプリなしで完了できるのに対し、Android ユーザーは基本的なタスク(ヒューマン認証など)であっても特定の Play Services フレームワークバージョン(例:25.41.30)を実行させられています。インターネットアーカイブによる 2025 年 10 月のスナップショットを含む証拠から、この依存関係は公的な反発が発生するまで少なくとも 7 ヶ月間静かに構築されていたことが示唆されています。その結果、カスタム ROM を使用するユーザーや脱 Google化された電話機(例:GrapheneOS)を使用するユーザーは完全なアクセス拒否に直面しますが、iPhone ユーザーには影響がありません。これにより、重大なプライバシーの非対称性が生じ、基本的な Web コンテンツへのアクセスのために明示的に Google のインフラストラクチャと関与することを前提とする先例が確立されました。Google Cloud Fraud Defense(4 月 23 日の Cloud Next で発表されたもの)をこのシステムを採用するウェブ開発者は、結果として、Google のソフトウェアを回避するユーザーは歓迎されていないことを明確に示しており、プライバシー重視の個人の自由な閲覧能力を著しく制限することになります。

2026/05/08 2:11

OpenAI の WebRTC に関する問題

## Japanese Translation: OpenAI からの最近の技術ブログ投稿は、音声 AI アプリケーションにおける WebRTC の利用に関する強い批判を引き起こした。著者は以前 Twitch および Discord で勤務しており、WebRTC のリアルタイム遅延に固く設計された仕組み(特にブラウザ内でオーディオパケットの再送信ができず接続を断ちることなく破綻しないという点)が、不良ネットワーク条件下で音声 AI プロンプトの精度を大幅に低下させると論じている。テキスト読み上げストリーミングと異なり、WebRTC はバッファリング機構を持たず、高価な人為的なスリープ遅延を強制し、混雑中にパケット損失のリスクがある。さらに、WebRTC 内の TCP/TLS ハンブルク shakes は 2〜3 RTT を必要とし(シグナリング、ICE、DTLS、SCTP を含むと最大約 8 になる)、クライアント IP がネットワークスイッチングや NAT により変化すると直ちに失敗するため、OpenAI は STUN ステートをキャッシュするような脆弱なハックに依存している。Twitch や Discord のような業界リーダーは既に、プロトコルをフォークしたりネイティブアプリを使用したりすることで、これらの固有の欠陥を回避しており、多くの場合公式仕様に無視されている。一方、QUIC は Only 1 RTT の接続設定、唯一の受信者を選択した CONNECTION_ID を通じたステートレスなロードバランス(Redis の必要性を排除)、AnyCast と Unicast の両方へのサポートを提供する優れた代替案である。著者は、既存の TCP/HTTP インフラを利用し、Kubernetes 内でのシームレスなスケーリングを実現し、プロトコル上の制限と不要な遅延コストを排除することでユーザーエクスペリエンスを大幅に向上させるため、WebRTC を QUIC または WebTransport に置換することを推奨している。結局のところ、QUIC などの現代的なプロトコルを採用することで、企業は陳腐な制約と戦う代わりにサービスを効率的にスケールさせることができる。

2026/05/09 2:55

「人工知能が、二つの脆弱性文化を打破しています。」

## Japanese Translation: 核心的な主張は、現代の AI ツールがソフトウェアの脆弱性を瞬時に特定できるため、長期的なセキュリティ封鎖は危険なほど陳腐化しており、遅れた公開はユーザーおよび企業にとってリスクを伴うとすることである。従来の「調整された開示」の実践(バグを修正する前に数ヶ月間の待機期間を設けることが多くある)は、現在、人工知能を活用してほぼ直ちにエクスプロイトを見出す攻撃者にとって不必要に機会を与える窓を開いている。最近の事件から得られた証拠がこの転換を証明している;Hyunwoo Kim が公開したクリティカルなパッチは、別の研究者によって発見され、予定された長期的な封鎖を回避して公に共有された。これは、防衛側が現在、攻撃者が欠陥をスキャンするスピードと同等の速度で AI を使って検出・共有できるようになったことを示している。したがって、産業全体は特定モデルの比較(堅牢性に欠ける)に頼るのではなく、AI 駆動によるテストの高速化に合致するように開示スピードを見直し、非常に短い、あるいは封鎖を設けない方向へ移行すべきである。結局のところ、このより速いサイクルを採用することは、長期間の待機によって与えられる偽りのセキュリティ感を排除し、ユーザーが最近報告された ESP 脆弱性のようなこれまで見落とされていたギャップを自動化したスキャングループが武器化することを可能にする前に、クリティカルなパッチを受け取ることを確保する。

Raspberry Pi Zero を搭載したシステム上で、RAM 内メモリを使用してウェブサイトを配信します。 | そっか~ニュース