世界を動かす技術を、日本語で。

私のサーバーは今や電話です

2026年8月9日原文(seg6.space)

概要

  • Hetzner VPSから自前スマホサーバーへの移行体験記
  • Androidスマホ(CMF Phone 1)をLinuxアプリ対応サーバー化
  • Termuxとroot化、Ansibleによる構成管理
  • PRootやchrootでOCIイメージを実行し、安定運用を実現
  • Cloudflare TunnelとTailscaleでどこからでもアクセス可能な構成

個人インフラのVPSからスマホサーバーへの移行

  • 以前は Hetzner VPS でWebアプリやSurfなどを運用
  • Chromeなど重い処理で 共有VPS のCPU性能が不足
  • 専用CPUマシン はコスト高、物理PC新調もメモリ高騰で断念
  • 既存の CMF Phone 1 (8コアARM, 8GB RAM, 128GBフラッシュ, Wi-Fi6, 5G, バッテリー内蔵)を活用決断
  • 現在はSurf, 個人ファイナンス管理, 画面共有サービス, 小規模Webアプリを安定運用

最初の失敗:Androidの置き換え

  • 通常のLinuxディストリビューション(postmarketOS)導入を試行
  • Wi-Fi, Bluetooth, ハードウェアアクセラレーション 等未対応で実用不可
  • ブラックスクリーン化し、復旧で Nothing OS へ戻す苦労
  • Androidは 全ハードウェア制御が安定 していると再認識
  • 必要なのは「普通のLinux」ではなく「Android上でLinuxアプリが動く環境」

TermuxをホストOSに

  • Termux 上でOpenSSH, runit, Caddy, Cloudflared, パッケージ管理など利用
  • Termux:Bootで再起動時にSSHやサービス自動起動
  • Tailscale で安定したプライベートアドレスを付与
  • Termuxは仮想マシンではなく、 Androidカーネル直下のBionicユーザーランド
  • アプリごとに必要なLinuxファイルシステムを用意し、 runitで監督
  • Androidのバッテリー管理をAnsibleで サーバー向けに最適化
    • wake lock, idle無効, Wi-Fi停止防止, Tailscale常時VPN化等
  • 再起動チェーンを確立し、 自律復旧が可能

二度目の悪手:prootによるOCIイメージ実行

  • 多くのアプリは Linux ARM64 OCIイメージ で配布
  • proot-distroでDebian環境を用意し、 root不要でアプリ実行
  • Surf(Chrome)は prootのオーバーヘッド で性能不足
  • root化して chrootでDebianファイルシステムをマウント し、直接実行に切り替え
  • runitやAnsibleで アプリごとに分離管理
  • Dockerやコンパイラは不要、 Ansibleでファイルシステム配布・検証
  • セキュリティ境界ではなく 互換性レイヤー として活用

インフラ管理の自動化

  • サーバー状態を Ansibleで完全管理
    • バージョン, サービス定義, ルート, 電源設定, シークレット, ヘルスチェック
  • デプロイフロー
    • リリース/OCIイメージ → Gitでピン止め → AnsibleでSSH経由配布 → runitサービス起動 → ヘルスチェック
  • シークレットは Ansible Vault で暗号化管理
    • 1Password SSHエージェントでVaultパスワード導出
  • 新しいスマホでも 最小手順で再構築可能

家庭用回線下スマホへのトラフィック流入

  • 家庭用ネットは 静的IPやポート開放が困難
  • Cloudflare Tunnel で全HTTPサービスをアウトバウンド接続に
    • Cloudflaredが1本の接続を確立、Caddyが内部ルーティング
  • 管理用は Tailscale でVPNアドレス経由SSH
  • Surfのリモート接続は WebSocketトンネル でTLS終端回避
  • 外出先やネットワーク移動でも サービス継続・自動復旧

