docs: presigned-URL upload flow + B2 lifecycle setup
09-storage.md:
- Replaced the "Upload flow" section. The previous text described the
multipart-via-API path that was removed in b7f8329. Now documents
the three-step direct-to-B2 flow (presign → POST to B2 → attach
via upload_ids[]) with an ASCII diagram and a server-side
enforcement-points table.
- Replaced the "Future: signed URLs" placeholder (since presigned
URLs are now the present, not the future).
- Added "Lifecycle and retention" subsections covering the
pending_uploads cleanup cron (worker, 30 * * * *), the B2 bucket
lifecycle as backstop (uploads/ prefix, 7-day hide + 1-day delete),
and the still-open user-deletion cascade gap.
14-deployment-process.md:
- Added a "One-time B2 bucket lifecycle (manual)" section explaining
why the rule can't live in the deploy script (B2's S3 lifecycle
API is partial), the exact rule to apply via the Backblaze
console, and a verification command.
docs/deployment/README.md:
- Updated the chapter 9 description to mention presigned-URL uploads.
README.md (root):
- Added a paragraph under "Object storage" pointing to the new
upload architecture and the relevant deployment-book chapters.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -247,6 +247,38 @@ kubectl patch secret honeydue-secrets -n honeydue \
|
||||
kubectl rollout restart -n honeydue deployment/api deployment/worker
|
||||
```
|
||||
|
||||
## One-time B2 bucket lifecycle (manual)
|
||||
|
||||
The `pending_uploads` cleanup cron (`30 * * * *` on the worker) handles
|
||||
the common case of reaping orphaned uploads. The B2 bucket lifecycle
|
||||
rule on the `uploads/` prefix is the **backstop** if the worker is
|
||||
offline for >24 hours. It's configured once via the Backblaze web
|
||||
console — B2's S3 lifecycle API isn't fully implemented, so this can't
|
||||
be in the deploy script.
|
||||
|
||||
One-time setup:
|
||||
|
||||
1. Open https://secure.backblaze.com/b2_buckets.htm → bucket
|
||||
`honeyDueProd` → **Lifecycle Settings** → **Custom**
|
||||
2. Add rule:
|
||||
- File name prefix: `uploads/`
|
||||
- Hide files older than: **7 days**
|
||||
- Delete hidden files older than: **1 day**
|
||||
|
||||
Total maximum lifetime of an orphaned object after the rule fires: 8
|
||||
days. The worker normally reaps within an hour, so the rule should
|
||||
almost never trigger.
|
||||
|
||||
Verify:
|
||||
|
||||
```bash
|
||||
# Requires the b2 CLI: brew install b2-tools
|
||||
b2 bucket get-info honeyDueProd | jq '.lifecycleRules'
|
||||
```
|
||||
|
||||
See `deploy-k3s/manifests/b2-lifecycle.md` for the canonical rule
|
||||
definition and a curl-based fallback if the b2 CLI isn't available.
|
||||
|
||||
## Manifest changes
|
||||
|
||||
When you add/modify a deployment YAML:
|
||||
|
||||
Reference in New Issue
Block a user