76 lines
2.2 KiB
Bash
Executable File
76 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ==========================================
|
|
# 花信 自动部署脚本
|
|
# 用法: ./deploy.sh [环境]
|
|
# 默认部署到生产服务器
|
|
# ==========================================
|
|
set -euo pipefail
|
|
|
|
# ----- 配置(根据需要修改)-----
|
|
REMOTE_HOST="47.102.213.175"
|
|
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}"
|