21 KiB
21 KiB
document_type, service, title, date, version, status, owner, created_by, tags, ai_query_hints
| document_type | service | title | date | version | status | owner | created_by | tags | ai_query_hints | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| architecture_design | MOMENTRY_CORE | Playground 開發架構隔離規劃 | 2026-03-31 | V1.0 | active | Warren | OpenCode |
|
|
Playground 開發架構隔離規劃
| 項目 | 內容 |
|---|---|
| 建立者 | Warren |
| 建立時間 | 2026-03-31 |
| 文件版本 | V1.0 |
版本歷史
| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
|---|---|---|---|---|
| V1.0 | 2026-03-31 | 創建 Playground 隔離架構規劃 | Warren | OpenCode |
概述
本文檔說明 Momentry Core Playground(開發環境)的隔離架構規劃,確保開發測試環境與正式生產環境的數據能夠完整隔離,避免測試數據污染生產數據。
Playground 是 momentry 專案的開發專用二進制文件(binary),設計用於本地開發和功能測試,與生產環境(Production)使用不同的配置和資源池。
當前狀態
| 項目 | 狀態 |
|---|---|
| Redis 隔離 | ✅ 已隔離 |
| File System 隔離 | ✅ 已隔離 |
| PostgreSQL Schema 隔離 | 🔄 待實現 |
| MongoDB Database 隔離 | 🔄 待實現 |
| Qdrant Collection 隔離 | 🔄 待實現 |
隔離架構總覽
當前架構(部分隔離)
┌─────────────────────────────────────────────────────────────────┐
│ Playground (Development) 現況 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Playground │ │ Production │ │
│ │ Server │ │ Server │ │
│ │ Port:3003 │ │ Port:3002 │ │
│ │ │ │ │ │
│ │ Redis: │ │ Redis: │ │
│ │ momentry_dev│ │ momentry: │◀── 隔離 ✅ │
│ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │
│ │ ┌───────────────┴───────────────┐ │
│ │ │ 共享資源 │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ PostgreSQL │ │ MongoDB │ │ Qdrant │ │
│ │ momentry │ │ momentry │ │ momentry_rule1 │ │
│ │ (同一DB) │ │ (同一DB) │ │ (同一collection) │ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
│ │ │ │ │
│ └────────────────────┴────────────────────┘ │
│ │ ❌ 未隔離 │
│ ▼ │
│ 數據混合污染風險 │
└─────────────────────────────────────────────────────────────────┘
規劃中的隔離架構
┌─────────────────────────────────────────────────────────────────────────────┐
│ Playground 完整隔離架構 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────┐ ┌─────────────────────────────────┐ │
│ │ Development (Playground) │ │ Production │ │
│ │ Port: 3003 │ │ Port: 3002 │ │
│ │ Binary: debug │ │ Binary: release │ │
│ │ Worker: disabled │ │ Worker: enabled │ │
│ └──────────────┬──────────────┘ └──────────────┬────────────────┘ │
│ │ │ │
│ │ ┌──────────────────────────────────┴──────────────┐ │
│ │ │ 共享基礎設施 │ │
│ │ └──────────────────────────────────┬──────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌────────────────────┐ ┌───────────────────────────────┐ │
│ │ PostgreSQL Schema │ │ PostgreSQL Schema │ │
│ │ (dev schema) │ │ (public schema) │ │
│ ├────────────────────┤ ├───────────────────────────────┤ │
│ │ videos_dev │ │ videos │ │
│ │ chunks_dev │ │ chunks │ │
│ │ pre_chunks_dev │ │ pre_chunks │ │
│ │ frames_dev │ │ frames │ │
│ │ processor_results │ (隔離 ✅) │ processor_results │ │
│ │ file_registry_dev │ │ file_registry │ │
│ │ face_*_dev │ │ face_* │ │
│ ├────────────────────┤ ├───────────────────────────────┤ │
│ │ 可共享: │ │ 可共享: │ │
│ │ api_keys (獨立的) │ │ api_keys │ │
│ │ monitor_* │ │ monitor_* │ │
│ │ backup_* │ │ backup_* │ │
│ └────────────────────┘ └───────────────────────────────┘ │
│ │
│ ┌────────────────────┐ ┌───────────────────────────────┐ │
│ │ MongoDB │ │ MongoDB │ │
│ │ Database: │ │ Database: │ │
│ │ momentry_dev │ (隔離 ✅) │ momentry │ │
│ ├────────────────────┤ ├───────────────────────────────┤ │
│ │ - chunks │ │ - chunks │ │
│ │ - cache │ │ - cache │ │
│ └────────────────────┘ └───────────────────────────────┘ │
│ │
│ ┌────────────────────┐ ┌───────────────────────────────┐ │
│ │ Qdrant │ │ Qdrant │ │
│ │ Collection: │ │ Collection: │ │
│ │ momentry_dev_ │ (隔離 ✅) │ momentry_rule1 │ │
│ │ rule1 │ │ │ │
│ └────────────────────┘ └───────────────────────────────┘ │
│ │
│ ┌────────────────────┐ ┌───────────────────────────────┐ │
│ │ Redis │ │ Redis │ │
│ │ Prefix: │ (已有 ✅) │ Prefix: │ │
│ │ momentry_dev: │ │ momentry: │ │
│ └────────────────────┘ └───────────────────────────────┘ │
│ │
│ ┌────────────────────┐ ┌───────────────────────────────┐ │
│ │ File System │ (已有 ✅) │ File System │ │
│ │ /output_dev │ │ /output │ │
│ │ /backup_dev │ │ /backup/momentry │ │
│ └────────────────────┘ └───────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
隔離矩陣
| 資源 | Production | Development | 隔離狀態 | 隔離方式 |
|---|---|---|---|---|
| API Server | Port 3002 | Port 3003 | ✅ | 環境變數配置 |
| Redis Prefix | momentry: |
momentry_dev: |
✅ | 環境變數配置 |
| File Output | /Users/accusys/momentry/output |
/Users/accusys/momentry/output_dev |
✅ | 環境變數配置 |
| File Backup | /Users/accusys/momentry/backup/momentry |
/Users/accusys/momentry/backup/momentry_dev |
✅ | 環境變數配置 |
| PostgreSQL | public schema |
dev schema |
❌ | Schema 隔離 |
| MongoDB | momentry database |
momentry_dev database |
❌ | Database 隔離 |
| Qdrant | momentry_rule1 collection |
momentry_dev_rule1 collection |
❌ | Collection 隔離 |
需要隔離的數據表
PostgreSQL(使用 Schema 隔離)
需要隔離的表(放入 dev schema)
| 表名 | 說明 |
|---|---|
videos |
視頻記錄 |
chunks |
區塊數據 |
pre_chunks |
預處理區塊 |
chunk_vectors |
向量數據 |
frames |
幀數據 |
processor_results |
處理器結果 |
file_registry |
文件註冊 |
file_lifecycle |
文件生命周期 |
face_clusters |
人臉聚類 |
face_detections |
人臉檢測 |
face_identities |
人臉身份 |
face_recognition_results |
人臉識別結果 |
可共享的表(留在 public schema)
| 表名 | 說明 |
|---|---|
api_keys |
API 金鑰(使用獨立的 Development API Key) |
api_key_audit_log |
API 金鑰審計日誌 |
api_key_anomalies |
API 金鑰異常 |
monitor_* |
所有監控相關表 |
backup_* |
備份記錄表 |
gitea_tokens |
Gitea API Token |
n8n_api_keys |
n8n API 金鑰 |
node_* |
節點相關表 |
python_* |
Python 版本基線 |
storage_* |
存儲統計表 |
v_idle_workflows |
空閒工作流視圖 |
v_recent_anomalies |
最近異常視圖 |
v_service_health |
服務健康視圖 |
v_storage_overview |
存儲概覽視圖 |
配置對比
環境變數對比
| 變數 | Production (.env) | Development (.env.development) |
|---|---|---|
MOMENTRY_SERVER_PORT |
3002 | 3003 |
MOMENTRY_REDIS_PREFIX |
momentry: |
momentry_dev: |
MOMENTRY_OUTPUT_DIR |
/Users/accusys/momentry/output |
/Users/accusys/momentry/output_dev |
MOMENTRY_BACKUP_DIR |
/Users/accusys/momentry/backup/momentry |
/Users/accusys/momentry/backup/momentry_dev |
DATABASE_URL |
postgres://accusys@localhost:5432/momentr |
postgres://accusys@localhost:5432/momentry |
MONGODB_URL |
mongodb://localhost:27017 |
mongodb://localhost:27017 |
QDRANT_URL |
http://localhost:6333 |
http://localhost:6333 |
QDRANT_COLLECTION |
momentry_rule1 |
momentry_dev_rule1 |
RUST_LOG |
info | debug |
MOMENTRY_WORKER_ENABLED |
true | false |
二進制對比
| 屬性 | Production | Playground |
|---|---|---|
| Binary Name | momentry |
momentry_playground |
| Build Mode | release | debug |
| Port | 3002 | 3003 |
| Config File | .env |
.env.development |
實施步驟
Step 1: 修改配置檔案
更新 .env.development
在現有配置中添加數據庫隔離相關變數:
# Database Schema (PostgreSQL)
DATABASE_SCHEMA=dev
# MongoDB Database
MONGODB_DATABASE=momentry_dev
# Qdrant Collection
QDRANT_COLLECTION=momentry_dev_rule1
Step 2: 修改代碼支持 Schema 切換
2.1 更新 src/core/config.rs
添加新的配置項:
pub static DEV_SCHEMA: Lazy<String> = Lazy::new(|| {
env::var("DATABASE_SCHEMA").unwrap_or_else(|_| "dev".to_string())
});
pub static DEV_DATABASE: Lazy<String> = Lazy::new(|| {
env::var("MONGODB_DATABASE").unwrap_or_else(|_| "momentry_dev".to_string())
});
pub static DEV_QDRANT_COLLECTION: Lazy<String> = Lazy::new(|| {
env::var("QDRANT_COLLECTION").unwrap_or_else(|_| "momentry_dev_rule1".to_string())
});
2.2 更新 src/core/db/postgres_db.rs
在查詢方法中添加 schema 參數支持:
// 在連接配置中使用 schema
let schema = DEV_SCHEMA.as_str();
let query = format!("SET search_path TO {}", schema);
sqlx::query(&query).execute(&pool).await?;
2.3 更新 src/core/db/mongodb.rs
支持數據庫切換:
let database_name = DEV_DATABASE.as_str();
let database = client.database(database_name);
2.4 更新 src/core/db/qdrant_db.rs
支持 collection 切換:
let collection_name = DEV_QDRANT_COLLECTION.as_str();
Step 3: 創建開發環境數據庫
3.1 PostgreSQL - 創建 Schema
# 連接 PostgreSQL
psql -U accusys -d momentry
# 創建 dev schema
CREATE SCHEMA IF NOT EXISTS dev;
# 將現有表的結構復製到 dev schema
CREATE TABLE dev.videos AS SELECT * FROM public.videos WHERE 1=0;
CREATE TABLE dev.chunks AS SELECT * FROM public.chunks WHERE 1=0;
-- ... 其他表
3.2 MongoDB - 創建 Database
# 複製數據到開發數據庫
use admin
db.copyDatabase('momentry', 'momentry_dev')
3.3 Qdrant - 創建 Collection
# 使用 Qdrant API 創建新的 collection
curl -X PUT 'http://localhost:6333/collections/momentry_dev_rule1' \
-H 'api-key: Test3200Test3200Test3200' \
-H 'Content-Type: application/json' \
-d '{
"vectors": {
"size": 1024,
"distance": "Cosine"
}
}'
Step 4: 驗證隔離效果
4.1 啟動服務驗證
# Terminal 1: 啟動 Production Server
cargo run --bin momentry -- server --port 3002
# Terminal 2: 啟動 Playground Server
cargo run --bin momentry_playground -- server --port 3003
4.2 數據隔離驗證
# 驗證 Redis 隔離
redis-cli KEYS "momentry:job:*"
redis-cli KEYS "momentry_dev:job:*"
# 驗證 PostgreSQL Schema
psql -U accusys -d momentry -c "\dt dev.*"
psql -U accusys -d momentry -c "\dt public.*"
# 驗證 MongoDB
mongosh --eval "db.adminCommand('listDatabases')" | grep momentry
# 驗證 Qdrant
curl -s -H "api-key: Test3200Test3200Test3200" \
'http://localhost:6333/collections' | jq '.result[].name'
檔案位置
| 類型 | 路徑 | 說明 |
|---|---|---|
| Production Config | /Users/accusys/momentry_core_0.1/.env |
生產環境配置 |
| Development Config | /Users/accusys/momentry_core_0.1/.env.development |
開發環境配置 |
| Binary | /Users/accusys/momentry_core_0.1/src/playground.rs |
Playground 二進制源碼 |
| Config Module | /Users/accusys/momentry_core_0.1/src/core/config.rs |
配置模組 |
| PostgreSQL Module | /Users/accusys/momentry_core_0.1/src/core/db/postgres_db.rs |
PostgreSQL 模組 |
| MongoDB Module | /Users/accusys/momentry_core_0.1/src/core/db/mongodb.rs |
MongoDB 模組 |
| Qdrant Module | /Users/accusys/momentry_core_0.1/src/core/db/qdrant_db.rs |
Qdrant 模組 |
常用指令
啟動服務
# 啟動 Production Server
cargo run --bin momentry -- server
# 啟動 Playground Server
cargo run --bin momentry_playground -- server
# 指定 Port
cargo run --bin momentry_playground -- server --port 3003
# 啟動 Worker (Production)
cargo run --bin momentry -- worker --max-concurrent 2
驗證隔離
# 驗證 Redis 隔離
redis-cli KEYS "momentry:*"
redis-cli KEYS "momentry_dev:*"
# 驗證 PostgreSQL Schema
psql -U accusys -d momentry -c "\dt dev.*"
psql -U accusys -d momentry -c "\dt public.*"
# 驗證文件系統隔離
ls -la /Users/accusys/momentry/output/
ls -la /Users/accusys/momentry/output_dev/
數據庫操作
# 連接 PostgreSQL
psql -U accusys -d momentry
# 切換 Schema
SET search_path TO dev;
# 列出 Schema 表
\dt
# MongoDB 數據庫列表
mongosh --eval "db.adminCommand('listDatabases')"
# 切換 MongoDB 數據庫
use momentry_dev
db.chunks.countDocuments()
版本資訊
- 版本: V1.0
- 建立日期: 2026-03-31
- 文件更新: 2026-03-31
相關文件
| 文件 | 說明 |
|---|---|
PLAYGROUND_BINARY_IMPLEMENTATION.md |
Playground 二進制實現計劃 |
SERVICES.md |
服務端口分配 |
MOMENTRY_CORE_REDIS_KEYS.md |
Redis Key 設計規範 |
AGENTS.md |
AI 代理執行指令 |
DOCS_STANDARD.md |
文件創建規範 |
附錄:AI Agent 友好資訊
可用 Tools
| Tool | 用途 |
|---|---|
postgres_query |
執行 PostgreSQL 查詢 |
mongodb_* |
MongoDB 操作 |
redis_* |
Redis 操作 |
qdrant_qdrant-* |
Qdrant 向量數據庫操作 |
數據庫 Schema
PostgreSQL Tables (dev schema)
videos, chunks, pre_chunks, chunk_vectors, frames,
processor_results, file_registry, file_lifecycle,
face_clusters, face_detections, face_identities,
face_recognition_results
MongoDB Collections
momentry_dev: chunks, cache
Qdrant Collections
momentry_dev_rule1
環境變數
MOMENTRY_SERVER_PORT, MOMENTRY_REDIS_PREFIX,
DATABASE_SCHEMA, MONGODB_DATABASE, QDRANT_COLLECTION,
MOMENTRY_OUTPUT_DIR, MOMENTRY_BACKUP_DIR