303 lines
10 KiB
Markdown
303 lines
10 KiB
Markdown
# 最終アーキテクチャ決定版(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案に変更(最終決定)
|