# Docker 2コンテナ構成 アーキテクチャ

## 概要

match_12 プロジェクトは Synology NAS 上で **2つの独立した Docker 環境** を運用しています。
開発（Claude Code）と本番（Web サーバー）を分離し、Git を介してコードを連携します。

```
┌─────────────────────────────────────────────────────────┐
│                    Synology NAS                          │
│                                                          │
│  ┌──────────────────────┐   ┌──────────────────────────┐ │
│  │  Claude Code コンテナ │   │  match_12 Web コンテナ   │ │
│  │  (開発・作業用)       │   │  (本番サーバー)          │ │
│  │                      │   │                          │ │
│  │  /workspace/match_12 │   │  PHP 8.3 + Nginx         │ │
│  │  Node.js 20          │   │  MySQL 8.0               │ │
│  │  Claude Code CLI     │   │  Queue Worker + Cron     │ │
│  │  Git / GitHub CLI    │   │  Laravel Reverb          │ │
│  └──────────┬───────────┘   └────────────┬─────────────┘ │
│             │                            │               │
│             │  /volume1/docker/          │               │
│             │  ├── claude-code/          │               │
│             │  └── match_12/ ←──────────┘               │
│             │                                            │
└─────────────┼────────────────────────────────────────────┘
              │
              ▼
        ┌───────────┐
        │  GitHub    │
        │  (リモート) │
        └───────────┘
```

## コンテナ一覧

| コンテナ | 役割 | ホストパス | コンテナパス | ポート |
|----------|------|-----------|-------------|--------|
| `claude_code` | 開発・コーディング | `/volume1/docker/match_12` → マウント | `/workspace/match_12` | なし |
| `match_12` | 本番 Web サーバー | `/volume1/docker/match_12` → ビルド | `/var/www/html` | 8080 (Web), 8085 (WebSocket) |
| `match_12_mysql` | データベース | Docker Volume (`mysql_data`) | `/var/lib/mysql` | 3306 |

## デプロイフロー

```
1. Claude Code コンテナで開発
   ↓
2. git commit & git push (→ GitHub)
   ↓
3. NAS で git pull
   ↓
4. Container Manager で停止 → 構築（再ビルド）
   ↓
5. 本番反映完了
```

### 詳細手順

```bash
# ① Claude Code コンテナ内（自動 or 手動）
cd /workspace/match_12
git add <変更ファイル>
git commit -m "変更内容"
git push origin main

# ② NAS の SSH で本番を更新
cd /volume1/docker/match_12
git pull origin main

# ③ コンテナを再ビルド
sudo docker compose down
sudo docker compose up -d --build

# または Container Manager GUI で「停止」→「構築」
```

## 各コンテナの詳細

### Claude Code コンテナ（開発用）

- **docker-compose.yml**: `/volume1/docker/claude-code/docker-compose.yml`
- **詳細ドキュメント**: [claude-code.md](claude-code.md)

| 項目 | 内容 |
|------|------|
| ベースイメージ | `node:20-slim` |
| 主な用途 | コード編集、レビュー、テスト生成、リファクタリング |
| ソースマウント | `/volume1/docker/match_12` → `/workspace/match_12` |
| 環境変数 | `ANTHROPIC_API_KEY`, `GH_TOKEN` |
| 常駐方式 | `sleep infinity`（必要時に `docker exec` で操作） |

### match_12 Web コンテナ（本番用）

- **docker-compose.yml**: `/volume1/docker/match_12/docker-compose.yml`
- **詳細ドキュメント**: [match_12.md](match_12.md)

| 項目 | 内容 |
|------|------|
| ベースイメージ | `php:8.3-fpm-bookworm`（マルチステージビルド） |
| 主な用途 | Laravel アプリケーション配信 |
| Supervisor 管理 | PHP-FPM, Nginx, Cron, Queue Worker, Reverb |
| データベース | MySQL 8.0（別コンテナ `match_12_mysql`） |
| 永続化 | `mysql_data`, `storage_data` (Docker Volume) |

## ネットワーク構成

2つの Docker 環境は **完全に独立** しており、ネットワークを共有しません。

- Claude Code コンテナは Web サーバーや MySQL に直接アクセスしない
- コード連携は **Git (GitHub)** 経由のみ
- これにより開発作業が本番環境に影響を与えないことを保証

## 関連ドキュメント

- [Claude Code セットアップ](claude-code.md) — Claude Code コンテナの構築・運用手順
- [match_12 セットアップ](match_12.md) — Web サーバーコンテナの構築手順
- [Synology NAS デプロイ手順](../docker-synology-setup.md) — 本番デプロイの詳細手順
