|
|
# 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
|
|
|
```
|