インフラ(Proxmox)
関連: アーキテクチャ / セットアップ / Discord / Cloudflare
| ページ | 内容 |
|---|---|
| Cloudflare | nkjm.dev / Tunnel / Access / Bearer |
方針
- 自宅 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 |
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) |
ソフトウェア構成(finance-app)
MVP 最初のスライス(Discord Bot + Gemini):
- Discord Bot(Gateway 常駐)
- Gemini API クライアント(text + vision)
- PostgreSQL クライアント
- (後)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 にしておけばしばらく困らない |
作成チェックリスト(自宅サーバ整え)
pve-infraの PR を merge / apply しfinance-manager(VM 212)を作成192.168.40.212へ SSH(debian)できることを確認- 外向き HTTPS 疎通確認
- 同一 VM に PostgreSQL を入れる(または後で分離)
- Discord Bot トークン / Gemini API キーを env で置けるようにする
- (任意)既存 Grafana から DB へ疎通確認
- Tunnel / Tasker / IMAP は Bot が動いてから
実装の始め方(合意)
いったん自宅側を整えたら、最初の開発スライスはこれ:
- Discord Bot + Gemini + PostgreSQL
- テキスト / 画像の手動入力
- 厳し目返信
- Grafana で最低限の可視化
- Cloudflare Tunnel + Tasker(PayPay 自動)
- メール / CSV
つまり「まず Gemini を使った Discord 経由 Bot」からで正しい。