feat: add Linux deployment scripts (deploy/start/stop/run_eval)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
94
start.sh
Normal file
94
start.sh
Normal file
@@ -0,0 +1,94 @@
|
||||
#!/usr/bin/env bash
|
||||
# start.sh — 启动 Siemens RAGAS Web 服务(后台运行)
|
||||
# 前提:已执行过 deploy.sh(.venv 和依赖均已就绪)
|
||||
# 用法:bash start.sh
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# ── 颜色输出 ──────────────────────────────────────────────────────
|
||||
if [ -t 1 ]; then
|
||||
GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; CYAN='\033[0;36m'; NC='\033[0m'
|
||||
else
|
||||
GREEN=''; YELLOW=''; RED=''; CYAN=''; NC=''
|
||||
fi
|
||||
|
||||
ok() { echo -e "${GREEN}[OK]${NC} $*"; }
|
||||
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
||||
err() { echo -e "${RED}[ERROR]${NC} $*" >&2; }
|
||||
|
||||
echo ""
|
||||
echo -e "${CYAN}============================================================${NC}"
|
||||
echo -e "${CYAN} Siemens RAGAS Console — 启动服务${NC}"
|
||||
echo -e "${CYAN}============================================================${NC}"
|
||||
echo ""
|
||||
|
||||
# 检查虚拟环境
|
||||
if [ ! -f ".venv/bin/python" ]; then
|
||||
err "未找到 .venv,请先执行部署:bash deploy.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PYTHON=".venv/bin/python"
|
||||
|
||||
# 检查 .env
|
||||
if [ ! -f ".env" ]; then
|
||||
warn ".env 不存在,请先复制并编辑配置:"
|
||||
warn " cp .env.example .env && nano .env"
|
||||
fi
|
||||
|
||||
if grep -q "your-api-key" .env 2>/dev/null; then
|
||||
warn ".env 中仍包含默认占位符,部分功能(评估执行)将不可用"
|
||||
fi
|
||||
|
||||
# 检查是否已有运行中的进程
|
||||
if [ -f ".server.pid" ]; then
|
||||
EXISTING_PID=$(cat .server.pid)
|
||||
if kill -0 "$EXISTING_PID" 2>/dev/null; then
|
||||
warn "服务已在运行 (PID=$EXISTING_PID),无需重复启动"
|
||||
warn "如需重启请先执行:bash stop.sh"
|
||||
exit 0
|
||||
else
|
||||
# PID 文件残留,清理
|
||||
rm -f .server.pid
|
||||
fi
|
||||
fi
|
||||
|
||||
# 创建必要目录
|
||||
mkdir -p logs
|
||||
|
||||
# 端口检测
|
||||
PORT=8800
|
||||
if ss -tlnp 2>/dev/null | grep -q ":$PORT " || netstat -tlnp 2>/dev/null | grep -q ":$PORT "; then
|
||||
warn "端口 $PORT 已被占用,尝试 8801..."
|
||||
PORT=8801
|
||||
if ss -tlnp 2>/dev/null | grep -q ":$PORT " || netstat -tlnp 2>/dev/null | grep -q ":$PORT "; then
|
||||
err "端口 8800 和 8801 均被占用,请手动指定端口:"
|
||||
err " .venv/bin/python webmain.py --host 0.0.0.0 --port <PORT>"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# 后台启动
|
||||
nohup "$PYTHON" webmain.py --host 0.0.0.0 --port "$PORT" >> logs/server.log 2>&1 &
|
||||
SERVER_PID=$!
|
||||
echo "$SERVER_PID" > .server.pid
|
||||
|
||||
# 等待 3 秒验证进程存活
|
||||
sleep 3
|
||||
if kill -0 "$SERVER_PID" 2>/dev/null; then
|
||||
ok "服务已启动 (PID=$SERVER_PID)"
|
||||
echo ""
|
||||
echo -e "${CYAN} 访问地址: http://$(hostname -I | awk '{print $1}'):${PORT}${NC}"
|
||||
echo -e "${CYAN} 本机访问: http://127.0.0.1:${PORT}${NC}"
|
||||
echo -e "${CYAN} 查看日志: tail -f logs/server.log${NC}"
|
||||
echo -e "${CYAN} 停止服务: bash stop.sh${NC}"
|
||||
echo ""
|
||||
else
|
||||
err "服务启动失败,请查看日志:"
|
||||
err " tail -20 logs/server.log"
|
||||
rm -f .server.pid
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user