Files
huaxin-uniapp/deploy.sh
T

76 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# ==========================================
# 花信 自动部署脚本
# 用法: ./deploy.sh [环境]
# 默认部署到生产服务器
# ==========================================
set -euo pipefail
# ----- 配置(根据需要修改)-----
REMOTE_HOST="10.13.13.1"
REMOTE_USER="root"
REMOTE_PATH="/var/www/huaxin/"
NGINX_RELOAD="nginx -s reload"
# ------------------------------
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
log() { echo -e "${CYAN}[deploy]${NC} $1"; }
ok() { echo -e "${GREEN}[ ok ]${NC} $1"; }
warn() { echo -e "${YELLOW}[ warn ]${NC} $1"; }
fail() { echo -e "${RED}[fail ]${NC} $1"; exit 1; }
# 1. 检查 git 工作区是否干净
log "检查 git 工作区..."
if ! git diff --quiet HEAD 2>/dev/null; then
fail "工作区有未提交的修改,请先 git commit"
fi
if [ -n "$(git status --porcelain)" ]; then
fail "工作区有未跟踪的文件,请先 git add/commit 或添加到 .gitignore"
fi
ok "工作区干净"
# 2. 获取版本号
VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "dev")
log "部署版本: ${YELLOW}${VERSION}${NC}"
# 3. 安装依赖
log "安装依赖..."
npm install --silent --legacy-peer-deps 2>/dev/null || npm install --legacy-peer-deps
ok "依赖就绪"
# 4. 构建
log "构建项目..."
npm run build
ok "构建完成"
# 5. 上传到服务器
log "上传到 ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}..."
ssh "${REMOTE_USER}@${REMOTE_HOST}" "mkdir -p ${REMOTE_PATH}"
scp -qr dist/* "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}"
ok "上传完成"
# 6. 重载 Nginx
log "重载 Nginx..."
ssh "${REMOTE_USER}@${REMOTE_HOST}" "nginx -t && ${NGINX_RELOAD}"
ok "Nginx 重载完成"
# 7. 验证
sleep 1
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "https://${REMOTE_HOST}/huaxin/")
if [ "$HTTP_CODE" = "200" ]; then
ok "部署验证通过 (HTTP ${HTTP_CODE})"
else
warn "部署验证返回 HTTP ${HTTP_CODE},请手动检查"
fi
echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} 花信 ${VERSION} 部署完成!${NC}"
echo -e "${GREEN} https://${REMOTE_HOST}/huaxin/${NC}"
echo -e "${GREEN}========================================${NC}"