LuoChinWen hai 4 semanas
pai
achega
385ff77ee2
Modificáronse 4 ficheiros con 338 adicións e 0 borrados
  1. 104 0
      DEPLOYMENT.md
  2. 85 0
      build.bat
  3. 149 0
      deploy.sh
  4. BIN=BIN
      lq_label_dist.tar.gz

+ 104 - 0
DEPLOYMENT.md

@@ -0,0 +1,104 @@
+# 部署指南
+
+## 快速开始
+
+### Windows 开发环境(构建)
+
+```cmd
+build.bat
+```
+
+执行后会:
+1. 构建前端项目
+2. 打包为 `lq_label_dist.tar.gz`
+3. 提交到 Git
+
+### Linux 服务器(部署)
+
+```bash
+chmod +x deploy.sh
+./deploy.sh
+```
+
+执行后会:
+1. 拉取最新代码
+2. Docker 部署后端
+3. 解压前端到 Nginx 目录
+4. 重载 Nginx
+
+## 部署流程
+
+```
+┌─────────────────┐     ┌─────────────────┐
+│  Windows 开发机  │     │   Linux 服务器   │
+├─────────────────┤     ├─────────────────┤
+│  1. build.bat   │     │  1. git pull    │
+│  2. git push    │ ──► │  2. deploy.sh   │
+└─────────────────┘     └─────────────────┘
+```
+
+## 配置说明
+
+### 1. 修改部署目录
+
+编辑 `deploy.sh` 顶部的配置:
+
+```bash
+FRONTEND_DEPLOY_DIR="/var/www/lq_label"  # 前端目录
+GIT_BRANCH="main"                         # Git 分支
+```
+
+### 2. 后端配置
+
+首次部署前,编辑 `backend/config.yaml`:
+
+```yaml
+jwt:
+  secret_key: "生成一个安全的密钥"
+
+database:
+  type: "mysql"
+  mysql:
+    host: "数据库地址"
+    port: 3306
+    user: "用户名"
+    password: "密码"
+    database: "数据库名"
+```
+
+### 3. Nginx 配置
+
+将 `web/apps/lq_label/nginx.conf` 复制到 Nginx 配置目录:
+
+```bash
+sudo cp web/apps/lq_label/nginx.conf /etc/nginx/sites-available/lq_label
+sudo ln -s /etc/nginx/sites-available/lq_label /etc/nginx/sites-enabled/
+sudo nginx -t
+sudo systemctl reload nginx
+```
+
+## 常用命令
+
+| 操作 | 命令 |
+|------|------|
+| 查看后端日志 | `cd backend && docker compose logs -f` |
+| 重启后端 | `cd backend && docker compose restart` |
+| 停止后端 | `cd backend && docker compose down` |
+| 重新部署 | `./deploy.sh` |
+
+## 故障排查
+
+### 后端启动失败
+
+```bash
+cd backend
+docker compose logs
+```
+
+### 前端 404
+
+检查 Nginx 配置中的 `root` 路径是否正确。
+
+### 数据库连接失败
+
+检查 `backend/config.yaml` 中的数据库配置。

+ 85 - 0
build.bat

@@ -0,0 +1,85 @@
+@echo off
+REM ============================================
+REM 前端构建打包脚本 (Windows)
+REM 用于开发环境构建前端并打包
+REM ============================================
+
+setlocal enabledelayedexpansion
+
+echo ============================================
+echo   LQ Label 前端构建脚本
+echo ============================================
+echo.
+
+REM 检查是否在项目根目录
+if not exist "web\package.json" (
+    echo 错误: 请在项目根目录运行此脚本
+    pause
+    exit /b 1
+)
+
+REM 进入 web 目录
+cd web
+
+REM 检查 node_modules
+if not exist "node_modules" (
+    echo 安装依赖...
+    call yarn install
+    if !ERRORLEVEL! NEQ 0 (
+        echo 依赖安装失败
+        cd ..
+        pause
+        exit /b 1
+    )
+)
+
+echo.
+echo [1/3] 构建前端项目...
+call yarn nx build lq_label --configuration=production
+
+if !ERRORLEVEL! NEQ 0 (
+    echo 构建失败
+    cd ..
+    pause
+    exit /b 1
+)
+
+echo.
+echo [2/3] 打包 dist 目录...
+
+REM 回到根目录
+cd ..
+
+REM 删除旧的 tar 包
+if exist "lq_label_dist.tar.gz" del /f "lq_label_dist.tar.gz"
+
+REM 使用 tar 打包(Windows 10+ 自带 tar)
+tar -czvf lq_label_dist.tar.gz -C web\dist\apps lq_label
+
+if !ERRORLEVEL! NEQ 0 (
+    echo 打包失败,尝试使用 PowerShell...
+    powershell -Command "Compress-Archive -Path 'web\dist\apps\lq_label\*' -DestinationPath 'lq_label_dist.zip' -Force"
+    if !ERRORLEVEL! NEQ 0 (
+        echo 打包失败
+        pause
+        exit /b 1
+    )
+    echo 注意: 生成的是 zip 格式,部署时需要调整解压命令
+)
+
+echo.
+echo [3/3] 完成!
+echo.
+echo ============================================
+echo   构建产物: lq_label_dist.tar.gz
+echo   可以提交到 Git 进行版本管理
+echo ============================================
+echo.
+echo 下一步:
+echo   1. git add lq_label_dist.tar.gz
+echo   2. git commit -m "build: update frontend dist"
+echo   3. git push
+echo   4. 在服务器上运行 deploy.sh
+echo.
+
+pause

+ 149 - 0
deploy.sh

@@ -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"

BIN=BIN
lq_label_dist.tar.gz