From 8d523a5001f2bd0445e3da56480bbac3a45fd20f Mon Sep 17 00:00:00 2001 From: yumoqing Date: Sun, 14 Jun 2026 16:32:11 +0800 Subject: [PATCH] Add one-click deployment script (build.sh) --- build.sh | 150 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100755 build.sh diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..784feaa --- /dev/null +++ b/build.sh @@ -0,0 +1,150 @@ +#!/bin/bash +# 一键部署脚本模板 +# 用法: ./build.sh [deploy|update|stop|status] + +set -e + +SERVICE_NAME="asr-service" +GIT_REPO="git@git.opencomputing.cn:yumoqing/asr-service.git" +SERVICE_PORT=9925 +DEPLOY_DIR="/data/ymq/$SERVICE_NAME" +VENV_PATH="/data/ymq/wan22-service/py3" +GPU_ID="6" + +# 颜色输出 +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