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.

339 lines
6.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 期货股票数据统一平台 - 部署指南
## 系统要求
- 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