ponshu-room-lite/tools/synology/DEPLOYMENT_GUIDE.md

299 lines
8.1 KiB
Markdown
Raw Permalink Normal View History

# 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サーバーの構築は完了です。次はアプリ側の実装に進みましょう