You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

317 lines
7.5 KiB

# A股智投分析平台 - 本地调试指南
## 概述
本文档介绍如何在**宿主机**上调试前后端服务,仅将**数据库服务**MySQL、Redis运行在 Docker 中。
## 架构示意图
```
┌─────────────────────────────────────────────────────────────┐
│ 宿主机 (Host) │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 前端 (Vite) │ │ 后端 (Node.js) │ │
│ │ Port: 5173 │ │ Port: 3000 │ │
│ │ │ │ │ │
│ │ npm run dev │ │ npm run dev │ │
│ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │
│ │ HTTP/WebSocket │ mysql2 / ioredis │
│ │ │ │
│ ┌────────┴──────────────────────┴──────────────────────┐ │
│ │ Docker Network │ │
│ │ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ MySQL │ │ Redis │ │ │
│ │ │ Port 3306 │ │ Port 6379 │ │ │
│ │ └─────────────┘ └─────────────┘ │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
## 环境要求
- **Docker Desktop** (Windows/Mac) 或 **Docker Engine** (Linux)
- **Node.js** >= 20.0.0
- **npm** >= 10.0.0
- **Python** >= 3.9 (可选,用于 AKShare 数据服务)
## 快速开始
### 1. 启动数据库服务
**Windows:**
```powershell
cd app/backend
.\start-db.bat
```
**Linux/Mac:**
```bash
cd app/backend
chmod +x start-db.sh
./start-db.sh
```
**或手动使用 Docker Compose:**
```bash
cd app/backend
docker-compose -f docker-compose.db-only.yml up -d
```
### 2. 配置环境变量
**后端环境变量** (`app/backend/.env`):
```env
# 复制本地调试配置
copy .env.local .env
# 或使用如下配置
PORT=3000
NODE_ENV=development
DATABASE_URL=mysql://root:1qazse42W3@localhost:3306/aguzhitou
REDIS_URL=redis://localhost:6379
JWT_SECRET=aguzhitou-local-dev-secret-key-2024-debug-only
AKSHARE_URL=http://localhost:8000
LOG_LEVEL=debug
```
**前端环境变量** (`app/.env`):
```env
# 复制本地调试配置
copy .env.local .env
# 或使用如下配置
VITE_API_URL=http://localhost:3000/api/v1
VITE_WS_URL=ws://localhost:3000
```
### 3. 启动后端服务
```bash
cd app/backend
# 安装依赖(首次)
npm install
# 生成 Prisma Client
npx prisma generate
# 推送数据库表结构(首次)
npx prisma db push
# 启动开发服务器
npm run dev
```
后端服务将运行在: http://localhost:3000
### 4. 启动前端服务
**新开一个终端窗口:**
```bash
cd app
# 安装依赖(首次)
npm install
# 启动开发服务器
npm run dev
```
前端服务将运行在: http://localhost:5173
### 5. 启动 AKShare 服务(可选)
**新开一个终端窗口:**
```bash
cd app/akshare
# 安装依赖(首次)
pip install -r requirements.txt
# 启动服务
python start.py
# 或
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
```
AKShare 服务将运行在: http://localhost:8000
## 服务地址汇总
| 服务 | 地址 | 说明 |
|------|------|------|
| 前端 | http://localhost:5173 | Vite 开发服务器 |
| 后端 API | http://localhost:3000/api/v1 | Express API |
| WebSocket | ws://localhost:3000 | Socket.IO |
| MySQL | localhost:3306 | Docker 容器 |
| Redis | localhost:6379 | Docker 容器 |
| AKShare | http://localhost:8000 | Python FastAPI |
## 常用命令
### 数据库管理
```bash
# 查看数据库容器状态
docker ps
# 查看数据库日志
docker logs aguzhitou-mysql-local
docker logs aguzhitou-redis-local
# 进入 MySQL 容器
docker exec -it aguzhitou-mysql-local mysql -uroot -p1qazse42W3
# 进入 Redis 容器
docker exec -it aguzhitou-redis-local redis-cli
# 停止数据库
cd app/backend
./stop-db.sh
# 或
docker-compose -f docker-compose.db-only.yml down
# 完全删除数据库(包括数据卷)
docker-compose -f docker-compose.db-only.yml down -v
```
### 后端开发
```bash
cd app/backend
# 查看数据库表结构
npx prisma studio
# 数据库迁移
npx prisma migrate dev --name <迁移名称>
# 重置数据库
npx prisma migrate reset
# 查看日志
tail -f logs/combined-$(date +%Y-%m-%d).log
```
### 前端开发
```bash
cd app
# 构建生产版本
npm run build
# 预览生产构建
npm run preview
```
## 故障排除
### 端口被占用
```bash
# Windows: 查找占用 3306 端口的进程
netstat -ano | findstr :3306
taskkill /PID <进程ID> /F
# Linux/Mac: 查找占用 3306 端口的进程
lsof -i :3306
kill -9 <进程ID>
```
### 数据库连接失败
1. 确认 Docker 数据库已启动:
```bash
docker ps
```
2. 检查 MySQL 健康状态:
```bash
docker exec aguzhitou-mysql-local mysqladmin ping -h localhost -u root -p1qazse42W3
```
3. 检查 `.env` 中的 `DATABASE_URL` 是否使用 `localhost`
### Prisma 连接问题
```bash
# 重新生成 Prisma Client
npx prisma generate
# 验证数据库连接
npx prisma db pull
```
### 清空数据库重新初始化
```bash
# 停止并删除容器和数据卷
cd app/backend
docker-compose -f docker-compose.db-only.yml down -v
# 重新启动数据库
./start-db.sh
# 重新推送表结构
cd app/backend
npx prisma db push
```
## VS Code 调试配置
### 后端调试 (Node.js)
创建 `.vscode/launch.json`:
```json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Backend",
"type": "node",
"request": "launch",
"runtimeExecutable": "npx",
"runtimeArgs": ["tsx", "watch", "src/app.ts"],
"cwd": "${workspaceFolder}/app/backend",
"env": {
"NODE_ENV": "development"
},
"console": "integratedTerminal"
},
{
"name": "Debug Frontend",
"type": "chrome",
"request": "launch",
"url": "http://localhost:5173",
"webRoot": "${workspaceFolder}/app/src"
}
]
}
```
## 注意事项
1. **首次启动**: 数据库初始化需要约 10-20 秒,请耐心等待
2. **数据持久化**: 数据库数据存储在 Docker Volume 中,删除容器不会丢失数据
3. **端口冲突**: 确保本地没有其他服务占用 3306、6379、3000、5173 端口
4. **防火墙**: 确保防火墙允许本地回环地址 (127.0.0.1) 的通信
## 切换到全 Docker 模式
如果需要切换到完整的 Docker 开发环境:
```bash
cd app/backend
# 停止数据库服务
./stop-db.sh
# 启动完整开发环境
docker-compose -f docker-compose.dev.yml up -d
```