Skip to content

About

由vue+flask+mysql实现的全球比特币交易分析平台

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

📊 Bitcoin Analysis Platform

比特币分析平台 - 使用 Docker 一键部署的全栈 Web 应用,提供实时比特币数据分析、价格预测、技术指标分析和风险评估。

Python Vue.js MySQL Docker


✨ 主要功能

  • 📈 实时数据监控 - 实时比特币价格、交易量和市场指标
  • 📉 技术分析图表 - K线图、成交量、RSI、MACD、布林带等多种技术指标
  • 🔮 价格预测 - 基于随机森林的机器学习价格预测
  • ⚠️ 风险警报 - 智能风险评估和实时预警系统
  • 📊 历史数据分析 - 灵活的历史数据查询和统计分析(自动保留最近一年数据)
  • 💾 MySQL 数据库 - 生产级数据持久化
  • 🔌 离线模式 - 无网络时自动降级使用历史数据
  • 🐳 Docker 部署 - 一键启动,跨平台兼容(Windows/macOS/Linux)

🚀 快速开始

前置要求

只需要安装 Docker:

💡 提示: Docker Desktop 已包含 Docker Compose,无需单独安装。


⚙️ 安装后配置(重要)

macOS 用户 - PATH 配置

如果安装 Docker Desktop 后,终端提示找不到 docker 命令,请执行以下操作:

临时解决(当前终端会话有效):

export PATH="/usr/local/bin:$PATH"

永久解决(推荐):

# 将 Docker 路径添加到 shell 配置文件
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

💡 说明: Docker Desktop 会自动创建符号链接到 /usr/local/bin/,但某些终端配置可能不包含此路径。

🇨🇳 中国大陆用户 - 镜像加速器配置

由于网络原因,拉取 Docker 镜像可能会很慢或超时。强烈建议配置镜像加速器:

配置步骤:

  1. 打开 Docker Desktop
  2. 点击右上角 设置图标 (⚙️)
  3. 选择 Docker Engine
  4. 在编辑器中找到 "registry-mirrors" 配置项,添加以下内容:
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://docker.nju.edu.cn"
  ]
}
  1. 点击 Apply & Restart (应用并重启)
  2. 等待 Docker 重启完成(约 10-30 秒)

验证配置:

docker info | grep -A 5 "Registry Mirrors"

应该看到类似输出:

Registry Mirrors:
  https://docker.m.daocloud.io/
  https://dockerproxy.com/
  https://docker.nju.edu.cn/

⚡ 效果: 配置后,镜像下载速度可提升 10-50 倍,构建时间从 10 分钟缩短到 2-3 分钟。


三步部署

1️⃣ 克隆项目

git clone https://github.com/fallingnight131/btc_analysis_platform.git
cd btc_analysis_platform

2️⃣ 一键启动

macOS/Linux:

bash docker-start.sh

Windows:

docker-start.bat

或者手动执行:

docker-compose up -d --build

3️⃣ 访问应用

启动完成后(约 2-3 分钟),在浏览器中打开:

🎉 恭喜!你已经成功部署了比特币分析平台!


🐳 Docker 管理

🚀 启动和停止

启动服务:

# 首次启动(自动构建)
docker-compose up -d

# 或使用启动脚本
bash docker-start.sh        # macOS/Linux
docker-start.bat            # Windows(双击运行)

停止服务(释放内存和CPU):

docker-compose down

✅ 停止后会立即释放内存和 CPU,但保留镜像和数据
✅ 下次启动只需 10-20 秒

重启服务:

# 方式 1: 重启所有服务
docker-compose restart

# 方式 2: 重启特定服务
docker-compose restart backend
docker-compose restart frontend
docker-compose restart mysql

# 方式 3: 停止后重新启动
docker-compose down
docker-compose up -d

📋 常用命令

# 查看服务状态
docker-compose ps

# 查看日志(所有服务)
docker-compose logs -f

# 查看特定服务日志
docker-compose logs -f backend
docker-compose logs -f frontend
docker-compose logs -f mysql

# 查看实时资源占用
docker stats

# 查看磁盘占用
docker system df

