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

299 lines
8.1 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.

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