本番構成と復旧
Cloudflare binding、状態遷移、保守 job の責務
| 資源 | 本番での責務 | 必須 invariant |
|---|---|---|
| Worker Static Assets | SPA と / | / は Worker first、assets は SPA fallback |
D1 (DB) | catalog、provenance、outbox、quota、tombstone | migration 0001_public_photo_library.sql と pinned model metadata |
R2 (PHOTOS) | private original | URL を公開せず Worker 経由の ready media のみ |
| Queue / DLQ | enrich/reindex/repair/purge | consumer と dead letter queue、最大 retry 8 |
Workers AI (AI) | vision と text embedding | moondream3.1-9B-A2B / embeddinggemma-300m |
Vectorize (PHOTO_VECTORS) | derived semantic vectors | 768 dimensions、cosine、revision-stamped IDs |
Rate Limit (WRITE_RATE_LIMIT) | 公開 write の短期制限 | D1 quota と併用、認証の代替ではない |
状態は pending、enqueue_failed、processing、ready、failed、tombstoned を中心に扱います。failed のうち retryable なものは lease/backoff/outbox repair で復旧し、terminal/DLQ は運用者が原因を確認します。tombstone は R2、全 vector generation、D1 関連行を削除できるまで retryable に保持します。
既定の上限は 5 MiB、最小 32 / 最大 12,000 px、40M pixels、tag 64 文字・写真あたり 32、bulk 50、日次 upload 500、全 stored photo 10,000、処理 lease 5 分です。値を変更する場合は UI 文言、Worker validation、quota/retention 運用を同時に見直してください。