2026-03-25 18:05:02 +08:00
|
|
|
|
#!/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)"
|
2026-03-26 11:31:47 +08:00
|
|
|
|
FRONTEND_DIR="$SCRIPT_DIR/lesingle-edu-reading-platform-frontend"
|
2026-03-25 18:05:02 +08:00
|
|
|
|
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 ""
|