#!/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 "$@"