251 lines
6.7 KiB
Markdown
251 lines
6.7 KiB
Markdown
# Cloudflare Tunnel セットアップガイド
|
||
|
||
## 概要
|
||
Tailscale Funnelの不安定性を解決するため、Cloudflare Tunnelを使用してSynology上のサービスを安全に公開します。
|
||
|
||
## メリット
|
||
- ✅ 完全無料(Cloudflare無料プラン)
|
||
- ✅ 99.99%稼働率(Cloudflareのグローバルインフラ)
|
||
- ✅ 自動HTTPS(SSL証明書不要)
|
||
- ✅ DDoS保護付き
|
||
- ✅ Synology再起動時も自動再接続
|
||
- ✅ 知人に展開しても安心の安定性
|
||
|
||
## 前提条件
|
||
1. Cloudflareアカウント(無料)
|
||
2. ドメイン名(既存ドメインまたはCloudflare Pagesの無料ドメイン)
|
||
3. Synology Docker環境
|
||
|
||
---
|
||
|
||
## Step 1: Cloudflareアカウントとドメイン設定
|
||
|
||
### 1-1. Cloudflareアカウント作成
|
||
https://dash.cloudflare.com/sign-up
|
||
|
||
### 1-2. ドメイン追加
|
||
既存ドメインをCloudflareに追加、またはCloudflare Pagesで無料ドメイン取得
|
||
|
||
**既存ドメインの場合:**
|
||
1. Cloudflareダッシュボード → 「Add a Site」
|
||
2. ドメイン入力(例: example.com)
|
||
3. ネームサーバーをCloudflareに変更(ドメイン registrarで設定)
|
||
|
||
**無料ドメインの場合:**
|
||
1. Cloudflare Pages → 「Create a project」
|
||
2. 適当なプロジェクト作成 → `xxx.pages.dev` が発行される
|
||
3. このサブドメインを使用可能
|
||
|
||
---
|
||
|
||
## Step 2: Cloudflare Tunnel作成
|
||
|
||
### 2-1. Zero Trustダッシュボードへ移動
|
||
https://one.dash.cloudflare.com/
|
||
|
||
### 2-2. トンネル作成
|
||
1. 左メニュー → **「Access」** → **「Tunnels」**
|
||
2. 「Create a tunnel」をクリック
|
||
3. トンネル名を入力(例: `posimai-synology`)
|
||
4. 「Save tunnel」
|
||
|
||
### 2-3. トークン取得
|
||
トンネル作成後、**トンネルトークン**が表示されます(後で使用)
|
||
|
||
```
|
||
eyJhIjoiNzQ5YmJhMGVhZjU5NDhhNWFkZGM3MTk3YTcxNTRmOGQiLCJ0IjoiOGE5YzEyMzQtNTY3OC05MGFiLWNkZWYtMTIzNDU2Nzg5MGFiIiwicyI6Ik5UQTBPVEl4TXpRdE5qY3lNUzAwTmpkbExXRTBNRFF0WkRJNU1qWTRNREkyWWpFMSJ9
|
||
```
|
||
|
||
このトークンをメモ(次のステップで使用)
|
||
|
||
---
|
||
|
||
## Step 3: Synology Dockerでトンネル起動
|
||
|
||
### 3-1. SSH接続
|
||
```bash
|
||
ssh admin@192.168.x.x
|
||
```
|
||
|
||
### 3-2. Dockerコンテナ起動
|
||
```bash
|
||
sudo docker run -d \
|
||
--name cloudflared-tunnel \
|
||
--restart=unless-stopped \
|
||
cloudflare/cloudflared:latest tunnel \
|
||
--no-autoupdate run \
|
||
--token eyJhIjoiNzQ5YmJhMGVhZjU5NDhhNWFkZGM3MTk3YTcxNTRmOGQiLCJ0IjoiOGE5YzEyMzQtNTY3OC05MGFiLWNkZWYtMTIzNDU2Nzg5MGFiIiwicyI6Ik5UQTBPVEl4TXpRdE5qY3lNUzAwTmpkbExXRTBNRFF0WkRJNU1qWTRNREkyWWpFMSJ9
|
||
```
|
||
|
||
**注意:** `--token` の後ろに先ほどメモしたトークンを貼り付け
|
||
|
||
### 3-3. 起動確認
|
||
```bash
|
||
sudo docker ps | grep cloudflared
|
||
```
|
||
|
||
以下のように表示されればOK:
|
||
```
|
||
CONTAINER ID IMAGE STATUS
|
||
abc123def456 cloudflare/cloudflared:latest Up 2 minutes
|
||
```
|
||
|
||
---
|
||
|
||
## Step 4: Public Hostname設定(サービス公開)
|
||
|
||
### 4-1. Cloudflare Zero Trustダッシュボードに戻る
|
||
https://one.dash.cloudflare.com/ → **「Tunnels」** → 先ほど作成したトンネルをクリック
|
||
|
||
### 4-2. Public Hostnamesタブ → 「Add a public hostname」
|
||
|
||
#### 例1: Posimai Brain API
|
||
| 項目 | 設定値 |
|
||
|------|--------|
|
||
| Subdomain | `posimai-brain` |
|
||
| Domain | `example.com`(あなたのドメイン) |
|
||
| Path | (空欄) |
|
||
| Type | `HTTP` |
|
||
| URL | `localhost:8080`(Synology上のPosimai Brain APIポート) |
|
||
|
||
→ アクセス先: `https://posimai-brain.example.com`
|
||
|
||
#### 例2: Gitea
|
||
| 項目 | 設定値 |
|
||
|------|--------|
|
||
| Subdomain | `gitea` |
|
||
| Domain | `example.com` |
|
||
| Path | (空欄) |
|
||
| Type | `HTTP` |
|
||
| URL | `localhost:3000` |
|
||
|
||
→ アクセス先: `https://gitea.example.com`
|
||
|
||
#### 例3: Posimai API(Flask)
|
||
| 項目 | 設定値 |
|
||
|------|--------|
|
||
| Subdomain | `posimai-api` |
|
||
| Domain | `example.com` |
|
||
| Path | (空欄) |
|
||
| Type | `HTTP` |
|
||
| URL | `localhost:5000` |
|
||
|
||
→ アクセス先: `https://posimai-api.example.com`
|
||
|
||
### 4-3. 保存して完了
|
||
「Save hostname」をクリック
|
||
|
||
---
|
||
|
||
## Step 5: 動作確認
|
||
|
||
### 5-1. ブラウザでアクセス
|
||
```
|
||
https://posimai-brain.example.com/health
|
||
```
|
||
|
||
正常にレスポンスが返ればOK!
|
||
|
||
### 5-2. Posimai Brain UIのAPI URLを変更
|
||
|
||
#### 修正前:
|
||
```javascript
|
||
const SYNOLOGY_API = 'https://posimai-lab.tail72e846.ts.net/brain/api';
|
||
```
|
||
|
||
#### 修正後:
|
||
```javascript
|
||
const SYNOLOGY_API = 'https://posimai-brain.example.com';
|
||
```
|
||
|
||
### 5-3. Vercel再デプロイ
|
||
```bash
|
||
cd /c/Users/maita/posimai-project/posimai-brain
|
||
vercel --prod
|
||
```
|
||
|
||
---
|
||
|
||
## Step 6: 複数サービスの公開(オプション)
|
||
|
||
同じトンネルで複数サービスを公開可能:
|
||
|
||
| サービス | URL | Synologyポート |
|
||
|---------|-----|---------------|
|
||
| Posimai Brain API | `https://posimai-brain.example.com` | `localhost:8080` |
|
||
| Gitea | `https://gitea.example.com` | `localhost:3000` |
|
||
| Posimai API (Flask) | `https://posimai-api.example.com` | `localhost:5000` |
|
||
| Ponshu Room Lite AI Proxy | `https://ponshu-ai.example.com` | `localhost:8000` |
|
||
|
||
すべて同じトンネルで公開可能(追加コストなし)
|
||
|
||
---
|
||
|
||
## トラブルシューティング
|
||
|
||
### Q1. トンネルが起動しない
|
||
```bash
|
||
# ログ確認
|
||
sudo docker logs cloudflared-tunnel
|
||
|
||
# 再起動
|
||
sudo docker restart cloudflared-tunnel
|
||
```
|
||
|
||
### Q2. 502 Bad Gateway
|
||
- Synology上のサービスが起動しているか確認
|
||
- ポート番号が正しいか確認(`localhost:8080` など)
|
||
|
||
### Q3. SSL証明書エラー
|
||
- Cloudflareが自動でHTTPS証明書を発行するため、特に設定不要
|
||
- ドメインのDNSがCloudflareを向いているか確認
|
||
|
||
---
|
||
|
||
## Tailscale Funnelからの移行手順
|
||
|
||
### 移行前の確認
|
||
```bash
|
||
# 現在のTailscale Funnel設定を確認
|
||
tailscale funnel status
|
||
```
|
||
|
||
### 移行手順
|
||
1. Cloudflare Tunnel設定完了
|
||
2. Posimai Brain UIのAPI URL変更(上記参照)
|
||
3. Vercel再デプロイ
|
||
4. 動作確認後、Tailscale Funnelを停止
|
||
```bash
|
||
tailscale funnel off
|
||
```
|
||
|
||
### ロールバック方法
|
||
万が一問題があれば、元のTailscale Funnel設定に戻せます:
|
||
```bash
|
||
tailscale funnel on 8080
|
||
```
|
||
|
||
---
|
||
|
||
## まとめ
|
||
|
||
### メリット
|
||
- ✅ Synology再起動時も自動再接続(`--restart=unless-stopped`)
|
||
- ✅ 無料で複数サービス公開可能
|
||
- ✅ Cloudflareの高速CDN経由でアクセス
|
||
- ✅ DDoS保護、WAF(Web Application Firewall)付き
|
||
- ✅ 知人に展開しても安心の安定性
|
||
|
||
### デメリット
|
||
- Cloudflareアカウント設定が必要(初回のみ1時間程度)
|
||
- ドメイン設定が必要(既存ドメインまたは無料ドメイン)
|
||
|
||
### 次のステップ
|
||
1. Cloudflareアカウント作成
|
||
2. トンネルトークン取得
|
||
3. Synology Dockerで起動
|
||
4. 動作確認
|
||
5. Posimai Brain UI修正 & 再デプロイ
|
||
|
||
不明点があればサポートします!
|