kindergarten_java/deploy-frontend.sh

121 lines
3.0 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
#===============================================================================
# 前端生产环境构建并部署脚本
#
# 使用方法:
# ./deploy-frontend.sh user@host
# 或
# export REMOTE_USER=root
# export REMOTE_HOST=8.148.151.56
# ./deploy-frontend.sh
#===============================================================================
set -e
# 配置
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
FRONTEND_DIR="$SCRIPT_DIR/lesingle-edu-reading-platform-frontend"
REMOTE_DIR="/www/wwwroot/reading.ycapp.cn"
# SSH 配置(可通过环境变量覆盖)
REMOTE_USER="${REMOTE_USER:-root}"
REMOTE_HOST="${REMOTE_HOST:-}"
REMOTE_PORT="${REMOTE_PORT:-22}"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
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"; }
log_step() { echo -e "${BLUE}[STEP]${NC} $1"; }
# 检查参数
if [ -n "$1" ]; then
if [[ "$1" == *"@"* ]]; then
REMOTE_USER=$(echo "$1" | cut -d'@' -f1)
REMOTE_HOST=$(echo "$1" | cut -d'@' -f2)
fi
fi
if [ -z "$REMOTE_HOST" ]; then
log_error "请提供远程主机:$0 user@host 或设置 REMOTE_HOST 环境变量"
exit 1
fi
echo ""
echo "=============================================="
echo " 前端部署到宝塔"
echo "=============================================="
echo ""
echo " 远程主机:$REMOTE_USER@$REMOTE_HOST"
echo " 部署目录:$REMOTE_DIR"
echo ""
cd "$FRONTEND_DIR"
# 步骤 1: 检查 Node.js
log_step "检查环境..."
if ! command -v node &> /dev/null; then
log_error "未找到 Node.js"
exit 1
fi
node_version=$(node -v)
npm_version=$(npm -v)
log_info "Node.js: $node_version, npm: $npm_version"
# 步骤 2: 安装依赖
log_step "安装依赖..."
if [ ! -d "node_modules" ]; then
npm install
else
log_info "node_modules 已存在,跳过依赖安装"
fi
# 步骤 3: 构建
log_step "构建前端..."
npm run build
if [ ! -d "dist" ]; then
log_error "构建失败,未找到 dist 目录"
exit 1
fi
log_info "构建成功"
# 步骤 4: 上传到服务器
log_step "上传到远程服务器..."
# 创建远程目录
ssh -o StrictHostKeyChecking=no -p "$REMOTE_PORT" "$REMOTE_USER@$REMOTE_HOST" \
"mkdir -p $REMOTE_DIR"
# 上传文件
scp -o StrictHostKeyChecking=no -r -P "$REMOTE_PORT" \
dist/ \
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
log_info "上传完成"
# 步骤 5: 设置权限
log_step "设置文件权限..."
ssh -o StrictHostKeyChecking=no -p "$REMOTE_PORT" "$REMOTE_USER@$REMOTE_HOST" << 'ENDSSH'
chown -R www:www /www/wwwroot/reading.ycapp.cn
chmod -R 755 /www/wwwroot/reading.ycapp.cn
ENDSSH
echo ""
echo "=============================================="
echo " 前端部署完成!"
echo "=============================================="
echo ""
echo " 访问地址http://${REMOTE_HOST}"
echo ""
echo " 下一步:在宝塔面板配置 Nginx 反向代理"
echo " /api -> http://localhost:8480"
echo ""