# 重新构建并启动(修改代码后)
docker-compose up -d --build

🗑️ 清理和删除

# 停止并删除容器(保留镜像和数据)
docker-compose down

# 停止并删除数据卷(⚠️ 数据库数据会丢失)
docker-compose down -v

# 完全清理(包括镜像)
docker-compose down
docker rmi btc_analysis_platform-backend btc_analysis_platform-frontend mysql:8.0

服务架构

项目包含 3 个 Docker 服务:

服务 容器名 端口 说明
MySQL btc_analysis_platform_mysql 3306 数据库服务(MySQL 8.0)
Backend btc_analysis_platform_backend 5001 Flask API 服务(Python 3.11)
Frontend btc_analysis_platform_frontend 8080 Vue 3 + Nginx 静态服务

📁 项目结构

btc_analysis_platform/
├── docker-compose.yml         # Docker 编排配置
├── .dockerignore             # Docker 构建忽略
├── .gitignore                # Git 忽略配置
├── .env.example              # 环境变量模板
├── docker-start.sh           # 启动脚本 (macOS/Linux)
├── docker-start.bat          # 启动脚本 (Windows)
│
├── README.md                  # 📖 项目文档(用户部署)
├── QUICKSTART.md             # 🚀 快速开始指南
├── CONTRIBUTING.md           # 🤝 开发者贡献指南
├── LICENSE                   # 📄 MIT 开源协议
│
├── backend/                   # 后端服务
│   ├── Dockerfile            # 后端 Docker 镜像
│   ├── app.py                # Flask 应用入口
│   ├── routes.py             # API 路由
│   ├── api.py                # CoinGecko API 集成
│   ├── database.py           # MySQL 数据库管理
│   ├── cache.py              # 缓存管理
│   ├── utils.py              # 工具函数(技术指标)
│   ├── requirements.txt      # Python 依赖
│   └── data/                 # 数据目录(Docker 卷挂载)
│
└── frontend/                  # 前端服务
    ├── Dockerfile            # 前端 Docker 镜像
    ├── nginx.conf            # Nginx 配置
    ├── src/                  # Vue 3 源码
    │   ├── views/           # 页面组件
    │   ├── components/      # UI 组件
    │   └── router/          # 路由配置
    ├── package.json          # npm 依赖
    └── vue.config.js         # Vue 配置

🔌 API 端点

后端提供以下 RESTful API:

端点 方法 描述
/api/health GET 健康检查
/api/realtime GET 获取实时价格和市场数据
/api/historical?days=7 GET 获取历史数据(7/30/90/365天)
/api/statistics?days=7 GET 获取统计数据
/api/prediction GET 获取价格预测
/api/risk-alerts GET 获取风险警报
/api/candlestick?days=7 GET 获取 K 线数据

示例请求

# 健康检查
curl http://localhost:5001/api/health

# 获取实时数据
curl http://localhost:5001/api/realtime

# 获取最近 30 天历史数据
curl http://localhost:5001/api/historical?days=30

# 获取价格预测
curl http://localhost:5001/api/prediction

🛠 技术栈

后端

  • Flask 3.0 - Python Web 框架
  • MySQL 8.0 - 关系型数据库
  • Pandas - 数据处理
  • Scikit-learn - 机器学习(价格预测)
  • CoinGecko API - 加密货币数据源

前端

  • Vue 3 - 渐进式 JavaScript 框架
  • Vue Router 4 - 路由管理
  • ECharts 6 - 数据可视化
  • Bootstrap 5 - UI 框架
  • Nginx - Web 服务器(生产环境)

部署

  • Docker - 容器化
  • Docker Compose - 多容器编排

📊 数据库说明

自动数据保留策略

  • 数据库自动保留最近 365 天的历史数据
  • 查询超过 1 年的数据时,会实时从 CoinGecko API 获取(不写入数据库)
  • 每次保存新数据时会自动清理过期数据(>365天)
  • 数据存储在 Docker 卷 mysql_data 中,持久化保存

数据备份与恢复

# 备份数据库
docker exec btc-mysql mysqldump -u root -pbitcoin123 bitcoin_db > backup.sql

