feat: add configurable S3 object storage
This commit is contained in:
@@ -341,7 +341,14 @@ CREATE TABLE tasks (
|
||||
completed_at TIMESTAMPTZ,
|
||||
|
||||
-- 到期清理:匿名可默认 24h;登录用户应由应用按套餐写入更长 retention
|
||||
expires_at TIMESTAMPTZ NOT NULL DEFAULT (NOW() + INTERVAL '24 hours')
|
||||
expires_at TIMESTAMPTZ NOT NULL DEFAULT (NOW() + INTERVAL '24 hours'),
|
||||
retention_hours INTEGER NOT NULL DEFAULT 24,
|
||||
|
||||
zip_storage_backend VARCHAR(16),
|
||||
zip_storage_endpoint_id UUID REFERENCES storage_endpoints(id) ON DELETE RESTRICT,
|
||||
zip_storage_key TEXT,
|
||||
zip_storage_etag TEXT,
|
||||
zip_size BIGINT
|
||||
);
|
||||
|
||||
CREATE INDEX idx_tasks_user_id ON tasks(user_id);
|
||||
@@ -365,7 +372,12 @@ CREATE TABLE task_files (
|
||||
compressed_size BIGINT,
|
||||
saved_percent DECIMAL(6, 2),
|
||||
|
||||
storage_path VARCHAR(500), -- S3 key 或本地路径
|
||||
storage_path VARCHAR(500), -- 兼容旧版本本地成品路径
|
||||
input_path TEXT, -- 批任务原图临时路径,处理后清空
|
||||
storage_backend VARCHAR(16) NOT NULL DEFAULT 'local',
|
||||
storage_endpoint_id UUID REFERENCES storage_endpoints(id) ON DELETE RESTRICT,
|
||||
storage_key TEXT,
|
||||
storage_etag TEXT,
|
||||
status file_status NOT NULL DEFAULT 'pending',
|
||||
error_message TEXT,
|
||||
|
||||
@@ -377,6 +389,12 @@ CREATE INDEX idx_task_files_task_id ON task_files(task_id);
|
||||
CREATE INDEX idx_task_files_status ON task_files(status);
|
||||
```
|
||||
|
||||
### 4.9.1 storage_endpoints - S3 端点
|
||||
|
||||
端点凭据使用 `API_KEY_PEPPER` 派生密钥并通过 AES-256-GCM 加密。每个对象保存自己的 `storage_endpoint_id`,因此切换活动端点不会影响历史对象。活动端点和仍有关联对象的端点不能删除;管理端删除采用软归档,待无引用 30 天后由 Worker 清理配置。
|
||||
|
||||
同一时间只允许一个 `is_active = true` 的端点接收新对象。没有配置活动端点时系统使用 `STORAGE_PATH` 本地回退。
|
||||
|
||||
### 4.10 idempotency_keys - 幂等记录
|
||||
```sql
|
||||
CREATE TABLE idempotency_keys (
|
||||
|
||||
Reference in New Issue
Block a user