shimai
2026-04-03 6bb08c2297be1b6415c8bc02e6917eba6ee355e5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/bin/bash
 
# ============================================
# 云小调前端一键部署脚本
# 目标服务器:36.140.67.217
# 使用方式:./deploy.sh
# ============================================
 
set -e
 
# 配置变量
SERVER_IP="36.140.67.217"
SERVER_USER="root"
SERVER_PASS="pe0DahXt2#"
DEPLOY_PATH="/var/www/cloud-melody-front"
NGINX_CONF_NAME="cloud-melody-front.conf"
 
# 颜色输出
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_dependencies() {
    log_info "检查依赖..."
    
    if ! command -v npm &> /dev/null; then
        log_error "npm 未安装,请先安装 Node.js"
        exit 1
    fi
    
    if ! command -v sshpass &> /dev/null; then
        log_warn "sshpass 未安装,正在安装..."
        if [[ "$OSTYPE" == "darwin"* ]]; then
            brew install sshpass 2>/dev/null || brew install hudochenkov/sshpass/sshpass
        elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
            sudo apt-get install -y sshpass || sudo yum install -y sshpass
        fi
    fi
    
    log_info "依赖检查完成"
}
 
# 构建项目
build_project() {
    log_info "开始构建项目..."
    
    cd "$(dirname "$0")/.."
    
    # 安装依赖
    log_info "安装依赖..."
    npm install
    
    # 构建生产包
    log_info "构建生产包..."
    npm run build
    
    if [ ! -d "build" ]; then
        log_error "构建失败,build 目录不存在"
        exit 1
    fi
    
    log_info "构建完成"
}
 
# 部署到服务器
deploy_to_server() {
    log_info "开始部署到服务器 ${SERVER_IP}..."
    
    # 创建远程目录
    sshpass -p "${SERVER_PASS}" ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_IP} "
        mkdir -p ${DEPLOY_PATH}
        mkdir -p /etc/nginx/conf.d
    "
    
    # 上传构建文件
    log_info "上传构建文件..."
    sshpass -p "${SERVER_PASS}" scp -o StrictHostKeyChecking=no -r build/* ${SERVER_USER}@${SERVER_IP}:${DEPLOY_PATH}/
    
    # 上传 nginx 配置
    log_info "配置 Nginx..."
    sshpass -p "${SERVER_PASS}" scp -o StrictHostKeyChecking=no \
        "$(dirname "$0")/cloud-melody-front.conf" \
        ${SERVER_USER}@${SERVER_IP}:/etc/nginx/conf.d/${NGINX_CONF_NAME}
    
    # 重启 nginx
    log_info "重启 Nginx..."
    sshpass -p "${SERVER_PASS}" ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_IP} "
        # 检查 nginx 配置
        nginx -t
        
        # 重启 nginx
        systemctl restart nginx || service nginx restart
        
        # 设置开机自启
        systemctl enable nginx || chkconfig nginx on
    "
    
    log_info "部署完成!"
}
 
# 显示部署结果
show_result() {
    echo ""
    echo "============================================"
    echo -e "${GREEN}部署成功!${NC}"
    echo "============================================"
    echo ""
    echo "访问地址:"
    echo "  前端页面:http://${SERVER_IP}:9002"
    echo "  后端API:http://${SERVER_IP}:9015"
    echo ""
    echo "服务器信息:"
    echo "  IP:${SERVER_IP}"
    echo "  用户:${SERVER_USER}"
    echo "  部署路径:${DEPLOY_PATH}"
    echo ""
    echo "常用命令:"
    echo "  查看 Nginx 状态:ssh root@${SERVER_IP} 'systemctl status nginx'"
    echo "  查看 Nginx 日志:ssh root@${SERVER_IP} 'tail -f /var/log/nginx/error.log'"
    echo "  重启 Nginx:ssh root@${SERVER_IP} 'systemctl restart nginx'"
    echo "============================================"
}
 
# 主流程
main() {
    echo ""
    echo "============================================"
    echo "    云小调前端一键部署脚本"
    echo "============================================"
    echo ""
    
    check_dependencies
    build_project
    deploy_to_server
    show_result
}
 
main "$@"