ponshu-room-lite/tools/proxy/REDIS_MIGRATION_GUIDE.md

291 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Synology Proxy Server - Redis永続化移行ガイド
## 📋 概要
このガイドでは、Synology NAS上のProxy Serverを**In-Memory方式からRedis永続化方式**に移行する手順を説明します。
### 移行の目的
- **永続化**: Dockerコンテナ再起動後もレート制限カウントが維持される
- **Dokploy対応**: 将来のDokploy導入時にそのまま移行可能な構成
- **複数アプリ対応**: ダッシュボードWebシステム等、他プロジェクトでもRedisを共有可能
---
## 🛠️ 前提条件
- Synology NASContainer Manager インストール済み)
- 既存のProxy Serverコンテナが稼働中`ponshu-proxy-server`
- SSH接続可能な環境または File Station経由のファイル操作
---
## 📂 ステップ1: 既存コンテナの停止と削除
### 1-1. Container Managerで既存コンテナを停止
1. Synology DSM → **Container Manager** を開く
2. **コンテナ** タブで `ponshu-proxy-server` を選択
3. **アクション****停止** をクリック
4. 停止後、**削除** をクリック(イメージは削除しない)
**注意**: 既存のレート制限カウントは削除されますが、これは移行の性質上避けられません。
---
## 📂 ステップ2: 新しいファイルをSynologyに配置
### 2-1. File Stationでファイルをアップロード
PC上の `tools/proxy/` フォルダから、以下のファイルをSynologyの `/docker/ponshu_proxy/` にアップロードします。
**アップロード対象**:
- `docker-compose.yml`**新規追加**
- `server.js`**更新版**
- `package.json`**更新版Redis依存追加**
- `Dockerfile` ← 変更なし
- `.env`**新規作成(次ステップ)**
### 2-2. `.env` ファイルを作成
File Stationで `/docker/ponshu_proxy/.env` を新規作成し、以下の内容を記述します。
```env
# Gemini API Key
GEMINI_API_KEY=AIzaSy...あなたのAPIキー
# Proxy認証トークン必須推奨
PROXY_AUTH_TOKEN=your-secure-token-here
# 1日あたりの解析回数上限
DAILY_LIMIT=50
# Redis接続設定Docker Compose使用時はデフォルトでOK
REDIS_HOST=redis
REDIS_PORT=6379
```
**セキュリティ注意**:
- `.env` ファイルは**Git管理しない**こと(`.gitignore` に追加済み)
- `PROXY_AUTH_TOKEN` は推測困難な長いランダム文字列を使用
---
## 📂 ステップ3: Docker Composeでコンテナ起動
### 3-1. SSH接続でSynologyにログイン
```bash
ssh admin@100.76.7.3
```
### 3-2. プロジェクトディレクトリに移動
```bash
cd /volume1/docker/ponshu_proxy
```
### 3-3. Docker Composeで起動
```bash
sudo docker-compose up -d
```
**実行内容**:
- `ponshu-redis`: Redisコンテナを起動ポート6379、永続化有効
- `ponshu-proxy-server`: Proxy Serverコンテナを起動ポート8080、Redis接続
### 3-4. 起動確認
```bash
sudo docker-compose ps
```
**期待される出力**:
```
NAME IMAGE STATUS
ponshu-redis redis:7-alpine Up (healthy)
ponshu-proxy-server ponshu_proxy-proxy Up (healthy)
```
---
## ✅ ステップ4: 動作確認
### 4-1. ヘルスチェック
```bash
curl http://100.76.7.3:8080/health
```
**期待される出力**: `OK`
### 4-2. Redis接続確認
```bash
# Redisコンテナに接続
sudo docker exec -it ponshu-redis redis-cli
# Redis内でコマンド実行
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> KEYS *
(empty array) # 初回起動時は空
127.0.0.1:6379> exit
```
### 4-3. レート制限テストFlutter アプリから実行)
Flutter アプリ(`lib/secrets.local.dart`)で以下を設定:
```dart
static const String aiProxyAnalyzeUrl = 'http://100.76.7.3:8080/analyze';
static const bool useProxy = true;
static const String proxyAuthToken = 'your-secure-token-here'; // .envと同じ値
```
アプリから日本酒ラベル解析を実行し、成功することを確認。
### 4-4. Redis内のデータ確認
```bash
sudo docker exec -it ponshu-redis redis-cli
# 使用状況を確認device_idは実際のデバイスIDに置き換え
127.0.0.1:6379> KEYS usage:*
1) "usage:device-123:2026-02-21"
127.0.0.1:6379> GET "usage:device-123:2026-02-21"
"1" # 1回解析済み
127.0.0.1:6379> TTL "usage:device-123:2026-02-21"
(integer) 43200 # 残り12時間秒単位
```
**重要**: TTL有効期限が設定されていることを確認してください。これにより、翌日0時以降に自動的にリセットされます。
---
## 🔄 ステップ5: コンテナ再起動テスト(永続化確認)
### 5-1. コンテナ再起動
```bash
sudo docker-compose restart
```
### 5-2. 再起動後のデータ確認
```bash
sudo docker exec -it ponshu-redis redis-cli
127.0.0.1:6379> GET "usage:device-123:2026-02-21"
"1" # 再起動前のカウントが維持されている
```
**成功条件**: 再起動後もカウントが保持されていること。
---
## 📊 運用上の注意点
### ログの確認方法
```bash
# Proxy Serverのログ
sudo docker-compose logs -f proxy
# Redisのログ
sudo docker-compose logs -f redis
```
### コンテナの停止・削除
```bash
# 停止(データは保持)
sudo docker-compose stop
# 完全削除(データも削除される)
sudo docker-compose down -v
```
**警告**: `docker-compose down -v` を実行すると、Redisのデータボリュームも削除されます。
### Redis データのバックアップ
```bash
# Redisのデータをダンプ
sudo docker exec ponshu-redis redis-cli SAVE
# ダンプファイルをコピー
sudo docker cp ponshu-redis:/data/dump.rdb /volume1/backups/redis-backup-$(date +%Y%m%d).rdb
```
---
## 🚀 Dokploy移行への準備
この構成は**Dokploy環境にそのまま移行可能**です。
### Dokploy移行時の変更点
1. **Gitea連携**: Gitea pushで自動デプロイ
2. **環境変数管理**: `.env` ファイルの代わりにDokployのWeb UIで設定
3. **ドメイン設定**: `ponshu-proxy.local` 等のカスタムドメイン自動割り当て
4. **スケーリング**: Docker Swarmで複数ードに分散可能
**移行時期**: Week 2日本酒アプリとダッシュボードを同時にDokployへ移行
---
## 🆘 トラブルシューティング
### Q1: Proxy Serverが起動しない`Redis connection failed`
**原因**: Redisコンテナが起動していない、またはネットワーク設定が誤っている。
**解決策**:
```bash
# Redisの状態確認
sudo docker-compose ps
# Redisが "unhealthy" の場合、ログを確認
sudo docker-compose logs redis
```
### Q2: `docker-compose` コマンドが見つからない
**原因**: Synology DSMのバージョンによっては `docker compose`(スペース)を使用。
**解決策**:
```bash
sudo docker compose up -d # ハイフンなし
```
### Q3: Flutter アプリから接続できない(認証エラー)
**原因**: `PROXY_AUTH_TOKEN``.env``secrets.local.dart` で一致していない。
**解決策**:
1. `.env``PROXY_AUTH_TOKEN` を確認
2. Flutter の `lib/secrets.local.dart``proxyAuthToken` を同じ値に設定
3. Flutter アプリを再起動
---
## ✅ 完了チェックリスト
- [ ] 既存コンテナを停止・削除
- [ ] 新しいファイル(`docker-compose.yml`, 更新版 `server.js`, `package.json`)をアップロード
- [ ] `.env` ファイルを作成APIキー、認証トークン設定
- [ ] `docker-compose up -d` で起動成功
- [ ] `curl http://100.76.7.3:8080/health``OK` 返却
- [ ] Redis内でデータが保存されることを確認`KEYS usage:*`
- [ ] コンテナ再起動後もデータが維持されることを確認
- [ ] Flutter アプリから解析が成功することを確認
---
**移行完了後は、この手順書を `docs/` フォルダに移動してアーカイブしてください。**