ponshu-room-lite/tools/synology/ai-proxy
Ponshu Developer a5353a9b50 feat(infra): Add AI Proxy Server for Rate Limiting & API Key Protection
## 概要
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>
2026-01-15 22:50:23 +09:00
..
README.md feat(infra): Add AI Proxy Server for Rate Limiting & API Key Protection 2026-01-15 22:50:23 +09:00
requirements.txt feat(infra): Add AI Proxy Server for Rate Limiting & API Key Protection 2026-01-15 22:50:23 +09:00
server.py feat(infra): Add AI Proxy Server for Rate Limiting & API Key Protection 2026-01-15 22:50:23 +09:00

README.md

Ponshu Room AI Proxy Server

概要

Ponshu Room Liteアプリのバックエンドプロキシサーバー。Gemini APIへのリクエストを中継し、以下の機能を提供します

主な機能

  1. APIキー保護

    • アプリにAPIキーを埋め込まない
    • サーバー側で環境変数として管理
  2. デバイスID認証

    • SHA256ハッシュ化されたデバイスIDで認証
    • 未登録デバイスのアクセスを制限可能(将来実装)
  3. レート制限

    • 1デバイスあたり1日10回までLite版
    • Pro版では無制限に拡張可能
  4. 使用状況ログ

    • 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 でアクセス可能