乱数の管 (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.jsonc の
migrations.new_sqlite_classes で設定済み)。これは Workers 無料プランで動作する。
万一デプロイ時に課金プランを要求された場合のみ Workers Paid ($5/月) が必要になる。
- https://dash.cloudflare.com でアカウント作成(無料)。
- workers.dev サブドメイン は初回
wrangler deploy時に自動で登録を求められる。 例:kuda.<あなたのサブドメイン>.workers.devが払い出される。
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" テンプレートから作成できる。
/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済み)。
pnpm run deploy- Durable Object バインディング (
POOL) と SQLite マイグレーション (v1) が適用される。 - cron トリガー(
wrangler.jsoncのtriggers.crons、既定 1日1回)も自動で有効化される。
デプロイ直後はプールが空(=/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.jsonc の durable_objects / migrations を確認 |