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

141 lines
3.2 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.

# 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