|
|
# 期货股票数据统一平台 - 部署指南
|
|
|
|
|
|
## 系统要求
|
|
|
|
|
|
- Docker 20.10+
|
|
|
- Docker Compose 2.0+
|
|
|
- 内存:至少 4GB
|
|
|
- 磁盘:至少 10GB
|
|
|
|
|
|
## 快速部署
|
|
|
|
|
|
### 1. 克隆项目
|
|
|
|
|
|
```bash
|
|
|
cd 20260330_kline_system
|
|
|
```
|
|
|
|
|
|
### 2. 配置环境变量
|
|
|
|
|
|
```bash
|
|
|
cp .env.example .env
|
|
|
# 编辑 .env 文件,修改必要配置
|
|
|
# 生产环境务必修改 SECRET_KEY
|
|
|
```
|
|
|
|
|
|
### 3. 初始化数据库并启动服务
|
|
|
|
|
|
```bash
|
|
|
# 赋予执行权限
|
|
|
chmod +x deploy/init_db.sh
|
|
|
|
|
|
# 执行初始化脚本
|
|
|
./deploy/init_db.sh
|
|
|
```
|
|
|
|
|
|
该脚本会:
|
|
|
1. 启动 TimescaleDB 和 Redis 容器
|
|
|
2. 初始化数据库表结构
|
|
|
3. 创建默认管理员账号
|
|
|
4. 启动后端和前端服务
|
|
|
|
|
|
### 4. 验证部署
|
|
|
|
|
|
```bash
|
|
|
# 检查容器状态
|
|
|
docker-compose ps
|
|
|
|
|
|
# 查看后端日志
|
|
|
docker-compose logs backend
|
|
|
|
|
|
# 查看前端日志
|
|
|
docker-compose logs frontend
|
|
|
```
|
|
|
|
|
|
### 5. 访问系统
|
|
|
|
|
|
- **前端页面**: http://localhost
|
|
|
- **API 文档**: http://localhost:8000/docs
|
|
|
- **健康检查**: http://localhost:8000/health
|
|
|
|
|
|
**默认管理员账号**:
|
|
|
- 用户名:`admin`
|
|
|
- 密码:`admin123`
|
|
|
|
|
|
⚠️ **首次登录后请立即修改密码!**
|
|
|
|
|
|
## 服务说明
|
|
|
|
|
|
### 容器列表
|
|
|
|
|
|
| 服务名 | 端口 | 说明 |
|
|
|
|--------|------|------|
|
|
|
| timescaledb | 5432 | TimescaleDB 时序数据库 |
|
|
|
| redis | 6379 | Redis 缓存 |
|
|
|
| backend | 8000 | FastAPI 后端服务 |
|
|
|
| frontend | 80 | Nginx 前端服务 |
|
|
|
|
|
|
### 数据持久化
|
|
|
|
|
|
数据通过 Docker volumes 持久化:
|
|
|
|
|
|
- `timescaledb_data`: TimescaleDB 数据
|
|
|
- `redis_data`: Redis 数据
|
|
|
- `backend_data`: 后端 SQLite 配置数据
|
|
|
|
|
|
## 开发环境部署
|
|
|
|
|
|
### 后端开发
|
|
|
|
|
|
```bash
|
|
|
cd backend
|
|
|
|
|
|
# 创建虚拟环境
|
|
|
python -m venv venv
|
|
|
source venv/bin/activate # Windows: venv\Scripts\activate
|
|
|
|
|
|
# 安装依赖
|
|
|
pip install -r requirements.txt
|
|
|
|
|
|
# 运行开发服务器
|
|
|
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
|
|
```
|
|
|
|
|
|
### 前端开发
|
|
|
|
|
|
```bash
|
|
|
cd frontend
|
|
|
|
|
|
# 安装依赖
|
|
|
npm install
|
|
|
|
|
|
# 运行开发服务器
|
|
|
npm run dev
|
|
|
```
|
|
|
|
|
|
## 生产环境部署
|
|
|
|
|
|
### 1. 修改配置
|
|
|
|
|
|
编辑 `.env` 文件:
|
|
|
|
|
|
```bash
|
|
|
# 生产环境配置
|
|
|
DEBUG=false
|
|
|
SECRET_KEY=<生成一个强随机密钥>
|
|
|
LOG_LEVEL=WARNING
|
|
|
|
|
|
# 数据库配置(如使用外部数据库)
|
|
|
TIMESCALE_DB_URL=postgresql://user:password@db-host:5432/kline_data
|
|
|
```
|
|
|
|
|
|
### 2. 生成安全密钥
|
|
|
|
|
|
```bash
|
|
|
# 使用 Python 生成
|
|
|
python -c "import secrets; print(secrets.token_urlsafe(32))"
|
|
|
|
|
|
# 或使用 OpenSSL
|
|
|
openssl rand -hex 32
|
|
|
```
|
|
|
|
|
|
### 3. 启动服务
|
|
|
|
|
|
```bash
|
|
|
# 生产环境启动(后台运行)
|
|
|
docker-compose up -d
|
|
|
|
|
|
# 查看日志
|
|
|
docker-compose logs -f
|
|
|
```
|
|
|
|
|
|
### 4. 配置 Nginx(可选)
|
|
|
|
|
|
如果使用外部 Nginx 反向代理:
|
|
|
|
|
|
```nginx
|
|
|
server {
|
|
|
listen 80;
|
|
|
server_name your-domain.com;
|
|
|
|
|
|
location / {
|
|
|
proxy_pass http://localhost:80;
|
|
|
proxy_set_header Host $host;
|
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
|
}
|
|
|
|
|
|
location /api/ {
|
|
|
proxy_pass http://localhost:8000/api/;
|
|
|
proxy_set_header Host $host;
|
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
|
|
|
|
# WebSocket 支持
|
|
|
proxy_http_version 1.1;
|
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
|
proxy_set_header Connection "upgrade";
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
## 常用命令
|
|
|
|
|
|
### 查看服务状态
|
|
|
|
|
|
```bash
|
|
|
docker-compose ps
|
|
|
```
|
|
|
|
|
|
### 重启服务
|
|
|
|
|
|
```bash
|
|
|
docker-compose restart
|
|
|
```
|
|
|
|
|
|
### 停止服务
|
|
|
|
|
|
```bash
|
|
|
docker-compose down
|
|
|
```
|
|
|
|
|
|
### 停止并删除数据
|
|
|
|
|
|
```bash
|
|
|
# ⚠️ 警告:这将删除所有数据!
|
|
|
docker-compose down -v
|
|
|
```
|
|
|
|
|
|
### 查看日志
|
|
|
|
|
|
```bash
|
|
|
# 查看所有服务日志
|
|
|
docker-compose logs
|
|
|
|
|
|
# 查看特定服务日志
|
|
|
docker-compose logs backend
|
|
|
|
|
|
# 实时查看日志
|
|
|
docker-compose logs -f backend
|
|
|
```
|
|
|
|
|
|
### 进入容器
|
|
|
|
|
|
```bash
|
|
|
# 进入后端容器
|
|
|
docker-compose exec backend bash
|
|
|
|
|
|
# 进入数据库容器
|
|
|
docker-compose exec timescaledb psql -U postgres -d kline_data
|
|
|
```
|
|
|
|
|
|
### 备份数据
|
|
|
|
|
|
```bash
|
|
|
# 备份 TimescaleDB
|
|
|
docker-compose exec timescaledb pg_dump -U postgres kline_data > backup.sql
|
|
|
|
|
|
# 备份 SQLite
|
|
|
docker cp kline_backend:/app/data/config.db ./config.db.backup
|
|
|
```
|
|
|
|
|
|
### 恢复数据
|
|
|
|
|
|
```bash
|
|
|
# 恢复 TimescaleDB
|
|
|
cat backup.sql | docker-compose exec -T timescaledb psql -U postgres -d kline_data
|
|
|
```
|
|
|
|
|
|
## 监控与维护
|
|
|
|
|
|
### 健康检查
|
|
|
|
|
|
```bash
|
|
|
# 检查后端健康
|
|
|
curl http://localhost:8000/health
|
|
|
|
|
|
# 检查数据库连接
|
|
|
docker-compose exec timescaledb pg_isready -U postgres
|
|
|
```
|
|
|
|
|
|
### 数据库维护
|
|
|
|
|
|
```bash
|
|
|
# 查看数据库大小
|
|
|
docker-compose exec timescaledb psql -U postgres -d kline_data -c "SELECT pg_size_pretty(pg_database_size('kline_data'));"
|
|
|
|
|
|
# 清理旧数据(示例:删除 30 天前的数据)
|
|
|
docker-compose exec timescaledb psql -U postgres -d kline_data -c "DELETE FROM kline_data WHERE time < NOW() - INTERVAL '30 days';"
|
|
|
```
|
|
|
|
|
|
### 日志轮转
|
|
|
|
|
|
配置 Docker 日志轮转(在 docker-compose.yml 中添加):
|
|
|
|
|
|
```yaml
|
|
|
services:
|
|
|
backend:
|
|
|
logging:
|
|
|
driver: "json-file"
|
|
|
options:
|
|
|
max-size: "10m"
|
|
|
max-file: "3"
|
|
|
```
|
|
|
|
|
|
## 故障排查
|
|
|
|
|
|
### 后端无法启动
|
|
|
|
|
|
```bash
|
|
|
# 查看后端日志
|
|
|
docker-compose logs backend
|
|
|
|
|
|
# 检查数据库连接
|
|
|
docker-compose exec backend python -c "from app.db.init_db import timescale_engine; print(timescale_engine.connect())"
|
|
|
```
|
|
|
|
|
|
### 前端无法访问
|
|
|
|
|
|
```bash
|
|
|
# 检查前端容器状态
|
|
|
docker-compose ps frontend
|
|
|
|
|
|
# 查看前端日志
|
|
|
docker-compose logs frontend
|
|
|
|
|
|
# 检查 Nginx 配置
|
|
|
docker-compose exec frontend nginx -t
|
|
|
```
|
|
|
|
|
|
### 数据库连接失败
|
|
|
|
|
|
```bash
|
|
|
# 检查数据库容器
|
|
|
docker-compose ps timescaledb
|
|
|
|
|
|
# 测试数据库连接
|
|
|
docker-compose exec timescaledb pg_isready -U postgres
|
|
|
```
|
|
|
|
|
|
### WebSocket 连接失败
|
|
|
|
|
|
1. 检查 Nginx 配置中的 WebSocket 支持
|
|
|
2. 确保防火墙允许 WebSocket 连接
|
|
|
3. 查看浏览器控制台错误信息
|
|
|
|
|
|
## 安全建议
|
|
|
|
|
|
1. **修改默认密码**:首次登录后立即修改 admin 密码
|
|
|
2. **使用 HTTPS**:生产环境配置 SSL 证书
|
|
|
3. **限制访问**:配置防火墙只允许必要端口
|
|
|
4. **定期更新**:及时更新 Docker 镜像和依赖
|
|
|
5. **备份数据**:定期备份数据库
|
|
|
6. **监控日志**:设置日志监控和告警
|
|
|
|
|
|
## 技术支持
|
|
|
|
|
|
如有问题,请查看:
|
|
|
- 项目 README.md
|
|
|
- 后端 API 文档:http://localhost:8000/docs
|
|
|
- 开发日志:DEVELOPMENT_LOG.md
|