update
This commit is contained in:
parent
9f989ce9bb
commit
fda92fde71
55
.dockerignore
Normal file
55
.dockerignore
Normal 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
40
Dockerfile
Normal 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"]
|
||||
98
README.md
98
README.md
@ -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+
|
||||
- MySQL 8.0+(使用远程MySQL数据库)
|
||||
- 详细依赖见`requirements.txt`
|
||||
|
||||
## 数据库配置
|
||||
|
||||
项目使用SQLAlchemy ORM连接MySQL数据库,用于存储分析结果。默认连接到远程MySQL服务器,可以通过环境变量或配置文件自定义连接信息。
|
||||
@ -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设置
|
||||
|
||||
Binary file not shown.
@ -32,6 +32,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]:
|
||||
"""
|
||||
加载配置文件
|
||||
@ -95,3 +105,36 @@ class ConfigLoader:
|
||||
def get_dingtalk_config(self) -> Dict[str, Any]:
|
||||
"""获取钉钉机器人配置"""
|
||||
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
|
||||
@ -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
21
docker-compose.yml
Normal 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
108
qinglong_setup.md
Normal 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
76
qinglong_task.sh
Executable 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 "=============================="
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user