151 lines
3.4 KiB
Bash
Executable File
151 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# 一键部署脚本模板
|
|
# 用法: ./build.sh [deploy|update|stop|status]
|
|
|
|
set -e
|
|
|
|
SERVICE_NAME="realesrgan-service"
|
|
GIT_REPO="git@git.opencomputing.cn:yumoqing/realesrgan-service.git"
|
|
SERVICE_PORT=9082
|
|
DEPLOY_DIR="/data/ymq/$SERVICE_NAME"
|
|
VENV_PATH="/data/ymq/wan22-service/py3"
|
|
GPU_ID="5"
|
|
|
|
# 颜色输出
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
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"; }
|
|
|
|
check_deps() {
|
|
command -v git >/dev/null || { log_error "git not found"; exit 1; }
|
|
[ -f "$VENV_PATH/bin/python" ] || { log_error "Python venv not found: $VENV_PATH"; exit 1; }
|
|
}
|
|
|
|
deploy() {
|
|
log_info "Deploying $SERVICE_NAME..."
|
|
|
|
# 检查依赖
|
|
check_deps
|
|
|
|
# 克隆或更新代码
|
|
if [ -d "$DEPLOY_DIR/.git" ]; then
|
|
log_info "Updating existing deployment..."
|
|
cd "$DEPLOY_DIR"
|
|
git fetch origin
|
|
git reset --hard origin/master
|
|
else
|
|
log_info "Cloning repository..."
|
|
cd /data/ymq
|
|
git clone "$GIT_REPO" "$SERVICE_NAME"
|
|
cd "$DEPLOY_DIR"
|
|
fi
|
|
|
|
# 创建必要目录
|
|
mkdir -p "$DEPLOY_DIR/app/api/status"
|
|
mkdir -p "$DEPLOY_DIR/app/api/submit"
|
|
mkdir -p "$DEPLOY_DIR/app/api/task"
|
|
|
|
# 设置权限
|
|
chmod +x start.sh stop.sh 2>/dev/null || true
|
|
|
|
# 启动服务
|
|
start_service
|
|
}
|
|
|
|
start_service() {
|
|
log_info "Starting $SERVICE_NAME on port $SERVICE_PORT..."
|
|
|
|
# 停止旧进程
|
|
if [ -f stop.sh ]; then
|
|
bash stop.sh 2>/dev/null || true
|
|
sleep 2
|
|
fi
|
|
|
|
# 启动新进程
|
|
bash start.sh
|
|
|
|
# 等待启动
|
|
sleep 3
|
|
|
|
# 验证
|
|
if ss -tlnp | grep -q ":$SERVICE_PORT "; then
|
|
log_info "✓ Service started successfully"
|
|
verify_api
|
|
else
|
|
log_error "✗ Service failed to start"
|
|
log_error "Check logs: $DEPLOY_DIR/nohup.out"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
verify_api() {
|
|
log_info "Verifying API endpoints..."
|
|
|
|
# 检查 status endpoint
|
|
if curl -s "http://127.0.0.1:$SERVICE_PORT/api/status" | grep -q "service"; then
|
|
log_info "✓ /api/status OK"
|
|
else
|
|
log_warn "✗ /api/status failed"
|
|
fi
|
|
}
|
|
|
|
stop_service() {
|
|
log_info "Stopping $SERVICE_NAME..."
|
|
if [ -f "$DEPLOY_DIR/stop.sh" ]; then
|
|
cd "$DEPLOY_DIR"
|
|
bash stop.sh
|
|
log_info "✓ Service stopped"
|
|
else
|
|
log_warn "stop.sh not found"
|
|
fi
|
|
}
|
|
|
|
show_status() {
|
|
echo "=== $SERVICE_NAME Status ==="
|
|
echo "Port: $SERVICE_PORT"
|
|
echo "Deploy Dir: $DEPLOY_DIR"
|
|
echo ""
|
|
|
|
# 检查进程
|
|
if ss -tlnp | grep -q ":$SERVICE_PORT "; then
|
|
echo -e "Status: ${GREEN}RUNNING${NC}"
|
|
PID=$(ss -tlnp | grep ":$SERVICE_PORT " | grep -oP 'pid=\K[0-9]+')
|
|
echo "PID: $PID"
|
|
else
|
|
echo -e "Status: ${RED}STOPPED${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# 检查 API
|
|
echo "API Endpoints:"
|
|
curl -s "http://127.0.0.1:$SERVICE_PORT/api/status" 2>/dev/null | python3 -m json.tool 2>/dev/null || echo " (not responding)"
|
|
}
|
|
|
|
# 主入口
|
|
case "${1:-deploy}" in
|
|
deploy|install)
|
|
deploy
|
|
;;
|
|
update|upgrade)
|
|
deploy
|
|
;;
|
|
stop)
|
|
stop_service
|
|
;;
|
|
start)
|
|
start_service
|
|
;;
|
|
status)
|
|
show_status
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {deploy|update|stop|start|status}"
|
|
exit 1
|
|
;;
|
|
esac
|