From bb45f0981a914486d3646b79d7179d1fa7eb7fbd Mon Sep 17 00:00:00 2001 From: Momentry Studio Date: Mon, 12 Oct 2026 12:20:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B7=BB=E5=8A=A0=20m4promini=20?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E8=B7=AF=E5=BE=84=E4=BF=AE=E5=A4=8D=E6=96=B9?= =?UTF-8?q?=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: - 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. 启动服务 --- docs/DEPLOYMENT_PATH_ISSUES.md | 371 +++++++++++++++++++++++++++++ fix_paths_for_m4promini.sh | 413 +++++++++++++++++++++++++++++++++ 2 files changed, 784 insertions(+) create mode 100644 docs/DEPLOYMENT_PATH_ISSUES.md create mode 100755 fix_paths_for_m4promini.sh diff --git a/docs/DEPLOYMENT_PATH_ISSUES.md b/docs/DEPLOYMENT_PATH_ISSUES.md new file mode 100644 index 0000000..b119351 --- /dev/null +++ b/docs/DEPLOYMENT_PATH_ISSUES.md @@ -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 { + 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 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 代码、部署流程 \ No newline at end of file diff --git a/fix_paths_for_m4promini.sh b/fix_paths_for_m4promini.sh new file mode 100755 index 0000000..6a5bde6 --- /dev/null +++ b/fix_paths_for_m4promini.sh @@ -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 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 "================================================================================" \ No newline at end of file