## 概要 Gemini APIへのリクエストを中継するプロキシサーバーを実装。 アプリにAPIキーを埋め込まず、Synology上で安全に管理。 ## 主な機能 - デバイスID認証(SHA256ハッシュ) - レート制限(1デバイスあたり1日10回) - 使用状況のログ記録(JSON形式) - 30日以上前のデータ自動削除 ## 技術スタック - Python 3.11 + FastAPI - Docker Container(既存のGitea環境に追加) - ポート8080で公開 ## ファイル構成 - tools/synology/ai-proxy/server.py - プロキシサーバー本体 - tools/synology/ai-proxy/requirements.txt - Python依存関係 - tools/synology/docker-compose.yml - ai-proxyサービス追加 - tools/synology/.env.example - 環境変数テンプレート - tools/synology/DEPLOYMENT_GUIDE.md - デプロイ手順書 ## セキュリティ - .env ファイルは.gitignoreで除外(APIキー保護) - 環境変数でAPIキー管理(コードに埋め込まない) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| README.md | ||
| requirements.txt | ||
| server.py | ||
README.md
Ponshu Room AI Proxy Server
概要
Ponshu Room Liteアプリのバックエンドプロキシサーバー。Gemini APIへのリクエストを中継し、以下の機能を提供します:
主な機能
-
APIキー保護
- アプリにAPIキーを埋め込まない
- サーバー側で環境変数として管理
-
デバイスID認証
- SHA256ハッシュ化されたデバイスIDで認証
- 未登録デバイスのアクセスを制限可能(将来実装)
-
レート制限
- 1デバイスあたり1日10回まで(Lite版)
- Pro版では無制限に拡張可能
-
使用状況ログ
- JSON形式で使用履歴を記録
- 30日以上前のデータは自動削除
技術スタック
- 言語: Python 3.11
- フレームワーク: FastAPI
- HTTPクライアント: httpx
- デプロイ: Docker
エンドポイント
GET /
ヘルスチェック
GET /health
詳細なヘルスチェック(APIキー設定状況など)
POST /analyze
日本酒ラベル画像を解析
リクエスト:
{
"device_id": "sha256ハッシュ(64文字)",
"images": ["base64エンコードされた画像1", "画像2", ...],
"prompt": "カスタムプロンプト(オプション)"
}
レスポンス:
{
"success": true,
"data": {
"name": "獺祭 純米大吟醸",
"brand": "旭酒造",
"prefecture": "山口県",
...
},
"usage": {
"today": 3,
"limit": 10
}
}
GET /usage/{device_id}
デバイスの使用状況を取得
環境変数
| 変数名 | 説明 | デフォルト |
|---|---|---|
GEMINI_API_KEY |
Gemini API Key | (必須) |
GEMINI_MODEL |
使用するモデル | gemini-1.5-flash |
RATE_LIMIT_PER_DAY |
1日あたりの制限 | 10 |
データ保存
- 使用状況:
/app/data/usage.json - 30日以上前のデータは自動削除
セキュリティ
- デバイスIDはSHA256ハッシュ化されたもののみ受け入れ
- CORS設定でオリジン制限可能
- APIキーは環境変数で管理(コードに埋め込まない)
ローカルでのテスト
# 依存関係インストール
pip install -r requirements.txt
# 環境変数設定
export GEMINI_API_KEY="YOUR_API_KEY"
# サーバー起動
python server.py
http://localhost:8080 でアクセス可能