start.sh 2.07 KB
#!/usr/bin/env bash
# =============================================================================
# OmniShopAgent - 启动脚本
# 启动 Milvus、CLIP(可选)、Streamlit 应用
# =============================================================================
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
VENV_DIR="${VENV_DIR:-$PROJECT_ROOT/venv}"
STREAMLIT_PORT="${STREAMLIT_PORT:-8501}"
STREAMLIT_HOST="${STREAMLIT_HOST:-0.0.0.0}"

cd "$PROJECT_ROOT"

# 激活虚拟环境
if [ -d "$VENV_DIR" ]; then
    echo "激活虚拟环境: $VENV_DIR"
    set +u
    source "$VENV_DIR/bin/activate"
    set -u
else
    echo "警告: 未找到虚拟环境 $VENV_DIR,使用当前 Python"
fi

echo "=========================================="
echo "OmniShopAgent 启动"
echo "=========================================="

# 1. 启动 Milvus(Docker)
if command -v docker &>/dev/null; then
    echo "[1/3] 检查 Milvus..."
    if ! docker ps --format '{{.Names}}' 2>/dev/null | grep -q milvus-standalone; then
        echo "  启动 Milvus (docker compose)..."
        docker compose up -d 2>/dev/null || docker-compose up -d 2>/dev/null || {
            echo "  警告: 无法启动 Milvus,请手动执行: docker compose up -d"
        }
        echo "  等待 Milvus 就绪 (30s)..."
        sleep 30
    else
        echo "  Milvus 已运行"
    fi
else
    echo "[1/3] 跳过 Milvus: 未安装 Docker"
fi

# 2. 检查 CLIP(可选,图像搜索需要)
echo "[2/3] 检查 CLIP 服务..."
echo "  提示: 图像搜索需 CLIP。若未启动,请另开终端执行: python -m clip_server launch"
echo "  文本搜索可无需 CLIP。"

# 3. 启动 Streamlit
echo "[3/3] 启动 Streamlit (端口 $STREAMLIT_PORT)..."
echo ""
echo "  访问: http://$STREAMLIT_HOST:$STREAMLIT_PORT"
echo "  按 Ctrl+C 停止"
echo "=========================================="

exec streamlit run app.py \
    --server.port="$STREAMLIT_PORT" \
    --server.address="$STREAMLIT_HOST" \
    --server.headless=true \
    --browser.gatherUsageStats=false