fix: 添加 m4promini 部署路径修复方案
问题: - 100+ 处硬编码路径 /Users/accusys - 配置文件 (admin_config.json) 无法适应新环境 - Rust 代码 (main.rs) 中 10+ 处路径硬编码 - 服务启动/停止命令依赖固定路径 影响: - 无法在 m4promini (/Users/nextorageai) 上部署 - Admin 页面服务控制失效 - Worker 管理失败 解决方案: 1. 文档: docs/DEPLOYMENT_PATH_ISSUES.md - 详细分析所有硬编码路径 - 提供 3 种修复方案 - 环境变量优先级建议 2. 脚本: fix_paths_for_m4promini.sh - 自动替换所有硬编码路径 - 创建备份 - 生成环境变量模板 - 创建部署说明 目标环境: - 用户: nextorageai - 主目录: /Users/nextorageai - 项目目录: /Users/nextorageai/momentry_studio 下一步: 1. 在 m4promini 上运行 fix_paths_for_m4promini.sh 2. 配置环境变量 (.env) 3. 构建项目 4. 启动服务
This commit is contained in:
371
docs/DEPLOYMENT_PATH_ISSUES.md
Normal file
371
docs/DEPLOYMENT_PATH_ISSUES.md
Normal file
@@ -0,0 +1,371 @@
|
|||||||
|
# Momentry Studio 硬编码路径问题分析与修复方案
|
||||||
|
|
||||||
|
**生成时间**: 2026-10-12
|
||||||
|
**目标环境**: m4promini
|
||||||
|
**目标用户**: nextorageai
|
||||||
|
**目标主目录**: /Users/nextorageai
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚨 问题分析
|
||||||
|
|
||||||
|
### 1. 硬编码路径汇总
|
||||||
|
|
||||||
|
| 类别 | 文件 | 硬编码路径 | 影响 |
|
||||||
|
|------|------|-----------|------|
|
||||||
|
| **配置文件** | `config/admin_config.json` | 多个路径 | ❌ 严重 |
|
||||||
|
| **Rust 代码** | `src-tauri/src/main.rs` | 10+ 处 | ❌ 严重 |
|
||||||
|
| **文档** | 多个 .md 文件 | 100+ 处 | ⚠️ 中等 |
|
||||||
|
| **脚本** | `start-proxy.sh` | 1 处 | ⚠️ 中等 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. 关键硬编码路径列表
|
||||||
|
|
||||||
|
#### 2.1 配置文件 (config/admin_config.json)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"paths": {
|
||||||
|
"output_dir": "/Users/accusys/momentry/output", // ❌
|
||||||
|
"backup_dir": "/Users/accusys/momentry/backup", // ❌
|
||||||
|
"scripts_dir": "/Users/accusys/momentry_core/scripts", // ❌
|
||||||
|
"python_path": "/opt/homebrew/bin/python3.11", // ✅ (可能不同)
|
||||||
|
"ffmpeg_path": "/opt/homebrew/bin/ffmpeg" // ✅ (可能不同)
|
||||||
|
},
|
||||||
|
"server": {
|
||||||
|
"storage_root": "/Users/accusys/momentry/var/sftpgo/data" // ❌
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### 2.2 Rust 代码 (src-tauri/src/main.rs)
|
||||||
|
|
||||||
|
**Worker 管理**:
|
||||||
|
```rust
|
||||||
|
// Line 1335: Stop worker
|
||||||
|
.arg("sleep 0.5; WPID=$(cat /Users/accusys/momentry_core/logs/worker_3002.pid ...")
|
||||||
|
|
||||||
|
// Line 1365: Start worker
|
||||||
|
.arg("cd /Users/accusys/momentry_core && nohup bash run-worker-3002.sh ...")
|
||||||
|
|
||||||
|
// Line 1375: Check worker status
|
||||||
|
.arg("WPID=$(cat /Users/accusys/momentry_core/logs/worker_3002.pid ...")
|
||||||
|
```
|
||||||
|
|
||||||
|
**服务启动**:
|
||||||
|
```rust
|
||||||
|
// Line 1385: MarkBase
|
||||||
|
"mkdir -p /Users/accusys/markbase/data && cd /Users/accusys/markbase ..."
|
||||||
|
|
||||||
|
// Line 1388: Core API
|
||||||
|
"cd /Users/accusys/momentry_core && nohup bash run-server-3002.sh ..."
|
||||||
|
|
||||||
|
// Line 1391: Studio Proxy
|
||||||
|
"cd /Users/accusys/momentry_studio/src-tauri && nohup ./target/debug/momentry-proxy ..."
|
||||||
|
|
||||||
|
// Line 1394: MarkBase Engine
|
||||||
|
"cd /Users/accusys/MarkBaseEngine && nohup .build/debug/MarkBaseServer ..."
|
||||||
|
|
||||||
|
// Line 1397: MarkBase SSH
|
||||||
|
"cd /Users/accusys/markbase && nohup cargo run --bin markbase-core ..."
|
||||||
|
|
||||||
|
// Line 1400: MarkBase SMB
|
||||||
|
"cd /Users/accusys/markbase && nohup cargo run ... --root /Users/accusys/momentry/var/sftpgo/data ..."
|
||||||
|
```
|
||||||
|
|
||||||
|
**Fallback Home**:
|
||||||
|
```rust
|
||||||
|
// Line 1479, 1504, 1516: Home directory fallback
|
||||||
|
let home = dirs::home_dir().unwrap_or_else(|| std::path::PathBuf::from("/Users/accusys"));
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. 问题严重性评估
|
||||||
|
|
||||||
|
#### 🔴 严重问题 (必须修复)
|
||||||
|
|
||||||
|
1. **配置文件硬编码** - `config/admin_config.json`
|
||||||
|
- 影响: Core API 无法找到输出目录、脚本目录
|
||||||
|
- 优先级: P0
|
||||||
|
|
||||||
|
2. **Rust 代码硬编码** - `main.rs`
|
||||||
|
- 影响: Worker 管理、服务启动/停止失败
|
||||||
|
- 优先级: P0
|
||||||
|
|
||||||
|
3. **服务管理命令** - 路径硬编码
|
||||||
|
- 影响: Admin 页面服务控制失效
|
||||||
|
- 优先级: P0
|
||||||
|
|
||||||
|
#### 🟡 中等问题 (建议修复)
|
||||||
|
|
||||||
|
4. **文档中的路径** - 示例代码
|
||||||
|
- 影响: 文档可读性、示例执行
|
||||||
|
- 优先级: P1
|
||||||
|
|
||||||
|
5. **脚本路径** - `start-proxy.sh`
|
||||||
|
- 影响: 启动脚本执行
|
||||||
|
- 优先级: P1
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ 修复方案
|
||||||
|
|
||||||
|
### 方案 1: 环境变量 + 动态路径 (推荐)
|
||||||
|
|
||||||
|
#### 优点
|
||||||
|
- ✅ 完全动态,无需修改代码
|
||||||
|
- ✅ 支持多环境部署
|
||||||
|
- ✅ 配置集中管理
|
||||||
|
|
||||||
|
#### 实施步骤
|
||||||
|
|
||||||
|
**步骤 1: 修改 admin_config.json**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"paths": {
|
||||||
|
"output_dir": "${MOMENTRY_ROOT}/output",
|
||||||
|
"backup_dir": "${MOMENTRY_ROOT}/backup",
|
||||||
|
"scripts_dir": "${MOMENTRY_CORE_ROOT}/scripts",
|
||||||
|
"python_path": "${PYTHON_PATH}",
|
||||||
|
"ffmpeg_path": "${FFMPEG_PATH}"
|
||||||
|
},
|
||||||
|
"server": {
|
||||||
|
"storage_root": "${STORAGE_ROOT}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**步骤 2: 创建环境变量文件**
|
||||||
|
|
||||||
|
`.env.m4promini`:
|
||||||
|
```env
|
||||||
|
# Momentry Roots
|
||||||
|
MOMENTRY_ROOT=/Users/nextorageai/momentry
|
||||||
|
MOMENTRY_CORE_ROOT=/Users/nextorageai/momentry_core
|
||||||
|
MARKBASE_ROOT=/Users/nextorageai/markbase
|
||||||
|
|
||||||
|
# Storage
|
||||||
|
STORAGE_ROOT=/Users/nextorageai/momentry/var/sftpgo/data
|
||||||
|
OUTPUT_DIR=/Users/nextorageai/momentry/output
|
||||||
|
BACKUP_DIR=/Users/nextorageai/momentry/backup
|
||||||
|
|
||||||
|
# Binaries
|
||||||
|
PYTHON_PATH=/opt/homebrew/bin/python3.11
|
||||||
|
FFMPEG_PATH=/opt/homebrew/bin/ffmpeg
|
||||||
|
|
||||||
|
# Studio
|
||||||
|
MOMENTRY_STUDIO_ROOT=/Users/nextorageai/momentry_studio
|
||||||
|
MOMENTRY_DATA_DIR=/Users/nextorageai/momentry_studio/data/users
|
||||||
|
```
|
||||||
|
|
||||||
|
**步骤 3: 修改 Rust 代码**
|
||||||
|
|
||||||
|
```rust
|
||||||
|
// 替换硬编码路径为环境变量
|
||||||
|
use std::env;
|
||||||
|
|
||||||
|
fn get_momentry_core_root() -> String {
|
||||||
|
env::var("MOMENTRY_CORE_ROOT")
|
||||||
|
.unwrap_or_else(|_| {
|
||||||
|
dirs::home_dir()
|
||||||
|
.map(|h| format!("{}/momentry_core", h.display()))
|
||||||
|
.unwrap_or_else(|| "/Users/accusys/momentry_core".to_string())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用示例
|
||||||
|
.arg(format!("cd {} && nohup bash run-worker-3002.sh ...", get_momentry_core_root()))
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 方案 2: 配置文件 + 相对路径 (次选)
|
||||||
|
|
||||||
|
#### 优点
|
||||||
|
- ✅ 简单易实施
|
||||||
|
- ✅ 减少环境变量依赖
|
||||||
|
|
||||||
|
#### 实施步骤
|
||||||
|
|
||||||
|
**步骤 1: 创建 deployment.conf**
|
||||||
|
|
||||||
|
```conf
|
||||||
|
[m4promini]
|
||||||
|
MOMENTRY_ROOT=/Users/nextorageai/momentry
|
||||||
|
MOMENTRY_CORE_ROOT=/Users/nextorageai/momentry_core
|
||||||
|
MARKBASE_ROOT=/Users/nextorageai/markbase
|
||||||
|
STUDIO_ROOT=/Users/nextorageai/momentry_studio
|
||||||
|
STORAGE_ROOT=/Users/nextorageai/momentry/var/sftpgo/data
|
||||||
|
```
|
||||||
|
|
||||||
|
**步骤 2: 启动时加载配置**
|
||||||
|
|
||||||
|
```rust
|
||||||
|
use std::fs;
|
||||||
|
|
||||||
|
fn load_deployment_config() -> HashMap<String, String> {
|
||||||
|
let config_path = std::env::current_exe()
|
||||||
|
.unwrap()
|
||||||
|
.parent()
|
||||||
|
.unwrap()
|
||||||
|
.join("deployment.conf");
|
||||||
|
|
||||||
|
// Parse conf file...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 方案 3: 安装脚本替换 (临时方案)
|
||||||
|
|
||||||
|
#### 优点
|
||||||
|
- ✅ 无需修改代码
|
||||||
|
- ✅ 快速部署
|
||||||
|
|
||||||
|
#### 实施步骤
|
||||||
|
|
||||||
|
**创建 install_m4promini.sh**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Momentry Studio - m4promini Installation Script
|
||||||
|
|
||||||
|
TARGET_USER="nextorageai"
|
||||||
|
TARGET_HOME="/Users/nextorageai"
|
||||||
|
STUDIO_ROOT="${TARGET_HOME}/momentry_studio"
|
||||||
|
|
||||||
|
echo "=== Installing Momentry Studio for m4promini ==="
|
||||||
|
|
||||||
|
# 1. Clone repository
|
||||||
|
cd ${TARGET_HOME}
|
||||||
|
git clone <repo_url> momentry_studio
|
||||||
|
cd momentry_studio
|
||||||
|
|
||||||
|
# 2. Update config file
|
||||||
|
sed -i.bak \
|
||||||
|
-e "s|/Users/accusys/momentry|${TARGET_HOME}/momentry|g" \
|
||||||
|
-e "s|/Users/accusys/momentry_core|${TARGET_HOME}/momentry_core|g" \
|
||||||
|
-e "s|/Users/accusys/markbase|${TARGET_HOME}/markbase|g" \
|
||||||
|
config/admin_config.json
|
||||||
|
|
||||||
|
# 3. Update Rust code
|
||||||
|
sed -i.bak \
|
||||||
|
-e "s|/Users/accusys/momentry_core|${TARGET_HOME}/momentry_core|g" \
|
||||||
|
-e "s|/Users/accusys/momentry_studio|${TARGET_HOME}/momentry_studio|g" \
|
||||||
|
-e "s|/Users/accusys/markbase|${TARGET_HOME}/markbase|g" \
|
||||||
|
-e "s|/Users/accusys|${TARGET_HOME}|g" \
|
||||||
|
src-tauri/src/main.rs
|
||||||
|
|
||||||
|
# 4. Build
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
cd src-tauri
|
||||||
|
cargo build --release
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
echo "✅ Installation complete"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 修复清单
|
||||||
|
|
||||||
|
### 必须修复 (P0)
|
||||||
|
|
||||||
|
- [ ] **config/admin_config.json** - 替换为环境变量或相对路径
|
||||||
|
- [ ] **main.rs** - Worker 管理命令 (3 处)
|
||||||
|
- [ ] **main.rs** - 服务启动命令 (6 处)
|
||||||
|
- [ ] **main.rs** - Home 目录 fallback (3 处)
|
||||||
|
- [ ] **start-proxy.sh** - 工作目录路径
|
||||||
|
|
||||||
|
### 建议修复 (P1)
|
||||||
|
|
||||||
|
- [ ] **README.md** - 文档中的示例路径
|
||||||
|
- [ ] **RELEASE_v0.1.0_INSTALLATION_GUIDE.md** - 安装路径示例
|
||||||
|
- [ ] **AGENTS.md** - 文档中的路径引用
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 推荐实施方案
|
||||||
|
|
||||||
|
**推荐**: 方案 1 (环境变量 + 动态路径)
|
||||||
|
|
||||||
|
**理由**:
|
||||||
|
1. 最灵活,支持多环境部署
|
||||||
|
2. 符合 12-factor app 原则
|
||||||
|
3. 便于 CI/CD 集成
|
||||||
|
4. 无需修改代码即可适应不同环境
|
||||||
|
|
||||||
|
**实施步骤**:
|
||||||
|
|
||||||
|
1. **创建环境变量模板** (`.env.template`)
|
||||||
|
2. **修改 config/admin_config.json** (支持变量替换)
|
||||||
|
3. **修改 main.rs** (使用环境变量)
|
||||||
|
4. **创建部署脚本** (自动配置环境)
|
||||||
|
5. **更新文档** (说明环境变量配置)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 环境变量清单
|
||||||
|
|
||||||
|
### 必需环境变量
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 根目录
|
||||||
|
export MOMENTRY_ROOT=/Users/nextorageai/momentry
|
||||||
|
export MOMENTRY_CORE_ROOT=/Users/nextorageai/momentry_core
|
||||||
|
export MARKBASE_ROOT=/Users/nextorageai/markbase
|
||||||
|
export MOMENTRY_STUDIO_ROOT=/Users/nextorageai/momentry_studio
|
||||||
|
|
||||||
|
# 存储
|
||||||
|
export STORAGE_ROOT=/Users/nextorageai/momentry/var/sftpgo/data
|
||||||
|
export OUTPUT_DIR=/Users/nextorageai/momentry/output
|
||||||
|
export BACKUP_DIR=/Users/nextorageai/momentry/backup
|
||||||
|
|
||||||
|
# 数据库
|
||||||
|
export MOMENTRY_DATA_DIR=/Users/nextorageai/momentry_studio/data/users
|
||||||
|
|
||||||
|
# 可选
|
||||||
|
export PYTHON_PATH=/opt/homebrew/bin/python3.11
|
||||||
|
export FFMPEG_PATH=/opt/homebrew/bin/ffmpeg
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚠️ 注意事项
|
||||||
|
|
||||||
|
1. **环境变量优先级**
|
||||||
|
- 环境变量 > 配置文件 > 默认值
|
||||||
|
- 使用 `unwrap_or_else()` 提供合理 fallback
|
||||||
|
|
||||||
|
2. **路径验证**
|
||||||
|
- 启动时检查关键路径是否存在
|
||||||
|
- 提供清晰的错误提示
|
||||||
|
|
||||||
|
3. **向后兼容**
|
||||||
|
- 保留 `/Users/accusys` 作为 fallback
|
||||||
|
- 但优先使用环境变量
|
||||||
|
|
||||||
|
4. **文档更新**
|
||||||
|
- 更新所有示例路径
|
||||||
|
- 添加环境变量配置说明
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔗 相关文档
|
||||||
|
|
||||||
|
- `/Users/accusys/momentry_studio/RELEASE_v0.1.0_INSTALLATION_GUIDE.md`
|
||||||
|
- `/Users/accusys/momentry_studio/build_release.sh`
|
||||||
|
- `/Users/accusys/momentry_studio/AGENTS.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**修复优先级**: P0 (紧急)
|
||||||
|
**预计工作量**: 2-3 小时
|
||||||
|
**影响范围**: 配置文件、Rust 代码、部署流程
|
||||||
413
fix_paths_for_m4promini.sh
Executable file
413
fix_paths_for_m4promini.sh
Executable file
@@ -0,0 +1,413 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Momentry Studio - m4promini 部署路径修复脚本
|
||||||
|
# 用途: 将所有硬编码的 /Users/accusys 路径替换为部署环境路径
|
||||||
|
# 使用: ./fix_paths_for_m4promini.sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# 目标环境配置
|
||||||
|
TARGET_USER="nextorageai"
|
||||||
|
TARGET_HOME="/Users/nextorageai"
|
||||||
|
|
||||||
|
# 颜色输出
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
log_info() {
|
||||||
|
echo -e "${GREEN}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_warn() {
|
||||||
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_error() {
|
||||||
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "================================================================================"
|
||||||
|
echo " Momentry Studio - m4promini Path Fixer"
|
||||||
|
echo "================================================================================"
|
||||||
|
echo ""
|
||||||
|
echo "Target User: ${TARGET_USER}"
|
||||||
|
echo "Target Home: ${TARGET_HOME}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 检查是否在项目根目录
|
||||||
|
if [ ! -f "package.json" ]; then
|
||||||
|
log_error "请在项目根目录运行此脚本"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 备份
|
||||||
|
log_info "创建备份目录..."
|
||||||
|
BACKUP_DIR="backups/path_fix_$(date +%Y%m%d_%H%M%S)"
|
||||||
|
mkdir -p ${BACKUP_DIR}
|
||||||
|
log_info "备份目录: ${BACKUP_DIR}"
|
||||||
|
|
||||||
|
# 备份关键文件
|
||||||
|
log_info "备份关键文件..."
|
||||||
|
cp config/admin_config.json ${BACKUP_DIR}/admin_config.json.bak
|
||||||
|
cp src-tauri/src/main.rs ${BACKUP_DIR}/main.rs.bak
|
||||||
|
cp start-proxy.sh ${BACKUP_DIR}/start-proxy.sh.bak 2>/dev/null || true
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 1. 修复 config/admin_config.json
|
||||||
|
log_info "修复 config/admin_config.json..."
|
||||||
|
|
||||||
|
# 创建新的配置
|
||||||
|
cat > config/admin_config.json << 'JSONEOF'
|
||||||
|
{
|
||||||
|
"vlm_prompts": {
|
||||||
|
"scene": {
|
||||||
|
"system_prompt": "Analyze this video frame and provide a detailed description.",
|
||||||
|
"user_prompt_template": "Describe the scene in detail, including environment, objects, and activities.",
|
||||||
|
"max_tokens": 500,
|
||||||
|
"temperature": 0.7,
|
||||||
|
"output_language": "en"
|
||||||
|
},
|
||||||
|
"trace": {
|
||||||
|
"system_prompt": "Describe the person's appearance and clothing in this frame.",
|
||||||
|
"user_prompt_template": "Describe the person, focusing on clothing, accessories, and notable features.",
|
||||||
|
"max_tokens": 300,
|
||||||
|
"temperature": 0.6,
|
||||||
|
"output_language": "en"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"llm_config": {
|
||||||
|
"model": "gpt-4o",
|
||||||
|
"max_tokens": 2000,
|
||||||
|
"temperature": 0.7,
|
||||||
|
"api_base": "http://localhost:8080/v1"
|
||||||
|
},
|
||||||
|
"processor_config": {
|
||||||
|
"asr": {
|
||||||
|
"enabled": true,
|
||||||
|
"language": "auto",
|
||||||
|
"model": "large-v3"
|
||||||
|
},
|
||||||
|
"ocr": {
|
||||||
|
"enabled": true,
|
||||||
|
"languages": ["en", "zh"],
|
||||||
|
"min_confidence": 0.5
|
||||||
|
},
|
||||||
|
"face": {
|
||||||
|
"enabled": true,
|
||||||
|
"min_confidence": 0.7,
|
||||||
|
"min_size": 32
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"filter_config": {
|
||||||
|
"face": {
|
||||||
|
"min_confidence": 50.0,
|
||||||
|
"min_size": 32,
|
||||||
|
"min_capture_quality": 30.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"paths": {
|
||||||
|
"output_dir": "/Users/nextorageai/momentry/output",
|
||||||
|
"backup_dir": "/Users/nextorageai/momentry/backup",
|
||||||
|
"scripts_dir": "/Users/nextorageai/momentry_core/scripts",
|
||||||
|
"python_path": "/opt/homebrew/bin/python3.11",
|
||||||
|
"ffmpeg_path": "/opt/homebrew/bin/ffmpeg"
|
||||||
|
},
|
||||||
|
"concurrency": {
|
||||||
|
"max_concurrent_jobs": 6,
|
||||||
|
"poll_interval": 10,
|
||||||
|
"batch_size": 10,
|
||||||
|
"processor_timeout_secs": 3600
|
||||||
|
},
|
||||||
|
"feature_flags": {
|
||||||
|
"cache_enabled": true,
|
||||||
|
"auto_pipeline_enabled": false,
|
||||||
|
"watcher_auto_register": false,
|
||||||
|
"summary_enabled": true
|
||||||
|
},
|
||||||
|
"server": {
|
||||||
|
"port": 3002,
|
||||||
|
"media_base_url": "https://wp.momentry.ddns.net",
|
||||||
|
"serve_base_url": "https://m5wp.momentry.ddns.net/files",
|
||||||
|
"storage_root": "/Users/nextorageai/momentry/var/sftpgo/data"
|
||||||
|
},
|
||||||
|
"admin_settings": {
|
||||||
|
"session_timeout": 3600,
|
||||||
|
"max_login_attempts": 5,
|
||||||
|
"api_key_expiry_days": 365,
|
||||||
|
"system_stats_refresh_sec": 5
|
||||||
|
},
|
||||||
|
"face_filter_defaults": {
|
||||||
|
"min_confidence": 50.0,
|
||||||
|
"min_size": 32,
|
||||||
|
"min_capture_quality": 25.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
JSONEOF
|
||||||
|
|
||||||
|
log_info "✅ config/admin_config.json 已更新"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 2. 修复 src-tauri/src/main.rs
|
||||||
|
log_info "修复 src-tauri/src/main.rs..."
|
||||||
|
|
||||||
|
# 使用 sed 替换路径
|
||||||
|
sed -i.m4promini \
|
||||||
|
-e "s|/Users/accusys/momentry_core|/Users/nextorageai/momentry_core|g" \
|
||||||
|
-e "s|/Users/accusys/momentry_studio|/Users/nextorageai/momentry_studio|g" \
|
||||||
|
-e "s|/Users/accusys/markbase|/Users/nextorageai/markbase|g" \
|
||||||
|
-e "s|/Users/accusys/MarkBaseEngine|/Users/nextorageai/MarkBaseEngine|g" \
|
||||||
|
-e "s|/Users/accusys/momentry|/Users/nextorageai/momentry|g" \
|
||||||
|
-e "s|\"/Users/accusys\"|\"/Users/nextorageai\"|g" \
|
||||||
|
src-tauri/src/main.rs
|
||||||
|
|
||||||
|
log_info "✅ src-tauri/src/main.rs 已更新"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 3. 修复 start-proxy.sh
|
||||||
|
if [ -f "start-proxy.sh" ]; then
|
||||||
|
log_info "修复 start-proxy.sh..."
|
||||||
|
sed -i.m4promini \
|
||||||
|
-e "s|/Users/accusys/momentry_studio|/Users/nextorageai/momentry_studio|g" \
|
||||||
|
start-proxy.sh
|
||||||
|
log_info "✅ start-proxy.sh 已更新"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 4. 创建环境变量模板
|
||||||
|
log_info "创建环境变量模板..."
|
||||||
|
|
||||||
|
cat > .env.m4promini.template << 'ENVEOF'
|
||||||
|
# Momentry Studio - m4promini Environment Variables
|
||||||
|
|
||||||
|
# 根目录
|
||||||
|
MOMENTRY_ROOT=/Users/nextorageai/momentry
|
||||||
|
MOMENTRY_CORE_ROOT=/Users/nextorageai/momentry_core
|
||||||
|
MARKBASE_ROOT=/Users/nextorageai/markbase
|
||||||
|
MOMENTRY_STUDIO_ROOT=/Users/nextorageai/momentry_studio
|
||||||
|
|
||||||
|
# 存储
|
||||||
|
STORAGE_ROOT=/Users/nextorageai/momentry/var/sftpgo/data
|
||||||
|
OUTPUT_DIR=/Users/nextorageai/momentry/output
|
||||||
|
BACKUP_DIR=/Users/nextorageai/momentry/backup
|
||||||
|
|
||||||
|
# 数据库
|
||||||
|
MOMENTRY_DATA_DIR=/Users/nextorageai/momentry_studio/data/users
|
||||||
|
|
||||||
|
# 二进制工具
|
||||||
|
PYTHON_PATH=/opt/homebrew/bin/python3.11
|
||||||
|
FFMPEG_PATH=/opt/homebrew/bin/ffmpeg
|
||||||
|
|
||||||
|
# API Keys (需要实际值)
|
||||||
|
MOMENTRY_API_KEY=your_api_key_here
|
||||||
|
|
||||||
|
# 外部服务
|
||||||
|
MOMENTRY_LLM_VISION_URL=http://localhost:8080/v1/chat/completions
|
||||||
|
MOMENTRY_LLM_CHAT_URL=http://localhost:8080/v1/chat/completions
|
||||||
|
|
||||||
|
# 数据库
|
||||||
|
DATABASE_URL=postgres://nextorageai@localhost:5432/momentry
|
||||||
|
QDRANT_URL=http://localhost:6333
|
||||||
|
QDRANT_API_KEY=Test3200Test3200Test3200
|
||||||
|
|
||||||
|
# Redis (可选)
|
||||||
|
REDIS_URL=redis://localhost:6379
|
||||||
|
ENVEOF
|
||||||
|
|
||||||
|
log_info "✅ 环境变量模板已创建: .env.m4promini.template"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 5. 创建部署说明
|
||||||
|
log_info "创建部署说明..."
|
||||||
|
|
||||||
|
cat > DEPLOYMENT_m4promini.md << 'MDEOF'
|
||||||
|
# Momentry Studio - m4promini 部署说明
|
||||||
|
|
||||||
|
**部署日期**: $(date +"%Y-%m-%d")
|
||||||
|
**目标用户**: nextorageai
|
||||||
|
**目标主目录**: /Users/nextorageai
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 部署步骤
|
||||||
|
|
||||||
|
### 1. 环境准备
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 在 m4promini 上
|
||||||
|
cd /Users/nextorageai
|
||||||
|
|
||||||
|
# 检查依赖
|
||||||
|
node --version # v18+
|
||||||
|
rustc --version # 1.70+
|
||||||
|
psql --version # 14+
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 复制项目
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 复制或克隆项目到目标目录
|
||||||
|
cd /Users/nextorageai
|
||||||
|
git clone <repo_url> momentry_studio
|
||||||
|
cd momentry_studio
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 运行路径修复脚本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chmod +x fix_paths_for_m4promini.sh
|
||||||
|
./fix_paths_for_m4promini.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 配置环境变量
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 复制环境变量模板
|
||||||
|
cp .env.m4promini.template .env
|
||||||
|
|
||||||
|
# 编辑 .env 文件,填入实际值
|
||||||
|
vim .env
|
||||||
|
|
||||||
|
# 加载环境变量
|
||||||
|
source .env
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. 构建项目
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 安装依赖
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# 构建前端
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# 构建 Rust 代理
|
||||||
|
cd src-tauri
|
||||||
|
cargo build --release
|
||||||
|
cd ..
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. 初始化数据库
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 创建数据目录
|
||||||
|
mkdir -p data/users
|
||||||
|
|
||||||
|
# 数据库将自动创建在:
|
||||||
|
# /Users/nextorageai/momentry_studio/data/users/demo.sqlite
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7. 启动服务
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 方式 1: 使用环境变量
|
||||||
|
export MOMENTRY_API_KEY=your_key_here
|
||||||
|
export MOMENTRY_DATA_DIR=/Users/nextorageai/momentry_studio/data/users
|
||||||
|
./src-tauri/target/release/momentry-proxy
|
||||||
|
|
||||||
|
# 方式 2: 使用启动脚本
|
||||||
|
npm run proxy
|
||||||
|
|
||||||
|
# 验证
|
||||||
|
curl http://localhost:8888/health
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 路径映射
|
||||||
|
|
||||||
|
| 功能 | m5max48 (当前) | m4promini (目标) |
|
||||||
|
|------|---------------|------------------|
|
||||||
|
| 用户主目录 | `/Users/accusys` | `/Users/nextorageai` |
|
||||||
|
| Studio 根目录 | `/Users/accusys/momentry_studio` | `/Users/nextorageai/momentry_studio` |
|
||||||
|
| Core API 根目录 | `/Users/accusys/momentry_core` | `/Users/nextorageai/momentry_core` |
|
||||||
|
| MarkBase 根目录 | `/Users/accusys/markbase` | `/Users/nextorageai/markbase` |
|
||||||
|
| 存储目录 | `/Users/accusys/momentry/var/sftpgo/data` | `/Users/nextorageai/momentry/var/sftpgo/data` |
|
||||||
|
| 输出目录 | `/Users/accusys/momentry/output` | `/Users/nextorageai/momentry/output` |
|
||||||
|
| 数据库目录 | `/Users/accusys/momentry_studio/data/users` | `/Users/nextorageai/momentry_studio/data/users` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 验证清单
|
||||||
|
|
||||||
|
- [ ] 环境变量已配置
|
||||||
|
- [ ] 配置文件路径正确
|
||||||
|
- [ ] 前端构建成功
|
||||||
|
- [ ] Rust 代理构建成功
|
||||||
|
- [ ] 数据库目录已创建
|
||||||
|
- [ ] 服务启动成功
|
||||||
|
- [ ] 健康检查通过
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 故障排除
|
||||||
|
|
||||||
|
### 问题 1: 服务启动失败
|
||||||
|
|
||||||
|
**检查**:
|
||||||
|
```bash
|
||||||
|
# 检查日志
|
||||||
|
tail -f /tmp/momentry_proxy.log
|
||||||
|
|
||||||
|
# 检查环境变量
|
||||||
|
echo $MOMENTRY_API_KEY
|
||||||
|
echo $MOMENTRY_DATA_DIR
|
||||||
|
```
|
||||||
|
|
||||||
|
### 问题 2: 路径错误
|
||||||
|
|
||||||
|
**验证**:
|
||||||
|
```bash
|
||||||
|
# 检查配置文件
|
||||||
|
cat config/admin_config.json | grep "/Users"
|
||||||
|
|
||||||
|
# 应该看到 /Users/nextorageai
|
||||||
|
```
|
||||||
|
|
||||||
|
### 问题 3: 权限问题
|
||||||
|
|
||||||
|
**修复**:
|
||||||
|
```bash
|
||||||
|
# 确保目录权限
|
||||||
|
chown -R nextorageai:staff /Users/nextorageai/momentry_studio
|
||||||
|
chmod -R 755 /Users/nextorageai/momentry_studio
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**部署完成后访问**: http://localhost:8888
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**维护**: 保持 .env 文件的安全,不要提交到版本控制。
|
||||||
|
MDEOF
|
||||||
|
|
||||||
|
log_info "✅ 部署说明已创建: DEPLOYMENT_m4promini.md"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 总结
|
||||||
|
echo "================================================================================"
|
||||||
|
echo " ✅ 路径修复完成"
|
||||||
|
echo "================================================================================"
|
||||||
|
echo ""
|
||||||
|
echo "修复的文件:"
|
||||||
|
echo " - config/admin_config.json"
|
||||||
|
echo " - src-tauri/src/main.rs"
|
||||||
|
echo " - start-proxy.sh (如果存在)"
|
||||||
|
echo ""
|
||||||
|
echo "创建的文件:"
|
||||||
|
echo " - .env.m4promini.template (环境变量模板)"
|
||||||
|
echo " - DEPLOYMENT_m4promini.md (部署说明)"
|
||||||
|
echo ""
|
||||||
|
echo "备份位置: ${BACKUP_DIR}/"
|
||||||
|
echo ""
|
||||||
|
echo "下一步:"
|
||||||
|
echo " 1. 编辑 .env.m4promini.template 并保存为 .env"
|
||||||
|
echo " 2. 运行: source .env"
|
||||||
|
echo " 3. 构建: npm run build && cd src-tauri && cargo build --release"
|
||||||
|
echo " 4. 启动: npm run proxy"
|
||||||
|
echo ""
|
||||||
|
echo "详细说明请查看: DEPLOYMENT_m4promini.md"
|
||||||
|
echo "================================================================================"
|
||||||
Reference in New Issue
Block a user