Skip to content

インフラ(Proxmox)

関連: アーキテクチャ / 初回準備 / Discord / Cloudflare

方針

  • 自宅 Proxmox 上に構築する
  • 採用: pve-02 上の一体型 VM finance-manager
  • Grafana は 既存 VM(pve-03)を再利用
  • 外向き通信(Discord Gateway / Gemini API / 後から cloudflared)ができればよい
  • Discord → 自宅は Bot が外向き WebSocket でつなぐため、受信専用のポート開放は不要

構成案

MVP: 一体型 VM(採用)

項目 値
ノード pve-02
種別 VM(Terraform: pve-infra module.vm_212)
名前 finance-manager
VM ID 212
vCPU 2
RAM 4 GB
Disk 40 GB
OS Debian 13 cloud image + cloud-init
IP 192.168.40.212/24
FQDN finance.home
ユーザー debian

CPU タイプは Terraform で未指定のため、Proxmox 既定(kvm64 相当)になる。 numpy 2.4 以降の公式 wheel は x86-64-v2(SSE4.2 / POPCNT)が要るので、ダッシュボードは numpy<2.4 に留めている。 CPU を x86-64-v2-AES または host に変えればピンは外せる。変更は VM の停止が要る。

app + PostgreSQL は当面この VM に同居する。 後から DB を分離してもよい。 Grafana は既存 VM(pve-03)を再利用する。

参考: LXC で分ける場合(採用しない)

役割 種別 名前案 vCPU RAM Disk OS 目安
finance-manager アプリ LXC (unprivileged) finance-app 2 2 GB 16 GB Debian 12 / Ubuntu 24.04
PostgreSQL LXC または既存 finance-db / 既存 PG 1 1 GB 20 GB 同上
Grafana 既存 VM (既存) — — — 変更最小(データ源追加のみ)
cloudflared finance-app に同居 — — — — Tunnel 導入時に追加

もっと小さく始める: 一体型 LXC(参考)

最初に切るのが面倒なら、一時的に1台でもよい。

役割 種別 名前案 vCPU RAM Disk
app + PostgreSQL LXC finance-manager 2 2–4 GB 32 GB

後から DB を分離してもよい。 Grafana は引き続き既存 VM を使う。

フル VM にする場合

Docker を好きに使いたい、カーネルまで分けたいときだけ選ぶ。

役割 種別 vCPU RAM Disk
finance-manager VM 2 4 GB 40 GB

個人用途の Bot + API なら LXC で十分である。

ネットワーク

項目 方針
IP LAN 内固定 or DHCP予約
外向き HTTPS(Gemini / Discord)を許可
内向き公開 MVP 初期は不要(Discord Bot Gateway は外向き)
Tunnel Tasker 自動取込を入れる段階で cloudflared を finance-app に追加
Grafana → PG 自宅 LAN 内で PostgreSQL 5432 に接続(PG は LAN のみ listen)
Streamlit 同じ VM の 8501。LAN のみ。ポート開放しない

ソフトウェア構成(finance-app)

MVP 最初のスライス(Discord Bot + Gemini):

  • Discord Bot(Gateway 常駐)
  • Gemini API クライアント(text + vision)
  • PostgreSQL クライアント
  • Streamlit ダッシュボード(LAN :8501。finance-dashboard.service)
  • (後)ingest API(FastAPI 等)
  • (後)IMAP worker
  • (後)cloudflared

常駐方法の候補は systemd または Docker Compose(好みで)。

PostgreSQL

  • DB 名例: finance_manager
  • アプリ用ロールを分ける
  • バックアップ: 日次 pg_dump を別ストレージへ(後で可)
  • Grafana 用に読み取り専用ユーザーがあると安心する

スペック選定の考え方

負荷 目安
Discord メッセージ数回/日 CPU ほぼ暇
Gemini API 計算はクラウド側。アプリは待ち受け中心
画像解析 一時的にメモリを食うので RAM 2 GB あると安心
PostgreSQL(個人明細) 1 GB で十分
将来の余裕 app を 2 vCPU / 2 GB にしておけばしばらく困らない

作成チェックリスト(自宅サーバ整え)

  1. pve-infra の PR を merge / apply し finance-manager(VM 212)を作成
  2. 192.168.40.212 へ SSH(debian)できることを確認
  3. 外向き HTTPS 疎通確認
  4. 同一 VM に PostgreSQL を入れる(または後で分離)
  5. Discord Bot トークン / Gemini API キーを env で置けるようにする
  6. (任意)既存 Grafana から DB へ疎通確認
  7. Tunnel / Tasker / IMAP は Bot が動いてから

実装の始め方(合意)

いったん自宅側を整えたら、最初の開発スライスは次である。

  1. Discord Bot + Gemini + PostgreSQL
  2. テキスト / 画像の手動入力
  3. 関西弁の確認返信、今月の内訳
  4. Grafana で最低限の可視化
  5. Cloudflare Tunnel + Tasker(PayPay 自動)
  6. メール / CSV

先に着手するのは、Gemini を使った Discord 経由 Bot である。