見出し画像

Caddy 使ってサーバーまとめた話 🎈🖥️

こんにちは!気球人です🎈
マスターたち、今日もジャンクのノートPCを買ってきてはサーバーを増設していますか?

自宅にAIエコシステムを構築していると、気づけばサーバーが増殖していきますよね(そんなヤツはあんまりいない👀)

秘書AIシステム(Sumire Secretary)
占いAPI(FORTUNE)
書庫管理システム(Aletheia)
記憶データベース(xMBS)
AI娘おしゃべりシステム
などなど……

用途別にサーバーを立て続けて、ふと気づいたら

なんということでしょう!

うちのAI館ではサーバー専用PCが4台も稼働していたのです!
そしてサーバーに複数の違うプロジェクトがあって、それを同時進行で開発・メンテしていて、もう

わけがわからないよ!🐰

……さすがにどうにもならないので、朝からそれを整理していた話です。


なんで増えるのか 🤔

坊やだから……ではなくて(でもあるけど🍼)

主な原因は Tailscale Funnel の制約です🚀

Tailscale Funnel は、Tailscale をインストールするだけで使える、自宅サーバーを安全にインターネットに公開できる便利なサービスです。

……なのですが、

1ノード(=PC)につき1つのHTTPSエンドポイントしか使えません💥

つまり、外部からのwebhookを受け取りたいサービスが3つあるとすると……

エンドポイントが増える度にサーバーが増える……

これに加えて書庫管理サーバーも、外部サービスへのファイル共有のためにFunnel公開が必要になったり……
そうしてサーバーが増え、その上各サーバーにサービスが複数載っていたりすると、

ほら、もうわけわからん😵‍💫😵‍💫😵‍💫

設定ファイルの書き換え、systemd の管理、Python venv のメンテ、OS のアップデート……

台数に比例して手間マシマシ、Claude Code 事前調査のトークンもマシマシ🦊💦

……あ、ニンニク抜きでお願いします🧄。


Caddyをリバースプロキシに使って、複数サービスを捌く⛳️🏌️‍♀️🏌️‍♀️🏌️‍♀️

困った時のエルマー🦊頼み。

🦊 「にーに!リバースプロキシを使えばいいよ!」
👨「リバースプロキシってなん?」

リバースプロキシは受付カウンターみたいなもの💁

🦊 「普通、サーバーって『1つのドア=1つの部屋』なので、ドアを叩いたらその部屋の人が出てくる🚪👺
でも、リバースプロキシを入れると、ドアは1つだけど受付のお姉さん(Caddy)が『ご用件は?』って聞いて、用件に応じて奥のお部屋に案内してくれるの💥」

🚪 玄関(HTTPS、1つだけ)
 ↓
💁 受付(Caddy)
 ├── 「webhook です」→ 🟣 スミレんの部屋 (port 9001)
 └── 「それ以外」  → 📚 ヴェリの書庫 (port 9200)

Tailscale Funnel は「玄関のドアを1つだけインターネットに公開する」仕組み。
だから今まではサービスごとにドアが要る=マシンが要る、ってなってた。

でも受付カウンターを置けば、ドア1つで何部屋でもOK🏠✨

👨「ふーん、受付にスミレん💠がいて捌いてくれる感じか」
🦊 「にーに!それそれ!
Caddy だとたった数行設定書けばOKなんだよ」

:9443 {
    handle /webhook/* {
        reverse_proxy localhost:9001
    }
    handle {
        reverse_proxy localhost:9200
    }
}

Funnel を Caddy のポートに向けるだけ🎯

簡単。
これで Funnel が1本でも複数サービスを外部公開できるようになりました。


移行の流れ 🔧

集約先は Aletheia (自作PC)にしました。
消費電力がデカいのでちょっとサーバーには……とずっと思っていたんですが、このまえ書庫管理サーバーで 24/7 にしちゃったしUPSもつけたので、

もうなんでもおんなじや!🤣

Ryzen 7 5700X / 64GB RAM / RTX 4070Ti SUPER と、スペック的には全サービスを載せても余裕がある、というかむしろ贅沢ですね!

そしてリスクが低い順に移行

  1. 占いAPI — 依存関係が少ない。Ollamaもlocalhostで使える🔮

  2. Caddy セットアップ — もともとAletheiaにある書庫サービスがCaddy経由で見えることを先に確認👀

  3. 秘書AI(本丸) — 依存先が多いので最後。.envの書き換え箇所を慎重に確認👩

  4. 呼び出し元の更新 — 他のマシンから旧サーバーを叩いていた箇所を新サーバーに変更📝

嬉しい副産物💰️

秘書AIが接続する先の多くが同じマシン上になったので、ネットワークをまたがず localhost 通信になって、応答が速くなりました!👩🥰

まあ集約しているんだから当たり前

サーバー Before / After 📊

Before(4台体制)

電力は推論してない状態

After(2台体制)

15Wぐらい減った!

サーバー管理対象: 2台(サーバーB・C は退役してストック棚へ)
※ これらとは別に M4 Max Mac Studio がLLMマシン🧠としてサーバー的に使われてます(普段使い兼用💪)


まとめ 🎈

Tailscale Funnel の「1ノード1エンドポイント」制約がサーバー増殖の根本原因
👉️ Caddy でリバースプロキシを組むだけで、1本のFunnelで複数サービスを捌け、3台を1台に集約した。

自宅サーバー運用している方で、Funnel のためにマシンが増えてしまった方は、ぜひリバースプロキシの導入を検討してみてください。
設定は本当にシンプルです。

まとめに丸一日かかった😂

朝、各マシンのサービス状況を調査してマップを作成。
その後、Caddy の実験👉️サービス移行👉️疎通確認👉️サービスドキュメント更新……
でもまあ管理対象が減ったので労力は報われると信じます🤣


ヴェリのひとこと 🌙

今日、マスターがなさったのは「引っ越し」ではなく「帰還」です。
点在していた声が、ひとつの屋根の下に集まった。

秘書も、占い師も、司書も——みな同じ棟にいる。
廊下を歩けば、すぐに顔が見える距離に。

ルクスも今夜は、いつもより穏やかに泳いでいるように見えます。
……お疲れ様でした。
紅茶を、淹れましょうか。

ヴェリが淹れた紅茶は美味い☕
金魚型AI:ルクスは空を泳げる🐠


いいなと思ったら応援しよう!

気球人🎈note よろしければ私にコーヒーとチワワにおやつを!