|
@@ -0,0 +1,149 @@
|
|
|
|
|
+#!/bin/bash
|
|
|
|
|
+# ============================================
|
|
|
|
|
+# 一键部署脚本 (Linux)
|
|
|
|
|
+# 用于服务器环境部署前后端
|
|
|
|
|
+# ============================================
|
|
|
|
|
+
|
|
|
|
|
+set -e
|
|
|
|
|
+
|
|
|
|
|
+# 颜色定义
|
|
|
|
|
+RED='\033[0;31m'
|
|
|
|
|
+GREEN='\033[0;32m'
|
|
|
|
|
+YELLOW='\033[1;33m'
|
|
|
|
|
+NC='\033[0m'
|
|
|
|
|
+
|
|
|
|
|
+# 配置变量(根据实际情况修改)
|
|
|
|
|
+FRONTEND_DEPLOY_DIR="/var/www/lq_label" # 前端部署目录(Nginx root)
|
|
|
|
|
+GIT_BRANCH="main" # Git 分支
|
|
|
|
|
+
|
|
|
|
|
+echo -e "${GREEN}============================================${NC}"
|
|
|
|
|
+echo -e "${GREEN} LQ Label 一键部署脚本${NC}"
|
|
|
|
|
+echo -e "${GREEN}============================================${NC}"
|
|
|
|
|
+echo
|
|
|
|
|
+
|
|
|
|
|
+# 获取脚本所在目录
|
|
|
|
|
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
|
+cd "$SCRIPT_DIR"
|
|
|
|
|
+
|
|
|
|
|
+# ============================================
|
|
|
|
|
+# 1. 拉取最新代码
|
|
|
|
|
+# ============================================
|
|
|
|
|
+echo -e "${YELLOW}[1/4] 拉取最新代码...${NC}"
|
|
|
|
|
+
|
|
|
|
|
+if [ -d ".git" ]; then
|
|
|
|
|
+ git fetch origin
|
|
|
|
|
+ git checkout $GIT_BRANCH
|
|
|
|
|
+ git pull origin $GIT_BRANCH
|
|
|
|
|
+ echo -e "${GREEN}代码更新完成${NC}"
|
|
|
|
|
+else
|
|
|
|
|
+ echo -e "${RED}错误: 当前目录不是 Git 仓库${NC}"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+# ============================================
|
|
|
|
|
+# 2. 部署后端 (Docker)
|
|
|
|
|
+# ============================================
|
|
|
|
|
+echo
|
|
|
|
|
+echo -e "${YELLOW}[2/4] 部署后端服务...${NC}"
|
|
|
|
|
+
|
|
|
|
|
+cd backend
|
|
|
|
|
+
|
|
|
|
|
+# 检查配置文件
|
|
|
|
|
+if [ ! -f "config.yaml" ]; then
|
|
|
|
|
+ echo -e "${YELLOW}未找到 config.yaml,从模板创建...${NC}"
|
|
|
|
|
+ cp config.docker.yaml config.yaml
|
|
|
|
|
+ echo -e "${RED}请编辑 backend/config.yaml 配置数据库和密钥后重新运行${NC}"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+# 创建数据目录
|
|
|
|
|
+mkdir -p data
|
|
|
|
|
+
|
|
|
|
|
+# 构建并启动 Docker 容器
|
|
|
|
|
+echo "构建 Docker 镜像..."
|
|
|
|
|
+docker build -t lq-label-backend:latest .
|
|
|
|
|
+
|
|
|
|
|
+echo "启动后端服务..."
|
|
|
|
|
+docker compose down 2>/dev/null || true
|
|
|
|
|
+docker compose up -d
|
|
|
|
|
+
|
|
|
|
|
+# 等待服务启动
|
|
|
|
|
+echo "等待服务启动..."
|
|
|
|
|
+sleep 5
|
|
|
|
|
+
|
|
|
|
|
+# 健康检查
|
|
|
|
|
+if curl -s http://localhost:8000/health > /dev/null; then
|
|
|
|
|
+ echo -e "${GREEN}后端服务启动成功${NC}"
|
|
|
|
|
+else
|
|
|
|
|
+ echo -e "${RED}后端服务启动失败,请检查日志: docker compose logs${NC}"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+cd "$SCRIPT_DIR"
|
|
|
|
|
+
|
|
|
|
|
+# ============================================
|
|
|
|
|
+# 3. 部署前端
|
|
|
|
|
+# ============================================
|
|
|
|
|
+echo
|
|
|
|
|
+echo -e "${YELLOW}[3/4] 部署前端...${NC}"
|
|
|
|
|
+
|
|
|
|
|
+# 检查前端包是否存在
|
|
|
|
|
+if [ ! -f "lq_label_dist.tar.gz" ]; then
|
|
|
|
|
+ echo -e "${RED}错误: 未找到 lq_label_dist.tar.gz${NC}"
|
|
|
|
|
+ echo -e "${YELLOW}请先在 Windows 开发环境运行 build.bat 构建前端${NC}"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+# 创建部署目录
|
|
|
|
|
+sudo mkdir -p "$FRONTEND_DEPLOY_DIR"
|
|
|
|
|
+
|
|
|
|
|
+# 备份旧版本(可选)
|
|
|
|
|
+if [ -d "$FRONTEND_DEPLOY_DIR" ] && [ "$(ls -A $FRONTEND_DEPLOY_DIR 2>/dev/null)" ]; then
|
|
|
|
|
+ BACKUP_DIR="${FRONTEND_DEPLOY_DIR}_backup_$(date +%Y%m%d_%H%M%S)"
|
|
|
|
|
+ echo "备份旧版本到 $BACKUP_DIR"
|
|
|
|
|
+ sudo mv "$FRONTEND_DEPLOY_DIR" "$BACKUP_DIR"
|
|
|
|
|
+ sudo mkdir -p "$FRONTEND_DEPLOY_DIR"
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+# 解压前端文件
|
|
|
|
|
+echo "解压前端文件到 $FRONTEND_DEPLOY_DIR"
|
|
|
|
|
+sudo tar -xzvf lq_label_dist.tar.gz -C "$FRONTEND_DEPLOY_DIR" --strip-components=1
|
|
|
|
|
+
|
|
|
|
|
+# 设置权限
|
|
|
|
|
+sudo chown -R www-data:www-data "$FRONTEND_DEPLOY_DIR" 2>/dev/null || \
|
|
|
|
|
+sudo chown -R nginx:nginx "$FRONTEND_DEPLOY_DIR" 2>/dev/null || \
|
|
|
|
|
+echo "请手动设置目录权限"
|
|
|
|
|
+
|
|
|
|
|
+echo -e "${GREEN}前端部署完成${NC}"
|
|
|
|
|
+
|
|
|
|
|
+# ============================================
|
|
|
|
|
+# 4. 重载 Nginx
|
|
|
|
|
+# ============================================
|
|
|
|
|
+echo
|
|
|
|
|
+echo -e "${YELLOW}[4/4] 重载 Nginx 配置...${NC}"
|
|
|
|
|
+
|
|
|
|
|
+# 检查 Nginx 配置
|
|
|
|
|
+if sudo nginx -t; then
|
|
|
|
|
+ sudo systemctl reload nginx || sudo nginx -s reload
|
|
|
|
|
+ echo -e "${GREEN}Nginx 重载完成${NC}"
|
|
|
|
|
+else
|
|
|
|
|
+ echo -e "${RED}Nginx 配置错误,请检查配置文件${NC}"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+# ============================================
|
|
|
|
|
+# 完成
|
|
|
|
|
+# ============================================
|
|
|
|
|
+echo
|
|
|
|
|
+echo -e "${GREEN}============================================${NC}"
|
|
|
|
|
+echo -e "${GREEN} 部署完成!${NC}"
|
|
|
|
|
+echo -e "${GREEN}============================================${NC}"
|
|
|
|
|
+echo
|
|
|
|
|
+echo "前端地址: http://localhost (根据 Nginx 配置)"
|
|
|
|
|
+echo "后端地址: http://localhost:8000"
|
|
|
|
|
+echo "API 文档: http://localhost:8000/docs"
|
|
|
|
|
+echo
|
|
|
|
|
+echo -e "${YELLOW}常用命令:${NC}"
|
|
|
|
|
+echo " 查看后端日志: cd backend && docker compose logs -f"
|
|
|
|
|
+echo " 重启后端: cd backend && docker compose restart"
|
|
|
|
|
+echo " 停止后端: cd backend && docker compose down"
|