From 636ac24e70a716503f02d48c3a5b64abea7f071a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=88=BD=E5=93=92=E5=93=92?= Date: Thu, 19 Mar 2026 00:56:19 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=B8=85=E7=90=86=E5=A4=A7=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=92=8C=E9=83=A8=E7=BD=B2=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/deploy.yaml | 83 ------------------------- docker-compose.dev.yml | 42 +++++++++++++ run-local.sh | 49 +++++++++++++++ start-local.sh | 113 +++++++++++++++++++++++++++++++++++ 4 files changed, 204 insertions(+), 83 deletions(-) delete mode 100644 .gitea/workflows/deploy.yaml create mode 100644 docker-compose.dev.yml create mode 100644 run-local.sh create mode 100755 start-local.sh diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml deleted file mode 100644 index 9ab4477..0000000 --- a/.gitea/workflows/deploy.yaml +++ /dev/null @@ -1,83 +0,0 @@ -name: Deploy to Server -on: [push] - -jobs: - deploy: - runs-on: ubuntu - timeout-minutes: 30 - steps: - - name: Deploy using SSH - # 使用 Gitea 官方镜像源,加速国内访问 - uses: https://gitea.com/actions/appleboy-ssh-action@v1.0.3 - with: - host: 6.6.6.66 - username: quant - password: 123quant-speed - script: | - TARGET_DIR="/home/quant/data/dev/sign-up" - SUDO_PASSWORD="123quant-speed" - REPO_URL="https://gitea.tangledup-ai.com/quant-speed-AI/Scoring-System.git" - - # 1. 检查目录是否存在,不存在则创建并克隆 - echo "===== 检查目标目录: $TARGET_DIR =====" - if [ ! -d "$TARGET_DIR" ]; then - echo "目录不存在,创建目录并克隆仓库..." - mkdir -p $TARGET_DIR - git clone $REPO_URL $TARGET_DIR - fi - - # 2. 切换到目标目录 - echo "===== 切换到目标目录: $TARGET_DIR =====" - cd $TARGET_DIR || { - echo "错误:目录 $TARGET_DIR 不存在!" - exit 1 - } - - # 3. 停止并移除 Docker 容器及镜像 - echo -e "\n===== 停止并清理 Docker =====" - # 强制停止并删除容器,忽略错误 - echo $SUDO_PASSWORD | sudo -S docker compose down --remove-orphans 2>/dev/null || true - # 等待容器完全停止 - sleep 5 - # 清理本项目残留容器(避免影响其他项目) - echo $SUDO_PASSWORD | sudo -S docker ps -aq --filter "name=cywl-scoring" | xargs -r docker rm -f 2>/dev/null || true - - # 4. 拉取 Git 最新代码 - echo -e "\n===== 拉取 Git 代码 =====" - # 尝试拉取,如果失败则强制重置,增强鲁棒性 - if ! git pull; then - echo "警告:Git pull 失败,尝试强制同步远程代码..." - git fetch --all - # 获取当前分支名并重置 - CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) - git reset --hard origin/$CURRENT_BRANCH - git pull - fi - - # 5. 创建/更新 .env 文件 (从本地环境变量注入) - echo -e "\n===== 配置环境变量 =====" - cat > backend/.env < + sh -c "pip install -r requirements.txt && + python manage.py migrate && + python manage.py runserver 0.0.0.0:8876" + extra_hosts: + - "host.docker.internal:host-gateway" + + # 前端服务 - 使用本地 Node + scoring-frontend: + image: node:20-alpine + container_name: cywl-scoring-frontend + working_dir: /app + volumes: + - ./frontend:/app + ports: + - "5173:5173" + environment: + - VITE_API_URL=http://localhost:8876/api + command: > + sh -c "npm install && + npm run dev -- --host 0.0.0.0" diff --git a/run-local.sh b/run-local.sh new file mode 100644 index 0000000..98e5f4a --- /dev/null +++ b/run-local.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# 本地运行脚本(不使用 Docker) + +echo "===== 启动创赢未来评分系统(本地模式)=====" +echo "" + +# 检查端口占用 +echo "检查端口..." +lsof -ti:8876 | xargs kill -9 2>/dev/null || true +lsof -ti:5173 | xargs kill -9 2>/dev/null || true + +# 启动后端 +echo "" +echo "===== 启动后端服务 =====" +cd backend +source venv/bin/activate 2>/dev/null || echo "请确保虚拟环境已创建" +python manage.py migrate --check 2>/dev/null || echo "需要运行: python manage.py migrate" +python manage.py runserver 0.0.0.0:8876 & +BACKEND_PID=$! +echo "后端 PID: $BACKEND_PID" +cd .. + +# 等待后端启动 +sleep 3 + +# 启动前端 +echo "" +echo "===== 启动前端服务 =====" +cd frontend +npm run dev & +FRONTEND_PID=$! +echo "前端 PID: $FRONTEND_PID" +cd .. + +echo "" +echo "===== 服务已启动 =====" +echo "前端: http://localhost:5173" +echo "后端: http://localhost:8876" +echo "API文档: http://localhost:8876/api/docs/" +echo "后台: http://localhost:8876/admin/" +echo "" +echo "按 Ctrl+C 停止服务" + +# 捕获终止信号 + trap "echo ''; echo '正在停止服务...'; kill $BACKEND_PID $FRONTEND_PID 2>/dev/null; exit 0" INT + +# 保持运行 +wait diff --git a/start-local.sh b/start-local.sh new file mode 100755 index 0000000..d0f3612 --- /dev/null +++ b/start-local.sh @@ -0,0 +1,113 @@ +#!/bin/bash + +echo "========================================" +echo " 创赢未来评分系统 - 本地启动脚本" +echo "========================================" +echo "" + +# 函数:检查端口并释放 +check_port() { + local port=$1 + local pid=$(lsof -ti:$port 2>/dev/null) + if [ -n "$pid" ]; then + echo "端口 $port 被占用,正在释放..." + kill -9 $pid 2>/dev/null || true + sleep 1 + fi +} + +# 释放端口 +check_port 8876 +check_port 5173 + +# 检查环境 +echo "✅ 检查环境..." + +# 检查后端虚拟环境 +if [ ! -d "backend/venv" ]; then + echo "❌ 后端虚拟环境不存在,正在创建..." + cd backend + python3 -m venv venv + source venv/bin/activate + pip install -r requirements.txt + cd .. +else + echo "✅ 后端虚拟环境已存在" +fi + +# 检查前端依赖 +if [ ! -d "frontend/node_modules" ]; then + echo "❌ 前端依赖不存在,正在安装..." + cd frontend + npm install + cd .. +else + echo "✅ 前端依赖已存在" +fi + +echo "" +echo "========================================" +echo " 启动服务" +echo "========================================" +echo "" + +# 启动后端 +echo "🚀 启动后端服务 (http://localhost:8876)" +cd backend +source venv/bin/activate +python manage.py migrate 2>/dev/null || echo "迁移可能需要手动执行" +python manage.py runserver 0.0.0.0:8876 > /tmp/backend.log 2>&1 & +BACKEND_PID=$! +echo " 后端 PID: $BACKEND_PID" +echo " 日志: /tmp/backend.log" +cd .. + +# 等待后端启动 +sleep 3 + +# 启动前端 +echo "" +echo "🚀 启动前端服务 (http://localhost:5173)" +cd frontend +npm run dev > /tmp/frontend.log 2>&1 & +FRONTEND_PID=$! +echo " 前端 PID: $FRONTEND_PID" +echo " 日志: /tmp/frontend.log" +cd .. + +echo "" +echo "========================================" +echo " 服务已启动!" +echo "========================================" +echo "" +echo "📱 前端页面: http://localhost:5173" +echo "🔧 后端 API: http://localhost:8876" +echo "📚 API文档: http://localhost:8876/api/docs/" +echo "⚙️ 后台管理: http://localhost:8876/admin/" +echo "" +echo "💡 查看日志:" +echo " tail -f /tmp/backend.log" +echo " tail -f /tmp/frontend.log" +echo "" +echo "🛑 停止服务: 按 Ctrl+C" +echo "" + +# 保存 PID +echo "$BACKEND_PID $FRONTEND_PID" > /tmp/scoring_pids + +# 捕获终止信号 +cleanup() { + echo "" + echo "========================================" + echo " 正在停止服务..." + echo "========================================" + kill $BACKEND_PID $FRONTEND_PID 2>/dev/null || true + sleep 1 + echo "✅ 服务已停止" + rm -f /tmp/scoring_pids + exit 0 +} +trap cleanup INT TERM + +# 等待 +wait