完善部署脚本兼容性并生成详细部署手册

- setup.sh: 自动检测 CONDA_BASE(conda info --base),移除 set -e 改为
  错误收集,新增第8步验证 kohya 训练环境(测试 torch/accelerate 加载)
- start_all_services.sh: 自动检测 CONDA_BASE,新增端口冲突检测和
  WebUI 就绪等待(最多60秒轮询)
- stop_all_services.sh: 新增停止脚本,按端口停止三个服务
- py310.yml: 移除硬编码 prefix 路径,避免跨机器部署问题
- DEPLOY.md: 详细部署操作手册,覆盖从 clone 到验证三大功能的全流程
- 已验证: kohya.tar.gz 解压→conda-unpack→PYTHONPATH 加载全部通过
This commit is contained in:
colomi
2026-07-11 19:11:36 +08:00
parent 4b959b3a98
commit 42622e8e1e
5 changed files with 806 additions and 31 deletions
+74 -11
View File
@@ -1,24 +1,87 @@
#!/bin/bash
BASE_DIR="$(cd "$(dirname "$0")" && pwd)"
CONDA_BASE="${CONDA_BASE:-/home/szlc/miniconda3}"
# 自动检测 conda 安装路径
if [ -z "$CONDA_BASE" ]; then
if command -v conda >/dev/null 2>&1; then
CONDA_BASE="$(conda info --base 2>/dev/null)"
fi
fi
CONDA_BASE="${CONDA_BASE:-$HOME/miniconda3}"
export CONDA_BASE
mkdir -p "$BASE_DIR/logs"
# 检查端口是否被占用,如占用则提示
check_port() {
local port=$1
local name=$2
if lsof -i :$port >/dev/null 2>&1; then
echo "⚠ 端口 $port ($name) 已被占用,可能服务已在运行"
echo " 如需重启,请先运行: ./stop_all_services.sh"
return 1
fi
return 0
}
echo "=== 启动换发型服务 ==="
echo "BASE_DIR: $BASE_DIR"
echo "CONDA_BASE: $CONDA_BASE"
echo ""
# 检查 conda 环境是否存在
for env_name in my_hair sdwebui py310; do
if [ ! -f "$CONDA_BASE/envs/$env_name/bin/python" ]; then
echo "✗ conda 环境 $env_name 不存在,请先运行 ./setup.sh"
exit 1
fi
done
# 1. hair_service_sd (端口 8801)
cd "$BASE_DIR/hair_service_sd"
nohup "$CONDA_BASE/envs/my_hair/bin/python" run_copy_cost_colorb64.py > "$BASE_DIR/logs/hair_service.log" 2>&1 &
echo "hair_service_sd 已启动 (PID: $!, 端口 8801)"
echo "[1/3] 启动 hair_service_sd (端口 8801)..."
if check_port 8801 "hair_service_sd"; then
cd "$BASE_DIR/hair_service_sd"
nohup "$CONDA_BASE/envs/my_hair/bin/python" run_copy_cost_colorb64.py > "$BASE_DIR/logs/hair_service.log" 2>&1 &
echo " hair_service_sd 已启动 (PID: $!, 端口 8801)"
fi
# 2. stable-diffusion-webui (端口 57860)
cd "$BASE_DIR/stable-diffusion-webui"
nohup "$CONDA_BASE/envs/sdwebui/bin/python" webui.py --api --listen --xformers --port 57860 > "$BASE_DIR/logs/webui.log" 2>&1 &
echo "stable-diffusion-webui 已启动 (PID: $!, 端口 57860)"
echo "[2/3] 启动 stable-diffusion-webui (端口 57860)..."
if check_port 57860 "webui"; then
cd "$BASE_DIR/stable-diffusion-webui"
nohup "$CONDA_BASE/envs/sdwebui/bin/python" webui.py --api --listen --xformers --port 57860 > "$BASE_DIR/logs/webui.log" 2>&1 &
echo " stable-diffusion-webui 已启动 (PID: $!, 端口 57860)"
echo " ℹ WebUI 首次启动需加载模型(约 30-60 秒),请耐心等待"
fi
# 3. photo_service (端口 32678)
cd "$BASE_DIR/photo_service"
nohup "$CONDA_BASE/envs/py310/bin/python" lora_train_service_1.py > "$BASE_DIR/logs/photo_service.log" 2>&1 &
echo "photo_service 已启动 (PID: $!, 端口 32678)"
echo "[3/3] 启动 photo_service (端口 32678)..."
if check_port 32678 "photo_service"; then
cd "$BASE_DIR/photo_service"
nohup "$CONDA_BASE/envs/py310/bin/python" lora_train_service_1.py > "$BASE_DIR/logs/photo_service.log" 2>&1 &
echo " photo_service 已启动 (PID: $!, 端口 32678)"
fi
echo ""
echo "所有服务已在后台启动,日志在 $BASE_DIR/logs/"
echo "=== 所有服务已启动 ==="
echo "日志目录: $BASE_DIR/logs/"
echo ""
echo "查看日志:"
echo " tail -f $BASE_DIR/logs/hair_service.log # 换发型/换发色"
echo " tail -f $BASE_DIR/logs/webui.log # SD WebUI"
echo " tail -f $BASE_DIR/logs/photo_service.log # 训练服务"
echo ""
echo "停止服务: ./stop_all_services.sh"
echo ""
echo "等待 WebUI 就绪(检查端口 57860..."
for i in $(seq 1 60); do
if curl -s http://127.0.0.1:57860/sdapi/v1/options >/dev/null 2>&1; then
echo "✓ WebUI 已就绪"
break
fi
sleep 2
if [ $i -eq 60 ]; then
echo "⚠ WebUI 60 秒内未就绪,请检查日志: tail -f $BASE_DIR/logs/webui.log"
fi
done