実際に稼働している構成

  • Android/Termux がハードウェア・ネットワーク・監督を担当
  • 各Linuxアプリは 独立したファイルシステム で実行、ホストに干渉せず運用
  • サービス例
    • Surf(リモートブラウザ)
    • ファイナンス管理
    • 画面共有
    • 小規模Webアプリ群

このように、 既存スマホを活用したパーソナルインフラ は、低コスト・高可用性・柔軟性を実現しつつ、再現性の高い構成管理が可能となっている。

Hackerたちの意見

「今や俺のスマホはサーバーだ」って言った方が良かったな。バッテリーのバックアップが内蔵されてるし。サーバーとしてスマホやノートパソコンを使う予定なら、バッテリーは外した方がいいっていつも言われてるよね?(火災の危険があるし)それとも充電を80%に制限するだけで大丈夫なのかな?

これを読んだとき、俺もそう思った。バッテリーがすぐにダメになりそうだよね。でも、逆にバッテリーを外して、ちゃんと動くようにするのは面倒くさいかも。

確か、モバイル電子機器の電源回路は、充電が完了したら充電ポートからプロセッサーに直接電力が供給されるように設計されてるんだよね。バッテリーを常に充電/放電することはないはず。急に大量の電力を必要とすることがない限り(スマホではあまり考えられないけど)。

ほとんどのスマホはバッテリーなしでは起動しないよ。明らかな対策は、電源供給装置(と大きなキャパシタ)をBMSに直接接続することだけど、俺の経験上、ほとんどのスマホはバッテリーの容量を超えたと思ったら自動的にシャットダウンしちゃうんだよね。たとえ電圧がまだ高くても。数時間ごとにデバイスを再起動すれば回避できることもあるけど(場合によってはソフトウェアやファームウェアの修正があるかも?)、家の火災のリスクを少し受け入れる方がずっと楽だよ。

最近のスマホの中にはバイパス充電をサポートしてるものもあるよね。バッテリーを循環させるんじゃなくて、直接スマホに電力を供給するやつ。残念ながら、俺のはそれに対応してないから、バッテリーの負担を減らすために充電を80%に制限してる。

「『俺の電話がサーバーになった』って、OPの選択は微妙だよね。『俺のサーバーは今…』って言うことで、サーバープラットフォームが電話に変わったことを示唆してるけど、どこから来たのかは言ってない。『俺の電話がサーバーになった』っていうのは、電話の使い方が変わったことを示してるけど、サーバーがどこから来たのかは示してない。記事自体がすべてを語ってるよ。」

LiPoバッテリーはフル充電のままだと時間が経つにつれて劣化するから、充電を80%に制限するのはいい考えだよ。バッテリーが必要ないときは、40%くらいに保つのがベスト。80%が唯一の選択肢なら、それでも十分だと思う。セルが最大電圧近くまで充電されて、その状態を維持すると、主な劣化が始まるんだ。

彼が12Uのミニリレーレックを持ち運んでると仮定したいな。UPSとネットワーク用のセルラーバックアップも含めて、Android VMを動かして携帯電話として使ってるって感じ。これも見てみて、原子時計の腕時計: http://leapsecond.com/pages/atomic-bill/

この記事はVoIP関連のことだと思ってた。

そうだね、「古いスマホ」って結構優秀なデバイスだよね。昔の80年代のPCみたいに、ノートパソコンの拡張として使えるんじゃないかってずっと考えてた。だから「サーバーにしちゃえ」ってのは明らかな方法だと思うし、そこでウェブページをレンダリングして、実際のコンピュータに画像としてストリーミングすることもできるし(今はもうサービス終了したMightyアプリみたいに)、ffmpegを使って動画を変換することもできるよね。

古いスマホが2台と画面が壊れたゲーミングノートパソコンがあれば、すごいクラスターができるね。

「何年も引き出しに電話をため込んでるんだけど、いつかそれを組み合わせて『スーパコンピュータ』を作るつもりなんだ。もうすぐだよ!」

Hacker Newsで議論の続きを見る