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 代码、部署流程
|
||||
Reference in New Issue
Block a user