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