ponshu-room-lite/docs/architecture/archive/synology_proxy_failure_anal...

55 lines
3.2 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 Proxy 過去の失敗原因と対策 (Recap)
ユーザー様より「なぜSynology経由だとうまくいかなかったのか」というご質問を頂きました。
過去のエラーログと構成状況に基づく分析結果は以下の通りです。
## 1. 最大の原因:「自宅の壁 (Network Accessibility)」
以前の構成では、アプリの設定が以下のような **ローカルIPアドレス** になっていました。
```dart
// 以前の設定 (イメージ)
static const String proxyUrl = 'http://192.168.31.89:8080';
```
* **何が起きたか**:
* 自宅のWi-Fiに繋いでいる時: **OK** 🟢 (繋がる)
* 会社のWi-Fi / 電車の4G回線: **NG** ❌ (繋がらない)
* **症状**:
* 外出先でアプリを開くと「タイムアウト」や「接続拒否」エラーが発生。
* これを回避するためにポート開放やVPNなどを検討しましたが、設定が複雑で不安定になりがちでした。
## 2. 第2のハードル:「セキュリティ制限 (HTTP vs HTTPS)」
AndroidやiOSの最新OSは、**暗号化されていない通信 (HTTP)** をデフォルトでブロックします。
* **問題点**: 自宅サーバーに正式なSSL証明書 (`https://`) を設定するのは、ドメイン取得や証明書更新などの手間が非常に大きいです。
* **結果**: アプリ側で `android:usesCleartextTraffic="true"` といったセキュリティ緩和設定を入れる必要があり、リリース審査的にも好ましくない状態でした。
## 3. 第3の壁:「往復のレイテンシ (Double Hop)」
```text
[スマホ] --(画像)--> [Synology] --(画像)--> [Google Gemini]
```
* **ボトルネック**:
* 自宅のインターネット回線(特に**上り/アップロード速度**が遅い場合、スマホから画像を受け取ってGoogleに投げるまでの時間が倍増します。
* 画像サイズが大きいと、ここで10秒〜20秒の待ち時間が発生し、アプリが「応答なし」と判断して切断してしまうケースがありました。
---
## ✅ 今回の解決策: Cloudflare Tunnel
今回提案している「Phase 2: Container Manager + Cloudflare Tunnel」構成では、これらが全て解決します。
1. **脱・ローカルIP**: `cloudflared` コンテナが自動でトンネルを掘り、`https://ai-proxy.example.com` のような**固定の公開URL**を発行してくれます。
***会社からも電車からも繋がります。**
2. **自動HTTPS化**: Cloudflareが勝手にSSL証明書を貼ってくれるので、アプリからは完全に安全な `https` 通信として見えます。
***セキュリティエラーが出なくなります。**
3. **速度対策**:
* これでも「自宅回線の上り速度」依存は残りますが、アプリ側の実装で「画像の圧縮(Resize)」を適切に行うことで回避可能です(実装済み)。
### 結論
前回の失敗は「技術的な不可能」ではなく、**「ネットワーク経路(アクセス権)の問題」** でした。
Cloudflare Tunnel を導入することで、この経路問題はきれいに解消されます。