概要
- 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アプリ群
このように、 既存スマホを活用したパーソナルインフラ は、低コスト・高可用性・柔軟性を実現しつつ、再現性の高い構成管理が可能となっている。