# 恢复数据库
docker exec -i btc-mysql mysql -u root -pbitcoin123 bitcoin_db < backup.sql

# 备份数据卷
docker run --rm -v btc_analysis_platform_mysql_data:/data -v $(pwd):/backup \
  alpine tar czf /backup/mysql_backup.tar.gz /data

🐛 常见问题

1. Docker 服务启动失败

问题: docker-compose up 报错

解决方法:

# 检查 Docker 是否运行
docker info

# 查看详细日志
docker-compose logs

# 完全重建
docker-compose down -v
docker-compose up -d --build

2. 端口被占用

问题: Bind for 0.0.0.0:8080 failed: port is already allocated

解决方法:

# 修改 docker-compose.yml 中的端口映射
# 例如将 "8080:80" 改为 "8081:80"

或者停止占用端口的服务:

# macOS/Linux
lsof -i :8080
kill -9 <PID>

# Windows
netstat -ano | findstr :8080
taskkill /PID <PID> /F

3. 前端页面空白

可能原因:

  • 后端服务未就绪
  • API 连接失败

解决方法:

# 1. 检查所有服务状态
docker-compose ps

# 2. 查看后端日志
docker-compose logs backend

# 3. 测试 API 连接
curl http://localhost:5001/api/health

# 4. 重启服务
docker-compose restart

4. 数据库连接失败

问题: 后端日志显示 MySQL 连接错误

解决方法:

# 1. 等待 MySQL 完全启动(首次启动需要 30-60 秒)
docker-compose logs mysql

# 2. 检查 MySQL 健康状态
docker-compose ps

# 3. 手动重启后端(等 MySQL 就绪后)
docker-compose restart backend

5. API 返回 429 错误

原因: CoinGecko 免费 API 有请求频率限制(50次/分钟)

解决方案:

  • 系统已实现 30 分钟缓存机制
  • API 失败时自动降级到数据库历史数据
  • 建议等待几分钟后重试

🔧 开发调试

查看实时日志

# 所有服务
docker-compose logs -f

# 只看后端
docker-compose logs -f backend

# 只看前端
docker-compose logs -f frontend

# 只看 MySQL
docker-compose logs -f mysql

进入容器内部

# 进入后端容器
docker-compose exec backend bash

# 进入前端容器
docker-compose exec frontend sh

# 进入 MySQL 容器
docker-compose exec mysql bash

# 连接 MySQL 数据库
docker-compose exec mysql mysql -u bitcoin_user -pbitcoin123 bitcoin_db

修改代码后重新构建

# 只重建后端
docker-compose up -d --build backend

# 只重建前端
docker-compose up -d --build frontend

# 重建所有服务
docker-compose up -d --build

🚀 生产环境部署

使用 HTTPS

  1. 修改 docker-compose.yml,添加 Nginx 反向代理
  2. 配置 SSL 证书(Let's Encrypt 推荐)
  3. 更新前端 API 地址为 HTTPS

性能优化建议

  • MySQL: 调整 docker-compose.yml 中的内存限制
  • 后端: 增加 Gunicorn worker 数量(修改 backend/Dockerfile)
  • 前端: 已使用 Nginx + Gzip 压缩,生产就绪

监控与日志

# 实时监控资源使用
docker stats

# 导出日志到文件
docker-compose logs > app.log

🤝 贡献指南

欢迎提交 Issue 和 Pull Request!

  1. Fork 本项目
  2. 创建你的功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交你的更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开一个 Pull Request

详见 CONTRIBUTING.md


🐛 故障排查

遇到问题?查看 故障排查指南,包含:

  • ✅ Docker 安装配置(PATH、镜像加速器)
  • ✅ 容器健康检查失败
  • ✅ 网络和端口问题
  • ✅ 数据库连接问题
  • ✅ 磁盘空间管理
  • ✅ 完全重新部署步骤

📚 相关文档


📄 开源协议

本项目采用 MIT License - 详见 LICENSE 文件


📞 联系方式


🙏 致谢


⭐ 如果这个项目对你有帮助,请给个 Star!

About

由vue+flask+mysql实现的全球比特币交易分析平台

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages