# 最終アーキテクチャ決定版（Synology中心構成）

**作成日**: 2026-01-19
**決定**: Synology VM内でDokployを動かす構成を採用

---

## 🎯 **最終構成の全体像**

### **基本思想**
```
全てをSynology内で完結させる
↓
外部VPSは使わない（コストゼロ化）
↓
DokployはSynology VM内で動かす
```

---

## 📐 **物理構成**

```
┌─────────────────────────────────────────────────┐
│        あなたの自宅 Synology NAS (16GB)          │
│                                                 │
│  ┌───────────────────────────────────────────┐ │
│  │  DSM（Synology OS）                       │ │
│  │  - Container Manager                      │ │
│  │  - Virtual Machine Manager (VMM)         │ │
│  └───────────────────────────────────────────┘ │
│                                                 │
│  ┌───────────────────────────────────────────┐ │
│  │  VM #1: Ubuntu Server (4GB RAM割当)       │ │
│  │  ┌─────────────────────────────────────┐ │ │
│  │  │  Dokploy (自動デプロイエンジン)      │ │ │
│  │  │  - Traefik (リバースプロキシ)       │ │ │
│  │  │  - Docker (アプリコンテナ)          │ │ │
│  │  └─────────────────────────────────────┘ │ │
│  └───────────────────────────────────────────┘ │
│                                                 │
│  ┌───────────────────────────────────────────┐ │
│  │  Docker Containers (DSM直下)              │ │
│  │  - PostgreSQL (データベース)              │ │
│  │  - Redis (キャッシュ)                     │ │
│  │  - Immich (写真管理+AI検索)               │ │
│  │  - Ollama (ローカルAI)                    │ │
│  └───────────────────────────────────────────┘ │
│                                                 │
│  ┌───────────────────────────────────────────┐ │
│  │  Gitea (DSM直下Dockerコンテナ)            │ │
│  │  - コード管理                             │ │
│  │  - Webhook → Dokploy連携                  │ │
│  └───────────────────────────────────────────┘ │
│                                                 │
└─────────────────────────────────────────────────┘
         ↑
         │ Tailscale VPN (安全な通信)
         │
┌─────────────────────────────────────────────────┐
│        あなたのPC (開発環境)                     │
│  - Cursor / Claude Code                         │
│  - Git → Giteaにプッシュ                         │
└─────────────────────────────────────────────────┘
```

---

## 🔌 **ネットワーク構成**

```
外部インターネット
    ↓
Tailscale Funnel (HTTPS公開エンドポイント)
    ↓
https://posimai.ts.net
    ↓
Synology VM (Dokploy)
    ↓
┌─────────────────────────────────────┐
│  VM内のDockerコンテナ              │
│  - sake-app (日本酒アプリAPI)       │
│  - incense-app (お香アプリAPI)      │
│  - nail-salon (ネイルサロンWeb)     │
└─────────────────────────────────────┘
    ↓ データアクセス
┌─────────────────────────────────────┐
│  Synology DSM直下                  │
│  - PostgreSQL (100.x.x.x:5432)     │
│  - Redis (100.x.x.x:6379)          │
└─────────────────────────────────────┘
```

---

## 💾 **メモリ配分（16GB）**

| コンポーネント | 割当メモリ | 用途 |
|---------------|-----------|------|
| **DSM本体** | 2GB | Synology OS |
| **VM (Ubuntu + Dokploy)** | 4GB | 自動デプロイ + アプリ実行 |
| **PostgreSQL** | 2GB | データベース |
| **Immich** | 2-3GB | 写真管理+CLIP検索 |
| **Ollama** | 4GB | ローカルAI（夜間起動） |
| **Redis + その他** | 1-2GB | キャッシュ等 |
| **予備** | 1GB | バッファ |

**合計**: 16GB（ギリギリだが実現可能）

---

## 🔄 **自動化フロー**

```
1. コード編集
   ┌─────────────────┐
   │ Cursor/Claude   │
   │ Code → Git編集  │
   └────────┬────────┘
            │
            ▼
2. Git Push
   ┌─────────────────┐
   │ Gitea (Synology)│
   │ リポジトリ受信  │
   └────────┬────────┘
            │ Webhook
            ▼
3. 自動デプロイ
   ┌─────────────────┐
   │ Dokploy (VM内)  │
   │ - コードpull    │
   │ - Build         │
   │ - Deploy        │
   └────────┬────────┘
            │
            ▼
4. 本番更新
   ┌─────────────────┐
   │ アプリ稼働      │
   │ (VM内Docker)    │
   └─────────────────┘
```

