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案に変更(最終決定)
|