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.
5.7 KiB
5.7 KiB
A股智投分析平台 - Docker 部署指南
📋 概述
本项目提供完整的 Docker 化部署方案,包含:
- MySQL 8.0 - 带分区表的数据库
- Redis 7 - 缓存服务
- 后端应用 - Node.js + Express + TypeScript
- AKShare - 可选的数据源服务
🚀 快速开始
方式一:一键启动(推荐)
Linux/Mac:
./docker-start.sh
Windows:
docker-start.bat
方式二:手动启动
# 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
🔍 常用命令
查看状态
# 查看所有容器状态
docker-compose ps
# 查看资源使用
docker-compose top
查看日志
# 查看所有服务日志
docker-compose logs
# 查看后端应用日志(实时)
docker-compose logs -f app
# 查看 MySQL 日志
docker-compose logs -f mysql
# 查看 Redis 日志
docker-compose logs -f redis
服务管理
# 停止服务
docker-compose stop
# 启动服务
docker-compose start
# 重启服务
docker-compose restart
# 停止并删除容器(保留数据)
docker-compose down
# 完全重置(删除容器和数据卷)
docker-compose down -v
数据库操作
# 进入 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 |
🛠️ 自定义配置
修改数据库密码
- 编辑
docker-compose.yml:
mysql:
environment:
MYSQL_ROOT_PASSWORD: your-new-password
- 编辑
.env.docker:
DATABASE_URL=mysql://root:your-new-password@mysql:3306/aguzhitou
- 重启服务:
docker-compose down -v
docker-compose up --build -d
修改服务端口
编辑 docker-compose.yml:
app:
ports:
- "8080:3000" # 改为 8080 端口
添加 AKShare 数据源
docker-compose --profile with-akshare up -d
📈 性能优化
MySQL 配置
已针对生产环境优化:
innodb_buffer_pool_size=512Mmax_connections=200- 字符集:utf8mb4
Redis 配置
使用 Alpine 版本,轻量级:
- 数据持久化
- 自动清理策略
🔒 安全配置
生产环境建议
-
修改默认密码
- MySQL root 密码
- JWT Secret
-
使用 HTTPS
- 配置 Nginx 反向代理
- 使用 Let's Encrypt 证书
-
限制端口访问
- 仅开放必要端口
- 使用防火墙规则
🐛 故障排查
问题1:数据库连接失败
现象:
Error: Can't reach database server
解决方案:
# 检查 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
解决方案:
# 查找占用进程
sudo lsof -i :3306
# 停止占用进程或修改端口
# 编辑 docker-compose.yml 修改端口映射
问题3:内存不足
现象:
Error: Out of memory
解决方案:
# 查看内存使用
docker stats
# 减少 MySQL 内存占用
# 编辑 docker-compose.yml 调整 innodb_buffer_pool_size
📝 更新记录
v1.0.0
- ✨ 初始版本
- ✨ MySQL 8.0 带分区表
- ✨ Redis 7 缓存
- ✨ 自动初始化脚本
- ✨ 健康检查
📞 技术支持
如有问题,请检查:
- Docker 和 Docker Compose 版本
- 端口占用情况
- 日志文件中的错误信息
- 系统资源(内存、磁盘)
📄 许可证
MIT License