Phase1 サーバー構築手順
WBS 1.1(サーバー環境構築)の runbook です。 Cloudflare Tunnel 経由で FastAPI へ FB を受信できる状態を目指します。
C:\Dev\PoC_スマート農業環境構築)で確立済みの
Named Tunnel・DNS・固定ドメインを再利用します。
新規 Tunnel 作成や DNS 移管は不要です。
作業の中心は「Windows PC 上で API を起動し、cloudflared の接続先を Raspberry Pi から本 PC へ移す」ことです。
1. 前提
- Windows 11 + Docker Desktop がインストール済み・起動していること
- PoC で構築済みの Cloudflare リソースが有効であること(下表)
- PoC 記録または Zero Trust ダッシュボードから
TUNNEL_TOKENを取得できること
1.1 再利用する PoC 資産(確立済み)
| 項目 | 値 | 状態 |
|---|---|---|
| Tunnel 名 | poc-api-tunnel |
稼働中(2026-06-07 時点で /ping 応答確認済み) |
| 公開 URL | https://api.dammy-otoko.com |
HTTPS 有効 |
| Public Hostname | api.dammy-otoko.com → http://api:8000 |
変更不要(docker-compose のサービス名 api と一致) |
| DNS 管理 | Cloudflare(dammy-otoko.com) |
移管済み(Squarespace 所有権は維持) |
| 現行 cloudflared | Windows PC 上の Docker(server-cloudflared-1) |
2026-06-07 移行完了(Pi 側は停止) |
1.2 実施順序(変更後)
| 順序 | WBS | 作業 | 備考 |
|---|---|---|---|
| ① | — | Docker Desktop 起動 | 未インストールの場合は先にインストール |
| ② | 1.1.2 | 環境変数・API + DB 起動 | ローカル疎通を先に確認 |
| ③ | 1.1.3 | FB 受信 API 疎通(localhost) | test-feedback.ps1 |
| ④ | 1.1.1 | cloudflared を本 PC へ移行 | Pi 側を停止してから起動 |
| ⑤ | 1.1.1 / 1.2.3 | Tunnel 経由の外部疎通確認 | MS-1 達成 |
2. Docker Desktop の準備
スリープ復帰後や初回セットアップ時は、タスクバーで Docker Desktop が起動していることを確認します。
docker version
docker compose version
コマンドが通れば次のステップへ進みます。
3. 環境変数の準備(WBS 1.1.2)
cd server
copy .env.example .env
.env を編集します。
| 変数 | 設定内容 |
|---|---|
POSTGRES_PASSWORD | 任意の強めのパスワード(DATABASE_URL も合わせて更新) |
TUNNEL_TOKEN | PoC の poc-api-tunnel の Connector トークン(Zero Trust → Tunnels → Configure)。eyJ... で始まる長い文字列。Tunnel ID(UUID)ではない |
4. API + DB の起動(WBS 1.1.2)
cd server
docker compose up -d --build db api
起動確認(PowerShell では curl.exe 推奨):
curl.exe http://localhost:8000/api/v1/health
期待レスポンス: {"status":"ok"}
5. FB 受信 API 疎通(WBS 1.1.3・ローカル)
PowerShell スクリプトで確認:
.\scripts\test-feedback.ps1
または curl 直接:
curl -X POST http://localhost:8000/api/v1/feedback ^
-F "image=@scripts\sample.jpg" ^
-F "inference_result={\"label\":\"A\",\"score\":0.92}"
成功時: HTTP 201 と id が返る。画像は data/storage/ に保存される。
6. Cloudflare Tunnel 移行(WBS 1.1.1)
- Zero Trust での Tunnel 新規作成(
horse-feedback等) - DNS 移管(Squarespace → Cloudflare)
- Public Hostname の初回設定
Phase 1-4 ナレッジ資料:Cloudflare Named TunnelとDNS管理の勘所.md
6.1 移行前の確認(任意)
Pi 側がまだ応答していることを確認できます(移行前は PoC の /ping が返る)。
curl https://api.dammy-otoko.com/ping
期待(移行前): {"message":"pong"}(PoC FastAPI)
6.2 Raspberry Pi 側 cloudflared の停止
同一 Tunnel に複数コネクタがあると、リクエストが Pi と本 PC に振り分けられ、意図しない応答になる可能性があります。移行前に Pi 側を停止します。
# Raspberry Pi 上で実行(SSH)。docker 権限がない場合は sudo を付ける
cd ~/poc-api # PoC の compose ディレクトリ
sudo docker compose stop cloudflared
停止対象は compose のサービス名 cloudflared(コンテナ名 poc-api 等とは異なる場合あり)。
6.3 本 PC で cloudflared 起動
server/.env に TUNNEL_TOKEN(eyJ... 形式)を設定済みであることを確認し:
cd server
docker compose --profile tunnel up -d cloudflared
cloudflared の起動コマンドは --token のみです。--url との併用は禁止(PoC でタイムアウトの原因になった設定)。
Cloudflare ダッシュボードの「Windows 向け cloudflared.exe インストール」手順は不要(本プロジェクトは Docker コンテナで運用。ダッシュボードの Docker タブまたはトークンコピーで可)。
6.4 Tunnel 経由の疎通確認
curl.exe https://api.dammy-otoko.com/api/v1/health
.\scripts\test-feedback.ps1 -BaseUrl "https://api.dammy-otoko.com"
期待(移行後):
/api/v1/health→{"status":"ok"}POST /api/v1/feedback→ HTTP201
7. 完了チェック(MS-1)
2026-06-07 達成済み。
GET /api/v1/healthがローカルで成功するPOST /api/v1/feedbackで画像・JSON が保存されるhttps://api.dammy-otoko.com経由でも同じ API が応答する- DB(feedbacks テーブル)にレコードが記録される
8. トラブルシュート
| 症状 | 確認事項 |
|---|---|
docker が見つからない / daemon 未起動 |
Docker Desktop を起動(docker version で Server 行が表示されること)。PATH 反映のためターミナルを開き直す |
Provided Tunnel token is not valid |
TUNNEL_TOKEN が eyJ... 形式か確認。Tunnel ID(UUID)を入れていないか |
Cloudflare error 1033 |
cloudflared が Up か確認(docker compose ps)。トークン・Pi 側二重コネクタを確認 |
localhost の curl 失敗(PowerShell) |
PowerShell の curl は Invoke-WebRequest の別名。curl.exe を使用 |
| api が起動しない | docker compose logs api。DB 接続待ちの場合は db の healthcheck を確認 |
| Tunnel 502 | Public Hostname の URL が http://api:8000 か確認。api コンテナが起動しているか確認 |
| Tunnel タイムアウト | cloudflared に --url が付いていないか確認。Pi 側 cloudflared が残っていないか確認 |
移行後も /ping が返る |
まだ Pi 側にルーティングされている。Pi の cloudflared を停止し、本 PC の cloudflared を再起動 |
| 画像が保存されない | data/storage のマウント、ボリューム権限を確認 |
9. 参照資料(PoC)
| 資料 | パス |
|---|---|
| PoC 結果レポート | C:\Dev\PoC_スマート農業環境構築\PoC結果レポート:ホストPC〜複数クライアント通信検証(Phase 1).md |
| Named Tunnel ナレッジ | C:\Dev\PoC_スマート農業環境構築\Phase 1-4 ナレッジ資料:Cloudflare Named TunnelとDNS管理の勘所.md |
| Manus 作業記録 | RaspberryPiを用いたサーバ/クライアント構築と実現性検証 |