This commit is contained in:
aaron 2025-04-28 16:30:08 +08:00
parent 9f989ce9bb
commit fda92fde71
11 changed files with 469 additions and 18 deletions

55
.dockerignore Normal file
View File

@ -0,0 +1,55 @@
# 虚拟环境
venv/
.venv/
env/
ENV/
# Git相关
.git/
.gitignore
# Python缓存文件
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
# 本地数据和日志
logs/*
*/data/*
*.log
*.csv
*.json
*.db
# IDE配置
.idea/
.vscode/
*.swp
*.swo
# Docker相关
Dockerfile
docker-compose*.yml
.dockerignore
# 其他
.DS_Store
.env
.env.local
node_modules/

40
Dockerfile Normal file
View File

@ -0,0 +1,40 @@
FROM python:3.11-slim
# 设置工作目录
WORKDIR /app
# 安装基本依赖
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# 复制项目文件
COPY . /app/
# 安装Python依赖
RUN pip install -i https://mirrors.aliyun.com/pypi/simple/ --no-cache-dir -r requirements.txt
# 设置环境变量
ENV PYTHONUNBUFFERED=1
ENV PYTHONPATH=/app
# 创建配置文件目录
RUN mkdir -p /app/config
# 如果需要从示例配置创建配置文件
RUN if [ -f "/app/cryptoai/config/config.example.yaml" ] && [ ! -f "/app/cryptoai/config/config.yaml" ]; then \
cp /app/cryptoai/config/config.example.yaml /app/cryptoai/config/config.yaml; \
fi
# 创建数据目录
RUN mkdir -p /app/cryptoai/data /app/logs
# 暴露端口如果有Web服务
# EXPOSE 8000
# 设置容器启动命令
ENTRYPOINT ["python", "run.py"]
# 默认参数可在docker run时覆盖
CMD ["--agent", "crypto"]

100
README.md
View File

@ -8,6 +8,7 @@
- 利用DeepSeek大模型进行市场分析和预测
- 提供市场趋势、价格预测和交易建议
- 支持多种加密货币分析
- 通过钉钉机器人发送分析结果
## 项目结构
@ -24,12 +25,105 @@ cryptoai/
## 安装与设置
### 本地部署
1. 克隆项目仓库
2. 安装依赖:`pip install -r requirements.txt`
3. 在`config/config.yaml`中配置Binance API密钥和DeepSeek API密钥
4. 运行`python main.py`启动应用
3. 在`cryptoai/config/config.yaml`中配置Binance API密钥和DeepSeek API密钥
4. 运行`python run.py`启动应用
### Docker部署
1. 构建Docker镜像:
```bash
docker build -t cryptoai .
```
2. 运行容器:
```bash
docker run -d --name cryptoai \
-v $(pwd)/cryptoai/config/config.yaml:/app/cryptoai/config/config.yaml \
-v cryptoai_data:/app/cryptoai/data \
-v cryptoai_logs:/app/logs \
-e BINANCE_API_KEY=your_key \
-e BINANCE_API_SECRET=your_secret \
cryptoai
```
3. 使用Docker Compose部署:
```bash
# 创建.env文件可以基于.env-example复制
cp .env-example .env
# 编辑.env文件填入API密钥和其他配置
vi .env
# 启动服务
docker-compose up -d
```
## 配置方式
项目支持两种配置方式:
### 1. 配置文件
在`cryptoai/config/config.yaml`中配置所有设置。示例可参考`cryptoai/config/config.example.yaml`。
### 2. 环境变量
通过环境变量覆盖配置文件中的设置,支持以下环境变量:
```
# 数据库配置
DB_HOST=数据库主机
DB_PORT=数据库端口
DB_USER=数据库用户名
DB_PASSWORD=数据库密码
DB_NAME=数据库名称
# Binance API
BINANCE_API_KEY=币安API密钥
BINANCE_API_SECRET=币安密钥
BINANCE_TEST_MODE=true/false
# DeepSeek API
DEEPSEEK_API_KEY=DeepSeek API密钥
DEEPSEEK_MODEL=使用的模型
# OKX API
OKX_API_KEY=OKX API密钥
OKX_API_SECRET=OKX密钥
OKX_PASSPHRASE=OKX密码
# 钉钉机器人
DINGTALK_ENABLED=true/false
DINGTALK_WEBHOOK_URL=钉钉Webhook地址
DINGTALK_SECRET=钉钉密钥
```
在Docker中可以通过`-e`参数或`.env`文件传递环境变量。
## 常用命令
```bash
# 运行一次分析
python run.py --run-once
# 分析特定加密货币
python run.py --symbol BTCUSDT
# 使用黄金分析智能体
python run.py --agent gold
# Docker中运行
docker run cryptoai --run-once --agent crypto
```
## 环境要求
- Python 3.9+
- 详细依赖见`requirements.txt`
- MySQL 8.0+使用远程MySQL数据库
- 详细依赖见`requirements.txt`
## 数据库配置
项目使用SQLAlchemy ORM连接MySQL数据库用于存储分析结果。默认连接到远程MySQL服务器可以通过环境变量或配置文件自定义连接信息。

View File

@ -27,13 +27,13 @@ alltick:
crypto:
base_currencies:
- "BTC"
# - "ETH"
# - "BNB"
# - "SOL"
# - "SUI"
- "ETH"
- "BNB"
- "SOL"
- "SUI"
# - "WLD"
quote_currency: "USDT"
time_interval: "4h" # 可选: 1m, 5m, 15m, 30m, 1h, 4h, 1d
time_interval: "1h" # 可选: 1m, 5m, 15m, 30m, 1h, 4h, 1d
# 黄金市场分析配置
gold:
@ -53,7 +53,7 @@ gold:
# 数据设置
data:
storage_path: "./cryptoai/data"
historical_days: 180
historical_days: 90
update_interval: 60 # 数据更新间隔(分钟)
# Agent设置

View File

@ -31,6 +31,16 @@ class ConfigLoader:
# 加载配置
self.config = self._load_config()
# 确保database配置存在
if 'database' not in self.config:
self.config['database'] = {
'host': 'gz-cynosdbmysql-grp-2j1cnopr.sql.tencentcdb.com',
'port': 27469,
'user': 'root',
'password': 'Aa#223388',
'db_name': 'cryptoai'
}
def _load_config(self) -> Dict[str, Any]:
"""
@ -94,4 +104,37 @@ class ConfigLoader:
def get_dingtalk_config(self) -> Dict[str, Any]:
"""获取钉钉机器人配置"""
return self.get_config('dingtalk')
return self.get_config('dingtalk')
def get_database_config(self) -> Dict[str, Any]:
"""获取数据库配置"""
# 首先从配置文件获取
db_config = self.get_config('database')
# 使用环境变量覆盖(如果存在)
if os.environ.get('DB_HOST'):
db_config['host'] = os.environ.get('DB_HOST')
if os.environ.get('DB_PORT'):
db_config['port'] = int(os.environ.get('DB_PORT'))
if os.environ.get('DB_USER'):
db_config['user'] = os.environ.get('DB_USER')
if os.environ.get('DB_PASSWORD'):
db_config['password'] = os.environ.get('DB_PASSWORD')
if os.environ.get('DB_NAME'):
db_config['db_name'] = os.environ.get('DB_NAME')
# 确保返回默认值(如果配置不存在)
default_config = {
'host': 'gz-cynosdbmysql-grp-2j1cnopr.sql.tencentcdb.com',
'port': 27469,
'user': 'root',
'password': 'Aa#223388',
'db_name': 'cryptoai'
}
# 合并默认配置和实际配置
for key, value in default_config.items():
if key not in db_config:
db_config[key] = value
return db_config

View File

@ -13,6 +13,8 @@ from sqlalchemy.orm import sessionmaker
from sqlalchemy.dialects.mysql import JSON
from sqlalchemy.pool import QueuePool
from utils.config_loader import ConfigLoader
# 配置日志
logging.basicConfig(
level=logging.INFO,
@ -244,12 +246,25 @@ def get_db_manager(host: Optional[str] = None,
if _db_instance is not None:
return _db_instance
# 从环境变量获取配置
db_host = host or os.environ.get('DB_HOST', 'gz-cynosdbmysql-grp-2j1cnopr.sql.tencentcdb.com')
db_port = port or int(os.environ.get('DB_PORT', '27469'))
db_user = user or os.environ.get('DB_USER', 'root')
db_password = password or os.environ.get('DB_PASSWORD', 'Aa#223388')
db_name = db_name or os.environ.get('DB_NAME', 'cryptoai')
# 如果未指定参数,从配置加载器获取数据库配置
if host is None or port is None or user is None or password is None or db_name is None:
config_loader = ConfigLoader()
db_config = config_loader.get_database_config()
# 使用配置中的值或默认值
db_host = host or db_config.get('host')
db_port = port or db_config.get('port')
db_user = user or db_config.get('user')
db_password = password or db_config.get('password')
db_name = db_name or db_config.get('db_name')
logger.info(f"从配置加载数据库连接信息: {db_host}:{db_port}/{db_name}")
else:
db_host = host
db_port = port
db_user = user
db_password = password
db_name = db_name
# 创建实例
_db_instance = DBManager(

21
docker-compose.yml Normal file
View File

@ -0,0 +1,21 @@
version: '3.8'
services:
cryptoai:
build:
context: .
dockerfile: Dockerfile
container_name: cryptoai
image: cryptoai:0.0.1
restart: unless-stopped
volumes:
# 挂载配置文件
- ./cryptoai/config/config.yaml:/app/cryptoai/config/config.yaml
# 持久化数据和日志
- cryptoai_data:/app/cryptoai/data
- cryptoai_logs:/app/logs
command: ["--run-once", "--agent", "crypto"]
volumes:
cryptoai_data:
cryptoai_logs:

108
qinglong_setup.md Normal file
View File

@ -0,0 +1,108 @@
# 在青龙面板中部署CryptoAI项目
本文档介绍如何在青龙面板中部署和运行CryptoAI加密货币分析项目。
## 一、前提条件
1. 已经安装并配置好青龙面板
2. 拥有青龙面板的管理权限
3. 已获取必要的API密钥Binance、DeepSeek等
## 二、部署步骤
### 1. 上传项目到青龙容器
有两种方法可以将项目上传到青龙容器:
#### 方法一:使用青龙面板的文件管理功能
1. 在青龙面板中,点击左侧菜单的【文件管理】
2. 点击【新建目录】,创建 `/ql/scripts/cryptoai` 目录
3. 将CryptoAI项目文件上传到该目录中
#### 方法二使用Docker CP命令
1. 确定青龙容器的ID或名称
```bash
docker ps | grep qinglong
```
2. 将项目文件复制到容器中
```bash
docker cp /path/to/cryptoai container_name:/ql/scripts/
```
### 2. 创建定时任务脚本
1. 创建 `qinglong_task.sh` 脚本文件(已在项目中提供)
2. 编辑脚本中的API密钥和其他配置确保填入正确的值
3. 将脚本上传到青龙容器的 `/ql/scripts/` 目录下
### 3. 配置青龙定时任务
1. 在青龙面板中,点击左侧菜单的【定时任务】
2. 点击【创建任务】,填写以下信息:
- 名称CryptoAI加密货币分析
- 命令bash /ql/scripts/qinglong_task.sh
- 定时规则:根据需要设置,例如每天执行一次可设置为 `0 8 * * *`
- 其他选项根据需要设置
## 三、环境变量配置
为便于管理,可以在青龙面板中设置环境变量:
1. 在青龙面板中,点击左侧菜单的【环境变量】
2. 点击【创建变量】,添加以下变量(根据实际情况填写):
| 名称 | 值 | 备注 |
|------|----|----|
| DB_HOST | gz-cynosdbmysql-grp-2j1cnopr.sql.tencentcdb.com | 数据库主机 |
| DB_PORT | 27469 | 数据库端口 |
| DB_USER | root | 数据库用户名 |
| DB_PASSWORD | Aa#223388 | 数据库密码 |
| DB_NAME | cryptoai | 数据库名 |
| BINANCE_API_KEY | your_key | 币安API密钥 |
| BINANCE_API_SECRET | your_secret | 币安密钥 |
| DEEPSEEK_API_KEY | your_key | DeepSeek API密钥 |
| DINGTALK_ENABLED | true | 是否启用钉钉通知 |
| DINGTALK_WEBHOOK_URL | your_url | 钉钉Webhook地址 |
| DINGTALK_SECRET | your_secret | 钉钉加签密钥 |
## 四、验证部署
1. 在青龙面板的【定时任务】页面,找到刚创建的任务
2. 点击【运行】按钮进行测试运行
3. 点击【日志】查看执行情况,确认是否正常运行
## 五、常见问题
### 依赖安装问题
如果遇到依赖安装问题,可以在青龙容器中手动安装:
```bash
cd /ql/scripts/cryptoai
pip install -r requirements.txt
```
### 权限问题
如果遇到权限问题,可以修改脚本权限:
```bash
chmod +x /ql/scripts/qinglong_task.sh
```
### 数据库连接问题
确保数据库能够从青龙容器所在网络访问。如果使用内网数据库,可能需要配置网络连接。
## 六、更新方式
当需要更新CryptoAI项目时只需替换 `/ql/scripts/cryptoai` 目录下的文件即可。
确保配置文件和数据不被覆盖,最好在更新前备份数据目录:
```bash
docker cp container_name:/ql/scripts/cryptoai/data /backup/path
```

76
qinglong_task.sh Executable file
View File

@ -0,0 +1,76 @@
#!/bin/bash
# 青龙面板定时任务脚本 - CryptoAI加密货币分析
# 设置工作目录
WORKDIR="/ql/scripts/cryptoai"
# 如果目录不存在则退出
if [ ! -d "$WORKDIR" ]; then
echo "工作目录不存在请先将CryptoAI项目上传到青龙容器内的 /ql/scripts/cryptoai 路径"
exit 1
fi
# 进入工作目录
cd "$WORKDIR"
# 设置Python路径
export PYTHONPATH=$WORKDIR
# 设置环境变量
# 数据库配置
export DB_HOST="gz-cynosdbmysql-grp-2j1cnopr.sql.tencentcdb.com"
export DB_PORT="27469"
export DB_USER="root"
export DB_PASSWORD="Aa#223388"
export DB_NAME="cryptoai"
# API配置 - 请替换为自己的API密钥
export BINANCE_API_KEY="HCpeel8g6fsTK2630b7BvGBcS09Z3qfXkLVcAY2JkpaiMm1J6DWRvoQZBQlElDJg"
export BINANCE_API_SECRET="TySs6onlHOTrGzV8fMdDxLKTWWYnQ4rCHVAmjrcHby17acKflmo7xVTWVsbqtxe7"
export BINANCE_TEST_MODE="false"
export DEEPSEEK_API_KEY="sk-9f6b56f08796435d988cf202e37f6ee3"
export DEEPSEEK_MODEL="deepseek-chat"
export OKX_API_KEY="7abe4037-3d93-40d4-a77b-c77f4a1e9490"
export OKX_API_SECRET="654946A2045F44CC2853D47F96C62F4E"
export OKX_PASSPHRASE="Aa@123456"
export OKX_TEST_MODE="false"
# 钉钉配置
export DINGTALK_ENABLED="true"
export DINGTALK_WEBHOOK_URL="https://oapi.dingtalk.com/robot/send?access_token=2278b723cd363bb6f85592c743b59b166e70b9e02a275bb5cedbc33b53a5cbdc"
export DINGTALK_SECRET="your_dingtalk_secret"
# 确保日志目录存在
if [ ! -d "$WORKDIR/logs" ]; then
mkdir -p "$WORKDIR/logs"
fi
# 记录开始时间
echo "=============================="
echo "开始执行CryptoAI分析: $(date)"
echo "=============================="
# 检查是否有Python虚拟环境
if [ -d "/ql/scripts/cryptoai/venv" ]; then
echo "使用项目虚拟环境"
source /ql/scripts/cryptoai/venv/bin/activate
fi
# 检查依赖是否安装
if ! pip list | grep -q "sqlalchemy"; then
echo "安装依赖..."
pip install -r requirements.txt
fi
# 运行加密货币分析
python run.py --run-once --agent crypto
# 如果需要运行黄金分析,取消下面的注释
# python run.py --run-once --agent gold
# 记录结束时间
echo "=============================="
echo "CryptoAI分析完成: $(date)"
echo "=============================="

View File

@ -13,5 +13,4 @@ langchain>=0.0.267
pydantic>=2.3.0
fastapi>=0.103.1
uvicorn>=0.23.2
alltick-api==0.0.1
okx-api==0.0.1
sqlalchemy==2.0.31