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.

246 lines
5.5 KiB

# 期货股票数据统一平台
> 基于 FastAPI + Vue 3 + TimescaleDB 的专业 K 线数据与实时行情服务平台
## 项目简介
本项目是一个统一的期货、股票数据服务平台,提供:
- 📊 **K 线数据查询** - 支持多周期历史 K 线数据
- 📈 **实时行情推送** - WebSocket 实时数据推送
- 🔔 **价格告警** - 灵活的价格条件告警
- 📱 **数据订阅** - 个性化数据订阅管理
- 🔐 **用户认证** - JWT 令牌认证 + API Key
## 技术栈
### 后端
- **框架**: FastAPI 0.109+
- **数据库**: TimescaleDB (时序数据) + SQLite (配置数据)
- **缓存**: Redis 7.2+
- **认证**: JWT (PyJWT)
- **异步**: asyncio + uvicorn
### 前端
- **框架**: Vue 3 + Vite
- **UI 组件**: Element Plus
- **图表**: ECharts 5.4+
- **状态管理**: Pinia
- **路由**: Vue Router 4
### 部署
- **容器化**: Docker + Docker Compose
- **反向代理**: Nginx
## 快速开始
### 1. 克隆项目
```bash
cd 20260330_kline_system
```
### 2. 配置环境变量
```bash
cp .env.example .env
# 编辑 .env 文件,修改必要配置
```
### 3. 一键部署
```bash
# 初始化数据库并启动所有服务
chmod +x deploy/init_db.sh
./deploy/init_db.sh
```
### 4. 访问系统
- **前端页面**: http://localhost
- **API 文档**: http://localhost:8000/docs
- **健康检查**: http://localhost:8000/health
**默认管理员账号**:
- 用户名:`admin`
- 密码:`admin123` (首次登录请修改)
## 项目结构
```
20260330_kline_system/
├── backend/ # 后端服务
│ ├── app/
│ │ ├── api/v1/ # API 路由
│ │ ├── db/ # 数据库配置
│ │ ├── middleware/ # 中间件
│ │ ├── models/ # 数据模型
│ │ ├── schemas/ # 数据验证
│ │ ├── services/ # 业务服务
│ │ ├── config.py # 配置文件
│ │ └── main.py # 应用入口
│ ├── tests/ # 测试代码
│ ├── requirements.txt # Python 依赖
│ └── Dockerfile
├── frontend/ # 前端服务
│ ├── src/
│ │ ├── api/ # API 封装
│ │ ├── layouts/ # 布局组件
│ │ ├── router/ # 路由配置
│ │ ├── stores/ # 状态管理
│ │ ├── views/ # 页面组件
│ │ ├── App.vue
│ │ └── main.js
│ ├── package.json
│ └── Dockerfile
├── deploy/ # 部署脚本
│ ├── init_db.sh # 数据库初始化
│ └── nginx.conf # Nginx 配置
├── docker-compose.yml # Docker 编排
└── .env.example # 环境变量示例
```
## API 接口
### 认证接口
- `POST /api/v1/auth/login` - 用户登录
- `POST /api/v1/auth/refresh` - 刷新令牌
- `GET /api/v1/auth/me` - 获取当前用户
- `POST /api/v1/auth/api-key` - 创建 API Key
### K 线数据
- `GET /api/v1/kline/data` - 获取 K 线数据
- `GET /api/v1/kline/latest` - 获取最新 K 线
- `GET /api/v1/kline/symbols` - 获取品种列表
- `GET /api/v1/kline/periods` - 获取周期列表
### 实时行情
- `WS /api/v1/realtime/ws` - WebSocket 实时推送
- `GET /api/v1/realtime/quote` - 获取最新行情
### 告警管理
- `POST /api/v1/alert` - 创建告警
- `GET /api/v1/alert` - 获取告警列表
- `DELETE /api/v1/alert/{id}` - 删除告警
### 数据订阅
- `POST /api/v1/subscription` - 创建订阅
- `GET /api/v1/subscription` - 获取订阅列表
- `DELETE /api/v1/subscription/{id}` - 取消订阅
## 开发指南
### 后端开发
```bash
cd backend
# 安装依赖
pip install -r requirements.txt
# 本地运行
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
# 运行测试
pytest tests/ -v
```
### 前端开发
```bash
cd frontend
# 安装依赖
npm install
# 开发模式
npm run dev
# 构建生产版本
npm run build
```
## 运维命令
```bash
# 查看所有服务状态
docker-compose ps
# 查看服务日志
docker-compose logs -f backend
docker-compose logs -f frontend
# 重启服务
docker-compose restart backend
# 停止所有服务
docker-compose down
# 停止并删除数据卷
docker-compose down -v
```
## 系统要求
- Docker 24+
- Docker Compose 2.0+
- 内存:至少 4GB
- 磁盘:至少 10GB
## 安全建议
1. **修改默认密钥**: 生产环境务必修改 `SECRET_KEY`
2. **修改默认密码**: 首次登录后立即修改管理员密码
3. **启用 HTTPS**: 生产环境使用 HTTPS 加密传输
4. **限制 API 访问**: 配置防火墙规则,限制外部访问
5. **定期备份**: 定期备份数据库数据
## 性能优化
1. **数据库索引**: 已为常用查询字段创建索引
2. **数据压缩**: TimescaleDB 自动压缩历史数据
3. **缓存策略**: Redis 缓存热点数据
4. **限流保护**: API 限流防止恶意请求
## 故障排查
### 后端无法启动
```bash
# 查看后端日志
docker-compose logs backend
# 检查数据库连接
docker exec kline_timescaledb psql -U postgres -d kline_data -c "SELECT 1"
```
### 前端无法访问
```bash
# 查看前端日志
docker-compose logs frontend
# 检查 Nginx 配置
docker exec kline_nginx nginx -t
```
### 数据库连接失败
```bash
# 重启数据库
docker-compose restart timescaledb
# 等待数据库就绪
sleep 10
```
## 许可证
MIT License
## 联系方式
如有问题或建议,请提交 Issue 或联系开发团队。
---
**版本**: v1.0.0
**更新日期**: 2026-04-02