Skip to content

Latest commit

 

History

History
121 lines (86 loc) · 5.13 KB

File metadata and controls

121 lines (86 loc) · 5.13 KB

Cloudflare セットアップ手順

乱数の管 (kuda) を Cloudflare Workers にデプロイする手順。 コードと wrangler.jsonc はデプロイ可能な状態になっているので、 やることは アカウント準備 → 認証 → secret投入 → deploy → 初回シード の流れ。

前提

  • Node.js 18+ と pnpm(corepack enable で有効化、または npm i -g pnpm)
  • Cloudflare アカウント(無料プランでOK)

このWorkerは SQLite-backed Durable Objects を使う(wrangler.jsoncmigrations.new_sqlite_classes で設定済み)。これは Workers 無料プランで動作する。 万一デプロイ時に課金プランを要求された場合のみ Workers Paid ($5/月) が必要になる。

1. アカウント準備(ダッシュボード、一度きり)

  1. https://dash.cloudflare.com でアカウント作成(無料)。
  2. workers.dev サブドメイン は初回 wrangler deploy 時に自動で登録を求められる。 例: kuda.<あなたのサブドメイン>.workers.dev が払い出される。

2. 認証(ローカルCLI)

cd kuda
pnpm install
pnpm exec wrangler login   # ブラウザが開いて認可

CI等でブラウザが使えない場合は、代わりに API トークンを環境変数で渡す:

export CLOUDFLARE_API_TOKEN=<Workers 編集権限のトークン>
# 複数アカウントを持つ場合は account_id の指定も必要:
export CLOUDFLARE_ACCOUNT_ID=<アカウントID>

API トークンは https://dash.cloudflare.com/profile/api-tokens で "Edit Cloudflare Workers" テンプレートから作成できる。

3. INGEST_TOKEN(補充用シークレット)を登録

/refill/ingest の Bearer 認証に使う。長いランダム値を生成して登録する。

openssl rand -hex 32                      # ← 出力をコピー
pnpm exec wrangler secret put INGEST_TOKEN # ← プロンプトに貼り付け

# ログインセッションCookie用のHMAC鍵(ダッシュボード機能に必須)
openssl rand -hex 32
pnpm exec wrangler secret put SESSION_SECRET
  • この値は Worker 側 (secret) と、補充スクリプト scripts/replenish.py の 環境変数 INGEST_TOKEN同じ値を使う。
  • チャットやログ・コミットに絶対に貼らない。 漏れると管に混ぜ物ができてしまい、 出自の保証が崩れる。リポジトリには含めないこと(.dev.vars.gitignore 済み)。

4. デプロイ

pnpm run deploy
  • Durable Object バインディング (POOL) と SQLite マイグレーション (v1) が適用される。
  • cron トリガー(wrangler.jsonctriggers.crons、既定 1日1回)も自動で有効化される。

5. 初回シード & 動作確認

デプロイ直後はプールが空(=/drop が 503)。一度手で補充してから確認する。

TOKEN=<3で登録したトークン>
URL=https://kuda.<あなたのサブドメイン>.workers.dev

# ANU から補充(通常は cron が1日1回、1024バイトを自動でやる)
curl -X POST $URL/refill -H "Authorization: Bearer $TOKEN"

# 残量確認(消費しない)
curl $URL/status

# 一滴取り出す(消費する)
curl $URL/drop

デプロイ後に一度手で /refill を叩き、ANU のレスポンス形式とレート制限の挙動を 確認しておくこと(レガシーAPIは仕様が変わることがある)。

設定のカスタマイズ

wrangler.jsonc の値で調整する。

項目 場所 既定 説明
cron 間隔 triggers.crons 0 3 * * *(UTC 03:00 = JST 12:00) ANU自動補充の頻度
1回の取得量 vars.ANU_REFILL_LENGTH 1024 cron一回あたりの取得バイト数(jsonI.php の上限)
ANUエンドポイント vars.ANU_API_URL https://qrng.anu.edu.au/API/jsonI.php QRNG API

レート制限・無料枠はリクエスト数で効くので、間隔を縮めるより1回で満タン (1024)取る方が効率的。1日1回×1024バイト = 1日1024滴の補充力があり、 消費がそれ未満なら足りる。足りなくなったら cron の回数を増やすこと。

秘密値(INGEST_TOKEN)は vars ではなく secret で管理する(手順3)。 ローカル開発では .dev.vars に置く(cp .dev.vars.example .dev.vars、gitignore済み)。

ローカルで試す(デプロイ前)

cp .dev.vars.example .dev.vars   # INGEST_TOKEN を入れる
pnpm run dev                     # http://127.0.0.1:8787 で起動

トラブルシューティング

症状 原因 / 対処
/drop が常に503 プールが空。/refill で補充、または cron の発火を待つ
/refill が 401 INGEST_TOKEN 未登録 or Bearer トークン不一致
/refill が 502 ANU API 側のエラー。時間をおいて再試行(レート制限の可能性)
デプロイで課金を要求される アカウントの状態によっては Workers Paid が必要。まず無料で試す
binding POOL not found wrangler.jsoncdurable_objects / migrations を確認