Files
momentry_studio/fix_paths_for_m4promini.sh
Momentry Studio bb45f0981a 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. 启动服务
2026-10-12 12:20:24 +08:00

413 lines
10 KiB
Bash
Executable File

#!/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 "================================================================================"