--- allowed-tools: Bash description: 'Command: deploy-local (imported from Claude Code)' name: cmd-deploy-local --- ## 启动本机开发环境 在 Windows 上直接运行 `go run main.go`,数据库使用 WSL 中的 MySQL 和 Redis。 ### 环境信息 | 项目 | 连接信息 | |------|---------| | MySQL | `localhost:33306` root/Lanqi123456 db:new-api | | Redis | `localhost:36379` | | 后端 | `localhost:3000` | | 前端 | `localhost:5173`(dev server) | | 管理员 | root / 12345678 | ### 参数 用户可能在 `$ARGUMENTS` 中传入: - (空) — 启动全部(MySQL/Redis + 前端 + 后端) - `--backend-only` — 只启动后端(MySQL/Redis + 后端) - `--frontend-only` — 只启动前端 dev server - `--stop` — 停止所有服务(后端进程 + 前端进程) ### 执行步骤 **步骤 1:确保 WSL 中 MySQL 和 Redis 运行** ```bash wsl -- bash -c "cd /root/new-api-dev && docker compose up -d" ``` 等待 MySQL 就绪(最多 30 秒): ```bash until wsl -- bash -c "mysql -h 127.0.0.1 -P 3306 -u root -pLanqi123456 -e 'SELECT 1'" 2>/dev/null; do sleep 2; done ``` **步骤 2:杀掉旧进程(如果端口被占用)** 检查并杀掉占用 3000 端口的进程: ```bash netstat -ano | grep ":3000 " | grep LISTENING | awk '{print $5}' | sort -u | while read pid; do taskkill //PID $pid //F 2>/dev/null; done ``` 检查并杀掉占用 5173 端口的进程(如果需要启动前端): ```bash netstat -ano | grep ":5173 " | grep LISTENING | awk '{print $5}' | sort -u | while read pid; do taskkill //PID $pid //F 2>/dev/null; done ``` **步骤 3:启动服务** 前端(后台,仅在非 `--backend-only` 时): ```bash cd web && bun run dev ``` 后端(后台,仅在非 `--frontend-only` 时),带环境变量: ```bash export SQL_DSN="root:Lanqi123456@tcp(localhost:33306)/new-api" export REDIS_CONN_STRING="redis://localhost:36379" export SESSION_SECRET="dev-secret-do-not-use-in-prod" export SESSION_NAME="session_dev" export DEBUG=1 export ERROR_LOG_ENABLED=true export BATCH_UPDATE_ENABLED=true export TZ=Asia/Shanghai go run main.go ``` **步骤 4:等待就绪并验证** 等待后端就绪: ```bash until curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/api/status | grep -q "200"; do sleep 2; done ``` **步骤 5:报告状态** 向用户报告: - 各服务状态(MySQL/Redis/后端/前端) - 访问地址 - 如果有服务启动失败,报告具体错误 ### 停止服务(`--stop`) 杀掉 3000 和 5173 端口上的进程即可。MySQL/Redis 容器保持运行(数据持久化)。 ### 要求 - 所有服务使用 `run_in_background` 启动 - 等待后端就绪后再报告 - 如果编译失败,报告具体错误 - 启动完成后提示用户可以使用 `curl` 或浏览器访问