**所要時間**: Git Pushから30秒-2分

---

## 🚀 **なぜこの構成が最適か**

### **1. コストゼロ**
- ✅ 外部VPS不要
- ✅ 月額費用: Synology電気代のみ（¥800程度）
- ✅ 年間コスト: ¥9,600

### **2. レイテンシ最小**
- ✅ VM ↔ PostgreSQL: 同一物理マシン内（<1ms）
- ✅ データ転送ゼロ（内部通信）

### **3. データ主権**
- ✅ すべてのデータが手元
- ✅ クラウド依存ゼロ

### **4. Synologyの強みを最大活用**
- ✅ 16GBメモリを全て使い切る
- ✅ VMM（仮想マシン機能）の活用
- ✅ Container Managerとの共存

---

## ⚠️ **この構成の注意点**

### **1. ポート80/443問題の解決**
```
問題: DSMとDokploy（Traefik）が両方Port 80/443を使いたい

解決: VM内で完結させる
- DSM: Port 80/443を維持（管理画面用）
- VM: 独自のIPアドレス（Tailscaleで公開）
- → ポート競合なし
```

### **2. メモリ不足リスク**
```
対策:
- Ollamaは夜間バッチのみ起動（常駐させない）
- Immichは必要時のみ起動
- Dokploy VM: 必要最低限の4GB
```

### **3. CPU負荷**
```
懸念: VM + Docker二重仮想化でCPU負荷増

現実:
- Synology CPU（Intel/AMD）は十分強力
- アプリがシンプルなら問題なし
- 負荷テストで要確認
```

---

## 📊 **VPS案との比較**

| 観点 | VPS + Synology案 | Synology VM案（最終採用） |
|------|-----------------|------------------------|
| **月額コスト** | ¥1,300 | **¥800** |
| **レイテンシ** | VPS↔Synology: 1-5ms | **VM↔DB: <1ms** |
| **メモリ余裕** | Synology: 10GB余裕 | Synology: 1GB余裕 |
| **設定複雑度** | VPS設定 + Tailscale | **VMM設定のみ** |
| **障害時影響** | VPS停止 or Synology停止 | **Synology停止のみ** |

**結論**: Synology VM案が最適

---

## 🛠️ **実装手順（Week 1-4）**

### **Week 1: VM準備**
```bash
1. Synology VMM (Virtual Machine Manager) インストール
   - パッケージセンターから検索

2. Ubuntu Server 22.04 LTS ダウンロード
   - https://ubuntu.com/download/server

3. VM作成
   - CPU: 2コア
   - メモリ: 4GB
   - ストレージ: 40GB
```

### **Week 2: Dokployインストール**
```bash
# VM内で実行
curl -sSL https://dokploy.com/install.sh | sh

# 管理画面アクセス
# Synology DSM → VMM → VM IPアドレス確認
# http://vm-ip:3000
```

### **Week 3: Tailscale設定**
```bash
# VM内でTailscaleインストール
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up

# Funnel有効化（HTTPS公開）
tailscale funnel 3000
# → https://vm-name.ts.net でアクセス可能
```

### **Week 4: Gitea連携**
```yaml
# Dokploy管理画面で設定
Repository: http://synology-tailscale-ip:3000/user/sake-app.git
Branch: main
Auto Deploy: ON
Environment Variables:
  DATABASE_URL: postgresql://user:pass@synology-ip:5432/posimai
```

---

## 🎯 **開発者がやること（通常運用）**

```
1. Cursorでコード編集
2. git add . && git commit -m "新機能追加"
3. git push origin main

→ 30秒後、本番環境に自動反映

あなたがやること: これだけ。
```

---

## 📝 **次のアクション**

### **今すぐできること**
```
1. Synology DSMにログイン
2. パッケージセンター → "Virtual Machine Manager" インストール
3. Ubuntu Server 22.04 ISOダウンロード
```

**所要時間**: 15分

---

## 🔗 **関連ドキュメント**

- [VPS比較分析](./VPS_CRITICAL_COMPARISON.md)
- [自動化安全プロトコル](./AUTOMATION_SAFETY_PROTOCOL.md)
- [アーキテクチャ決定記録](./ARCHITECTURE_DECISION_RECORD.md)

---

**更新履歴**:
- 2026-01-19: VPS案からSynology VM案に変更（最終決定）
