# Synology AI Proxy Server デプロイガイド ## 📋 前提条件 - ✅ Synology NASにDockerがインストールされている - ✅ Container Managerでgitea環境が稼働している - ✅ 新しいGoogle AI StudioプロジェクトでAPIキーを取得済み --- ## 🚀 デプロイ手順 ### ステップ1: ファイルをSynologyにアップロード #### 方法A: File Station(推奨・簡単) 1. **Synology DSMにログイン** - ブラウザで `http://[SynologyのIP]:5000` にアクセス 2. **File Stationを開く** - メインメニュー → File Station 3. **プロジェクトフォルダに移動** - `/docker/ponshu-ai-factory/` に移動 - (もしフォルダ名が違う場合は、Giteaのdocker-compose.ymlがある場所) 4. **新しいファイルをアップロード** - `ai-proxy` フォルダを作成 - 以下のファイルをアップロード: - `server.py` - `requirements.txt` - `README.md` 5. **docker-compose.ymlを更新** - 既存の `docker-compose.yml` を新しいバージョンで上書き 6. **.envファイルを作成** - `.env.example` を `.env` にコピー - `.env` を編集して、`YOUR_GEMINI_API_KEY_HERE` を実際のAPIキーに置き換え #### 方法B: Git(上級者向け) ```bash # PCのターミナルから cd c:\Users\maita\posimai-project\ponshu_room_lite\tools\synology # Giteaにpush(既にリポジトリがある場合) git add . git commit -m "feat: Add AI Proxy Server with rate limiting" git push origin main # SynologyにSSH接続 ssh maita@[SynologyのIP] # プロジェクトフォルダに移動 cd /volume1/docker/ponshu-ai-factory # Giteaからpull git pull origin main # .envファイルを作成 cp .env.example .env nano .env # APIキーを設定 ``` --- ### ステップ2: APIキーの設定 1. **Google AI Studioで新しいプロジェクトを作成** - https://aistudio.google.com/ にアクセス - 新しいプロジェクトを作成(**Early Accessでない通常プロジェクト**) - "Get API key" → "Create API key in new project" - APIキーをコピー 2. **Synologyの.envファイルに設定** - File Stationで `/docker/ponshu-ai-factory/.env` を編集 - `GEMINI_API_KEY=実際のAPIキー` に変更 - 保存 --- ### ステップ3: Dockerコンテナを起動 #### Container Managerを使う場合(推奨) 1. **Container Managerを開く** - DSMメインメニュー → Container Manager 2. **プロジェクトを停止** - 「プロジェクト」タブ - 既存の `ponshu-ai-factory` プロジェクトを選択 - 「停止」をクリック 3. **プロジェクトを再構築** - 「アクション」→「ビルド」をクリック - 数分待つ(Pythonの依存関係をインストール中) 4. **プロジェクトを起動** - 「起動」をクリック 5. **コンテナの状態を確認** - 「コンテナ」タブ - `ai_proxy` コンテナが「実行中」になっているか確認 - ログを確認(「ログ」ボタン)して `🚀 AI Proxy Server started` が出ていればOK #### SSHを使う場合(上級者向け) ```bash # Synologyにログイン ssh maita@[SynologyのIP] # プロジェクトフォルダに移動 cd /volume1/docker/ponshu-ai-factory # 既存のコンテナを停止 docker-compose down # 新しいコンテナを起動 docker-compose up -d # ログを確認 docker logs ai_proxy # 正常に起動していれば以下が表示される: # 🚀 AI Proxy Server started # Model: gemini-1.5-flash # Rate Limit: 10 requests/day ``` --- ### ステップ4: 動作確認 #### ブラウザでヘルスチェック ``` http://[SynologyのIP]:8080/health ``` **期待されるレスポンス:** ```json { "status": "healthy", "gemini_api_key_configured": true, "rate_limit": 10, "model": "gemini-1.5-flash" } ``` --- ## 🔧 トラブルシューティング ### コンテナが起動しない **原因1: .envファイルが見つからない** - `.env.example` を `.env` にコピーしたか確認 - `.env` に正しいAPIキーが設定されているか確認 **原因2: ポート8080が既に使われている** ```bash # ポート使用状況を確認 netstat -tuln | grep 8080 # 他のアプリが使っている場合は、docker-compose.ymlのポートを変更 # ports: # - "8081:8080" # 外部8081 → コンテナ内8080 ``` **原因3: Pythonの依存関係インストールに失敗** ```bash # コンテナ内に入ってログ確認 docker exec -it ai_proxy bash pip install -r requirements.txt python server.py ``` ### APIキーが認識されない ```bash # 環境変数を確認 docker exec ai_proxy printenv | grep GEMINI # GEMINI_API_KEY が空の場合は .env ファイルを確認 ``` ### アプリから接続できない 1. **ネットワーク確認** - Synologyとスマホが同じネットワークにいるか - ファイアウォールで8080ポートが開いているか 2. **IPアドレス確認** ```bash # SynologyのIPを確認 ifconfig | grep inet ``` 3. **アプリ側のURLを確認** - `http://192.168.1.xxx:8080/analyze` のようになっているか - `https://` ではなく `http://` を使用 --- ## 📊 使用状況の確認 ### 特定デバイスの使用状況を確認 ```bash # デバイスIDを取得(アプリのログから) DEVICE_ID="a1b2c3d4..." # SHA256ハッシュ # ブラウザまたはcurlで確認 curl http://[SynologyのIP]:8080/usage/${DEVICE_ID} ``` ### 全デバイスの使用状況を確認 ```bash # Synologyにログイン ssh maita@[SynologyのIP] # 使用状況ファイルを確認 cat /volume1/docker/ponshu-ai-factory/ai-proxy-data/usage.json ``` **データ形式:** ```json { "a1b2c3d4e5f6...": { "2026-01-15": 3, "2026-01-14": 7 }, "f6e5d4c3b2a1...": { "2026-01-15": 10 } } ``` --- ## 🔐 セキュリティのベストプラクティス 1. **APIキーを絶対にGitにコミットしない** - `.env` ファイルは `.gitignore` に追加済み - 万が一コミットした場合は即座にAPIキーを再発行 2. **定期的にログをチェック** ```bash docker logs ai_proxy | tail -50 ``` 3. **不正アクセスの監視** - `usage.json` で異常な使用パターンを確認 - 知らないデバイスIDが大量に出ている場合は要調査 4. **ファイアウォール設定** - Synology DSM → コントロールパネル → セキュリティ → ファイアウォール - ポート8080はローカルネットワークのみ許可(外部には開放しない) --- ## 📈 次のステップ 1. **アプリ側の実装** - `lib/services/gemini_service.dart` をプロキシサーバー経由に変更 - デバイスID認証の実装 2. **Pro版の準備** - `RATE_LIMIT_PER_DAY=999999` で無制限に変更 - 決済システムと連携 3. **モニタリング** - Grafanaなどで使用状況をダッシュボード化 - アラート設定(異常なリクエスト数など) --- ## 💡 よくある質問 **Q: 1日10回の制限はいつリセットされますか?** A: 日本時間の0時(サーバー時刻基準)にリセットされます。 **Q: 複数のアプリバージョン(開発版/本番版)で使えますか?** A: はい。デバイスIDが同じであれば共通のカウントになります。別々にしたい場合は、環境ごとにプロキシサーバーを分けてください。 **Q: Gemini APIのコストは誰が負担しますか?** A: プロキシサーバーの管理者(あなた)が負担します。gemini-1.5-flashは1日1,500回まで無料なので、10ユーザー×10回/日=100回/日であれば無料枠内です。 **Q: レート制限を超えたらどうなりますか?** A: アプリに「本日の解析上限に達しました。明日またお試しください」というメッセージが表示されます。サーバーはエラーを返しません。 --- ## 🎉 完成! これでAI Proxyサーバーの構築は完了です。次はアプリ側の実装に進みましょう!