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.

296 lines
5.7 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.

# A股智投分析平台 - Docker 部署指南
## 📋 概述
本项目提供完整的 Docker 化部署方案,包含:
- **MySQL 8.0** - 带分区表的数据库
- **Redis 7** - 缓存服务
- **后端应用** - Node.js + Express + TypeScript
- **AKShare** - 可选的数据源服务
## 🚀 快速开始
### 方式一:一键启动(推荐)
**Linux/Mac:**
```bash
./docker-start.sh
```
**Windows:**
```bash
docker-start.bat
```
### 方式二:手动启动
```bash
# 1. 进入后端目录
cd app/backend
# 2. 启动服务
docker-compose up --build -d
# 3. 查看日志
docker-compose logs -f app
```
## 📁 文件结构
```
app/backend/
├── docker-compose.yml # Docker 编排配置
├── Dockerfile # 后端应用镜像
├── .env.docker # Docker 环境变量
├── .dockerignore # Docker 忽略文件
├── docker-start.sh # Linux/Mac 启动脚本
├── docker-start.bat # Windows 启动脚本
├── init-scripts/ # 数据库初始化脚本
│ ├── 01-init-database.sql # 创建表结构(含分区)
│ └── 02-seed-data.sql # 种子数据
└── DOCKER_README.md # 本文档
```
## 🔧 配置说明
### 环境变量 (`.env.docker`)
| 变量名 | 默认值 | 说明 |
|-------|-------|------|
| `DATABASE_URL` | mysql://root:1qazse42W3@mysql:3306/aguzhitou | MySQL 连接 |
| `REDIS_URL` | redis://redis:6379 | Redis 连接 |
| `JWT_SECRET` | aguzhitou-docker... | JWT 密钥 |
| `PORT` | 3000 | 服务端口 |
### 数据库分区设计
| 表名 | 分区字段 | 分区范围 | 分区数 |
|------|---------|---------|-------|
| `stock_quotes_history` | quote_time | 2024-01 ~ 2026-12 | 37 |
| `sector_quotes` | quote_time | 2024-01 ~ 2026-12 | 37 |
| `high_low_stocks` | date | 2024-01 ~ 2026-12 | 37 |
| `momentum_stocks` | date | 2024-01 ~ 2026-12 | 37 |
## 📊 服务访问
启动后可通过以下地址访问:
| 服务 | 地址 | 说明 |
|------|------|------|
| API 接口 | http://localhost:3000/api/v1 | 后端 API |
| 健康检查 | http://localhost:3000/api/v1/health | 服务状态 |
| MySQL | localhost:3306 | 数据库 |
| Redis | localhost:6379 | 缓存 |
### 默认账号
- **MySQL**: root / 1qazse42W3
## 🔍 常用命令
### 查看状态
```bash
# 查看所有容器状态
docker-compose ps
# 查看资源使用
docker-compose top
```
### 查看日志
```bash
# 查看所有服务日志
docker-compose logs
# 查看后端应用日志(实时)
docker-compose logs -f app
# 查看 MySQL 日志
docker-compose logs -f mysql
# 查看 Redis 日志
docker-compose logs -f redis
```
### 服务管理
```bash
# 停止服务
docker-compose stop
# 启动服务
docker-compose start
# 重启服务
docker-compose restart
# 停止并删除容器(保留数据)
docker-compose down
# 完全重置(删除容器和数据卷)
docker-compose down -v
```
### 数据库操作
```bash
# 进入 MySQL 容器
mysql -h localhost -P 3306 -u root -p1qazse42W3
# 备份数据库
docker-compose exec mysql mysqldump -u root -p1qazse42W3 aguzhitou > backup.sql
# 恢复数据库
docker-compose exec -T mysql mysql -u root -p1qazse42W3 aguzhitou < backup.sql
```
## 🗄️ 数据持久化
数据通过 Docker Volumes 持久化:
| 卷名 | 用途 | 位置 |
|------|------|------|
| `mysql_data` | MySQL 数据 | /var/lib/mysql |
| `redis_data` | Redis 数据 | /data |
| `./logs` | 应用日志 | /app/logs |
## 🛠️ 自定义配置
### 修改数据库密码
1. 编辑 `docker-compose.yml`
```yaml
mysql:
environment:
MYSQL_ROOT_PASSWORD: your-new-password
```
2. 编辑 `.env.docker`
```env
DATABASE_URL=mysql://root:your-new-password@mysql:3306/aguzhitou
```
3. 重启服务:
```bash
docker-compose down -v
docker-compose up --build -d
```
### 修改服务端口
编辑 `docker-compose.yml`
```yaml
app:
ports:
- "8080:3000" # 改为 8080 端口
```
### 添加 AKShare 数据源
```bash
docker-compose --profile with-akshare up -d
```
## 📈 性能优化
### MySQL 配置
已针对生产环境优化:
- `innodb_buffer_pool_size=512M`
- `max_connections=200`
- 字符集utf8mb4
### Redis 配置
使用 Alpine 版本,轻量级:
- 数据持久化
- 自动清理策略
## 🔒 安全配置
### 生产环境建议
1. **修改默认密码**
- MySQL root 密码
- JWT Secret
2. **使用 HTTPS**
- 配置 Nginx 反向代理
- 使用 Let's Encrypt 证书
3. **限制端口访问**
- 仅开放必要端口
- 使用防火墙规则
## 🐛 故障排查
### 问题1数据库连接失败
**现象**
```
Error: Can't reach database server
```
**解决方案**
```bash
# 检查 MySQL 容器状态
docker-compose ps mysql
# 查看 MySQL 日志
docker-compose logs mysql
# 手动测试连接
docker-compose exec mysql mysql -u root -p1qazse42W3 -e "SHOW DATABASES;"
```
### 问题2端口被占用
**现象**
```
Bind for 0.0.0.0:3306 failed: port is already allocated
```
**解决方案**
```bash
# 查找占用进程
sudo lsof -i :3306
# 停止占用进程或修改端口
# 编辑 docker-compose.yml 修改端口映射
```
### 问题3内存不足
**现象**
```
Error: Out of memory
```
**解决方案**
```bash
# 查看内存使用
docker stats
# 减少 MySQL 内存占用
# 编辑 docker-compose.yml 调整 innodb_buffer_pool_size
```
## 📝 更新记录
### v1.0.0
- ✨ 初始版本
- ✨ MySQL 8.0 带分区表
- ✨ Redis 7 缓存
- ✨ 自动初始化脚本
- ✨ 健康检查
## 📞 技术支持
如有问题,请检查:
1. Docker 和 Docker Compose 版本
2. 端口占用情况
3. 日志文件中的错误信息
4. 系统资源(内存、磁盘)
## 📄 许可证
MIT License