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

141 lines
3.2 KiB
Markdown
Raw Normal View History

# Ponshu Room Proxy Server (Redis永続化対応)
Gemini APIキーを隠蔽し、デバイスごとの利用制限レート制限を管理するプロキシサーバー。
## 🎯 機能
- **APIキー保護**: クライアントアプリにAPIキーを含めず、プロキシサーバーのみが保持
- **レート制限**: デバイスIDごとに1日あたりのリクエスト数を制限
- **Redis永続化**: Dockerコンテナ再起動後もカウントを維持
- **認証**: Bearer Token認証オプション
- **Dokploy対応**: 将来のDokploy移行に対応した構成
---
## 🚀 クイックスタートSynology NAS
### 1. 環境変数ファイル作成
```bash
cp .env.example .env
```
`.env` を編集してAPIキーと認証トークンを設定:
```env
GEMINI_API_KEY=AIzaSy...あなたのAPIキー
PROXY_AUTH_TOKEN=$(openssl rand -hex 32) # ランダム生成推奨
DAILY_LIMIT=50
```
### 2. Docker Composeで起動
```bash
docker-compose up -d
```
### 3. 動作確認
```bash
curl http://localhost:8080/health
# 期待される出力: OK
```
---
## 📊 Redis データ確認
```bash
# Redisコンテナに接続
docker exec -it ponshu-redis redis-cli
# 使用状況確認
KEYS usage:*
GET "usage:device-123:2026-02-21"
TTL "usage:device-123:2026-02-21"
```
---
## 🔄 運用コマンド
```bash
# ログ確認
docker-compose logs -f proxy
# 再起動
docker-compose restart
# 停止
docker-compose stop
# 完全削除(データも削除)
docker-compose down -v
```
---
## 📚 ドキュメント
- **移行ガイド**: [REDIS_MIGRATION_GUIDE.md](REDIS_MIGRATION_GUIDE.md) - In-MemoryからRedis永続化への移行手順
- **セットアップガイド**: [../../docs/SYNOLOGY_PROXY_SETUP.md](../../docs/SYNOLOGY_PROXY_SETUP.md) - 初回構築手順(旧版・参考用)
---
## 🏗️ アーキテクチャ
```
Flutter App (Client)
↓ HTTP POST /analyze
↓ Authorization: Bearer <token>
Proxy Server (Node.js/Express)
↓ Rate Limit Check (Redis)
↓ Gemini API Call
Gemini 2.5 Flash API
```
---
## 🔐 セキュリティ
- `.env` ファイルは **Git管理しない**`.gitignore`に追加済み)
- `PROXY_AUTH_TOKEN`**長いランダム文字列** を使用
- 外部公開する場合は **リバースプロキシ + HTTPS** 推奨
---
## 📝 環境変数
| 変数名 | 説明 | デフォルト |
|--------|------|-----------|
| `GEMINI_API_KEY` | Gemini APIキー必須 | なし |
| `PROXY_AUTH_TOKEN` | Bearer Token認証推奨 | なし(認証無効) |
| `DAILY_LIMIT` | 1日あたりのリクエスト上限 | 50 |
| `REDIS_HOST` | Redisホスト名 | `redis` |
| `REDIS_PORT` | Redisポート | `6379` |
| `PORT` | Proxy Serverポート | `8080` |
---
## 🆘 トラブルシューティング
### Q: `Redis connection failed`
**解決策**: Redisコンテナが起動していることを確認
```bash
docker-compose ps
# ponshu-redis が "Up (healthy)" になっているか確認
```
### Q: Flutter アプリから接続できない
**解決策**:
1. `.env``PROXY_AUTH_TOKEN` を確認
2. Flutter の `lib/secrets.local.dart` で同じトークンを設定
3. Synology NASのIPアドレス`100.76.7.3`)が正しいか確認
---
**Last Updated**: 2026-02-21