feat: 动态路径系统 - 支持任意用户环境部署
问题: - 100+ 处硬编码路径 /Users/accusys - 无法在不同用户环境部署 - 配置文件路径固定 解决方案: 1. ✅ 创建 paths.rs 模块 - get_home_dir() - 获取用户主目录 - get_momentry_core_root() - Core API 根目录 - get_markbase_root() - MarkBase 根目录 - get_studio_root() - Studio 根目录 - get_storage_root() - 存储根目录 - 环境变量优先 > 用户主目录推断 2. ✅ 修改 main.rs - 移除所有硬编码路径 - 使用动态路径函数 - 支持环境变量配置 3. ✅ 创建配置模板 - admin_config.json.template - .env.template - 使用 {{HOME}} 占位符 4. ✅ 创建自动化脚本 - install.sh - 通用安装脚本 - generate_config.sh - 配置生成脚本 - 自动检测用户环境 特性: - ✅ 支持任意用户环境 - ✅ 自动检测用户主目录 - ✅ 环境变量优先级控制 - ✅ 一键安装部署 测试: - ✅ 编译通过 (cargo check) - ⚠️ 需要在新环境测试 使用方法: 1. 克隆项目 2. ./install.sh 3. 编辑 .env 4. npm run proxy 适用环境: - m5max48: /Users/accusys - m4promini: /Users/nextorageai - 任意 macOS 环境
This commit is contained in:
171
install.sh
Executable file
171
install.sh
Executable file
@@ -0,0 +1,171 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Momentry Studio - 通用安装脚本
|
||||
# 适用于任何用户环境
|
||||
# 使用: ./install.sh
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
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"
|
||||
}
|
||||
|
||||
log_step() {
|
||||
echo -e "${BLUE}[STEP]${NC} $1"
|
||||
}
|
||||
|
||||
# 获取脚本所在目录
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
USER_HOME="${HOME:-$(pwd)}"
|
||||
|
||||
echo "================================================================================"
|
||||
echo " Momentry Studio - 安装向导"
|
||||
echo "================================================================================"
|
||||
echo ""
|
||||
echo "检测到的环境:"
|
||||
echo " 用户主目录: ${USER_HOME}"
|
||||
echo " Studio 根目录: ${SCRIPT_DIR}"
|
||||
echo " 用户名: $(whoami)"
|
||||
echo ""
|
||||
|
||||
# 步骤 1: 检查依赖
|
||||
log_step "步骤 1/6: 检查依赖..."
|
||||
|
||||
check_command() {
|
||||
local cmd=$1
|
||||
local name=$2
|
||||
if command -v $cmd &> /dev/null; then
|
||||
log_info "✅ $name: $(command -v $cmd)"
|
||||
else
|
||||
log_error "❌ $name 未安装"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_command "node" "Node.js" || exit 1
|
||||
check_command "npm" "npm" || exit 1
|
||||
check_command "rustc" "Rust" || exit 1
|
||||
check_command "cargo" "Cargo" || exit 1
|
||||
|
||||
echo ""
|
||||
|
||||
# 步骤 2: 创建环境变量文件
|
||||
log_step "步骤 2/6: 创建环境变量文件..."
|
||||
|
||||
if [ -f "${SCRIPT_DIR}/.env" ]; then
|
||||
log_warn ".env 文件已存在,跳过创建"
|
||||
else
|
||||
cp "${SCRIPT_DIR}/.env.template" "${SCRIPT_DIR}/.env"
|
||||
log_info "✅ 已创建 .env 文件"
|
||||
log_warn "请编辑 .env 文件,填入实际的 API Keys"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 步骤 3: 生成配置文件
|
||||
log_step "步骤 3/6: 生成配置文件..."
|
||||
|
||||
chmod +x "${SCRIPT_DIR}/generate_config.sh"
|
||||
"${SCRIPT_DIR}/generate_config.sh"
|
||||
|
||||
echo ""
|
||||
|
||||
# 步骤 4: 创建数据目录
|
||||
log_step "步骤 4/6: 创建数据目录..."
|
||||
|
||||
mkdir -p "${USER_HOME}/momentry/output"
|
||||
mkdir -p "${USER_HOME}/momentry/backup"
|
||||
mkdir -p "${USER_HOME}/momentry/var/sftpgo/data"
|
||||
mkdir -p "${SCRIPT_DIR}/data/users"
|
||||
|
||||
log_info "✅ 已创建数据目录:"
|
||||
log_info " - Output: ${USER_HOME}/momentry/output"
|
||||
log_info " - Backup: ${USER_HOME}/momentry/backup"
|
||||
log_info " - Storage: ${USER_HOME}/momentry/var/sftpgo/data"
|
||||
log_info " - Database: ${SCRIPT_DIR}/data/users"
|
||||
|
||||
echo ""
|
||||
|
||||
# 步骤 5: 安装依赖并构建
|
||||
log_step "步骤 5/6: 安装依赖并构建..."
|
||||
|
||||
cd "${SCRIPT_DIR}"
|
||||
|
||||
log_info "安装 Node.js 依赖..."
|
||||
npm install
|
||||
|
||||
log_info "构建前端..."
|
||||
npm run build
|
||||
|
||||
log_info "构建 Rust 代理..."
|
||||
cd src-tauri
|
||||
cargo build --release
|
||||
cd ..
|
||||
|
||||
log_info "✅ 构建完成"
|
||||
|
||||
echo ""
|
||||
|
||||
# 步骤 6: 创建启动脚本
|
||||
log_step "步骤 6/6: 创建启动脚本..."
|
||||
|
||||
cat > "${SCRIPT_DIR}/start.sh" << STARTSCRIPT
|
||||
#!/bin/bash
|
||||
# Momentry Studio 启动脚本
|
||||
|
||||
# 加载环境变量
|
||||
if [ -f "${SCRIPT_DIR}/.env" ]; then
|
||||
source "${SCRIPT_DIR}/.env"
|
||||
fi
|
||||
|
||||
# 设置必要的环境变量
|
||||
export MOMENTRY_API_KEY=\${MOMENTRY_API_KEY:-your_api_key_here}
|
||||
export MOMENTRY_DATA_DIR=\${MOMENTRY_DATA_DIR:-${SCRIPT_DIR}/data/users}
|
||||
|
||||
# 启动代理
|
||||
cd "${SCRIPT_DIR}"
|
||||
./src-tauri/target/release/momentry-proxy
|
||||
STARTSCRIPT
|
||||
|
||||
chmod +x "${SCRIPT_DIR}/start.sh"
|
||||
|
||||
log_info "✅ 已创建启动脚本: start.sh"
|
||||
|
||||
echo ""
|
||||
|
||||
# 总结
|
||||
echo "================================================================================"
|
||||
echo " ✅ 安装完成"
|
||||
echo "================================================================================"
|
||||
echo ""
|
||||
echo "安装位置:"
|
||||
echo " Studio 根目录: ${SCRIPT_DIR}"
|
||||
echo " 配置文件: ${SCRIPT_DIR}/config/admin_config.json"
|
||||
echo " 环境变量: ${SCRIPT_DIR}/.env"
|
||||
echo " 数据目录: ${SCRIPT_DIR}/data/users"
|
||||
echo ""
|
||||
echo "下一步:"
|
||||
echo " 1. 编辑环境变量: vim ${SCRIPT_DIR}/.env"
|
||||
echo " 2. 加载环境变量: source ${SCRIPT_DIR}/.env"
|
||||
echo " 3. 启动服务: ${SCRIPT_DIR}/start.sh"
|
||||
echo " 4. 访问: http://localhost:8888"
|
||||
echo ""
|
||||
echo "或者使用 npm 命令:"
|
||||
echo " npm run proxy # 启动代理服务"
|
||||
echo ""
|
||||
echo "================================================================================"
|
||||
Reference in New Issue
Block a user