#!/bin/bash set -e BASE_DIR="$(cd "$(dirname "$0")" && pwd)" CONDA_BASE="${CONDA_BASE:-/home/szlc/miniconda3}" # 初始化 conda(脚本中需要 source 才能用 conda activate) if [ -f "$CONDA_BASE/etc/profile.d/conda.sh" ]; then source "$CONDA_BASE/etc/profile.d/conda.sh" else echo "WARNING: 未找到 conda.sh,请确认 CONDA_BASE=$CONDA_BASE 正确" fi echo "=== 换发型项目部署脚本 ===" echo "BASE_DIR: $BASE_DIR" # 1. 检查前提条件 echo "[1/7] 检查前提条件..." command -v git >/dev/null || { echo "ERROR: git 未安装"; exit 1; } command -v conda >/dev/null || { echo "ERROR: conda 未安装"; exit 1; } nvidia-smi >/dev/null 2>&1 || { echo "ERROR: NVIDIA 驱动未安装"; exit 1; } # 2. 生成 configure.ini echo "[2/7] 生成 configure.ini..." sed "s|__BASE_DIR__|$BASE_DIR|g" "$BASE_DIR/hair_service_sd/config/configure.ini.template" > "$BASE_DIR/hair_service_sd/config/configure.ini" echo " configure.ini 已生成" # 3. 恢复 conda 环境(conda-pack) echo "[3/7] 恢复 conda 环境..." for env_name in my_hair sdwebui kohya; do if [ -f "$BASE_DIR/conda_envs/${env_name}.tar.gz" ]; then echo " 恢复 $env_name ..." rm -rf "$CONDA_BASE/envs/$env_name" mkdir -p "$CONDA_BASE/envs/$env_name" tar -xzf "$BASE_DIR/conda_envs/${env_name}.tar.gz" -C "$CONDA_BASE/envs/$env_name" conda activate "$env_name" conda-unpack # 修复打包后的硬编码路径 conda deactivate echo " ✓ $env_name 已恢复" else echo " ✗ conda_envs/${env_name}.tar.gz 不存在,请从网盘下载" fi done # 4. 创建 py310 环境(从 yml) echo "[4/7] 创建 py310 环境..." if [ -f "$BASE_DIR/conda_envs/py310.yml" ]; then conda env create -f "$BASE_DIR/conda_envs/py310.yml" -n py310 2>/dev/null || echo " py310 环境已存在,跳过" echo " ✓ py310 已就绪" else echo " ✗ conda_envs/py310.yml 不存在" fi # 5. 检查模型/数据目录 echo "[5/7] 检查模型和数据目录..." for dir in hair_service_sd/weights stable-diffusion-webui/models/Lora stable-diffusion-webui/models/Stable-diffusion stable-diffusion-webui/extensions/sd-webui-controlnet stable-diffusion-webui/repositories kohya_ss_home/.local kohya_ss_home/kohya_ss data/ref_hairstyle; do if [ -d "$BASE_DIR/$dir" ]; then echo " ✓ $dir" else echo " ✗ $dir 缺失,请从网盘下载" fi done # 6. 检查训练底模 echo "[6/7] 检查训练底模 v1-5-pruned-emaonly..." if [ -f "$BASE_DIR/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors" ]; then echo " ✓ v1-5-pruned-emaonly.safetensors 已存在" else echo " ✗ v1-5-pruned-emaonly.safetensors 缺失,请从网盘下载 models/ 目录" fi # 7. 创建运行时目录 echo "[7/7] 创建运行时目录..." mkdir -p "$BASE_DIR/logs" mkdir -p "$BASE_DIR/data/tmp" "$BASE_DIR/data/res_dir" "$BASE_DIR/data/userImage" "$BASE_DIR/data/user_info" mkdir -p "$BASE_DIR/kohya_ss_home/train_material" echo "" echo "=== 部署完成 ===" echo "启动服务: ./start_all_services.sh"