diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..a9b7e74 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,75 @@ +#!/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}"