问题: - 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. 启动服务
413 lines
10 KiB
Bash
Executable File
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 "================================================================================" |