stock-ai-agent/docs/DEPLOYMENT.md
2026-02-03 10:08:15 +08:00

492 lines
8.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 部署文档
本文档介绍如何部署A股AI分析Agent系统到生产环境。
## 部署方式
### 方式一:本地部署
#### 1. 系统要求
- 操作系统Linux/macOS/Windows
- Python 3.9+
- Redis 6.0+(可选)
- 内存至少2GB
- 磁盘至少1GB
#### 2. 安装步骤
```bash
# 1. 克隆代码
git clone <repository_url>
cd Stock_Agent
# 2. 创建虚拟环境
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 3. 安装依赖
cd backend
pip install -r requirements.txt
# 4. 配置环境变量
cp ../.env.example ../.env
# 编辑.env文件填写必要的配置
# 5. 启动Redis可选
redis-server
# 6. 启动应用
python -m app.main
```
#### 3. 使用进程管理器
**使用Supervisor推荐**
创建配置文件 `/etc/supervisor/conf.d/stock_agent.conf`
```ini
[program:stock_agent]
directory=/path/to/Stock_Agent/backend
command=/path/to/venv/bin/python -m app.main
user=your_user
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/stock_agent.log
```
启动服务:
```bash
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start stock_agent
```
**使用systemd**
创建服务文件 `/etc/systemd/system/stock_agent.service`
```ini
[Unit]
Description=Stock Agent Service
After=network.target
[Service]
Type=simple
User=your_user
WorkingDirectory=/path/to/Stock_Agent/backend
Environment="PATH=/path/to/venv/bin"
ExecStart=/path/to/venv/bin/python -m app.main
Restart=always
[Install]
WantedBy=multi-user.target
```
启动服务:
```bash
sudo systemctl daemon-reload
sudo systemctl enable stock_agent
sudo systemctl start stock_agent
```
### 方式二Docker部署
#### 1. 创建Dockerfile
在项目根目录创建 `Dockerfile`
```dockerfile
FROM python:3.9-slim
WORKDIR /app
# 安装依赖
COPY backend/requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制代码
COPY backend/ ./backend/
COPY frontend/ ./frontend/
COPY .env .env
# 暴露端口
EXPOSE 8000
# 启动应用
CMD ["python", "-m", "backend.app.main"]
```
#### 2. 创建docker-compose.yml
```yaml
version: '3.8'
services:
redis:
image: redis:6-alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
stock_agent:
build: .
ports:
- "8000:8000"
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
env_file:
- .env
depends_on:
- redis
volumes:
- ./backend:/app/backend
- ./frontend:/app/frontend
- ./stock_agent.db:/app/stock_agent.db
volumes:
redis_data:
```
#### 3. 启动服务
```bash
# 构建镜像
docker-compose build
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
```
### 方式三:云服务器部署
#### 阿里云/腾讯云部署
1. **购买云服务器**
- 配置2核4GB内存
- 系统Ubuntu 20.04 LTS
2. **安全组配置**
- 开放8000端口HTTP
- 开放22端口SSH
3. **安装环境**
```bash
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装Python
sudo apt install python3.9 python3.9-venv python3-pip -y
# 安装Redis
sudo apt install redis-server -y
sudo systemctl enable redis-server
sudo systemctl start redis-server
# 安装Nginx可选用于反向代理
sudo apt install nginx -y
```
4. **部署应用**
按照"本地部署"步骤进行。
5. **配置Nginx反向代理**
创建配置文件 `/etc/nginx/sites-available/stock_agent`
```nginx
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static {
alias /path/to/Stock_Agent/frontend;
}
}
```
启用配置:
```bash
sudo ln -s /etc/nginx/sites-available/stock_agent /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```
6. **配置HTTPS推荐**
使用Let's Encrypt免费证书
```bash
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain.com
```
## 生产环境配置
### 1. 环境变量配置
生产环境的 `.env` 配置:
```env
# API密钥
TUSHARE_TOKEN=your_production_token
ZHIPUAI_API_KEY=your_production_key
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password
# 数据库生产环境建议使用PostgreSQL
DATABASE_URL=postgresql://user:password@localhost/stock_agent
# API设置
API_HOST=0.0.0.0
API_PORT=8000
DEBUG=False
# 安全
SECRET_KEY=your_very_long_random_secret_key_here
RATE_LIMIT=100/minute
# CORS根据实际域名配置
CORS_ORIGINS=https://your_domain.com
```
### 2. 数据库迁移到PostgreSQL
安装PostgreSQL
```bash
sudo apt install postgresql postgresql-contrib -y
```
创建数据库:
```sql
sudo -u postgres psql
CREATE DATABASE stock_agent;
CREATE USER stock_user WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE stock_agent TO stock_user;
\q
```
更新 `.env` 中的 `DATABASE_URL`
### 3. 性能优化
**Redis配置优化**
编辑 `/etc/redis/redis.conf`
```conf
maxmemory 256mb
maxmemory-policy allkeys-lru
save 900 1
save 300 10
save 60 10000
```
**应用配置优化**
`config.py` 中调整:
```python
# 增加工作进程数
workers = multiprocessing.cpu_count() * 2 + 1
# 调整超时时间
timeout = 120
```
### 4. 监控和日志
**日志配置**
`utils/logger.py` 中配置日志文件:
```python
logger = setup_logger(
name="stock_agent",
level=logging.INFO,
log_file="/var/log/stock_agent/app.log"
)
```
**日志轮转**
创建 `/etc/logrotate.d/stock_agent`
```
/var/log/stock_agent/*.log {
daily
rotate 7
compress
delaycompress
notifempty
create 0640 your_user your_user
sharedscripts
}
```
**监控工具**
推荐使用:
- Prometheus + Grafana系统监控
- Sentry错误追踪
- ELK Stack日志分析
## 备份和恢复
### 数据库备份
**SQLite备份**
```bash
# 备份
cp stock_agent.db stock_agent_backup_$(date +%Y%m%d).db
# 恢复
cp stock_agent_backup_20240101.db stock_agent.db
```
**PostgreSQL备份**
```bash
# 备份
pg_dump -U stock_user stock_agent > backup_$(date +%Y%m%d).sql
# 恢复
psql -U stock_user stock_agent < backup_20240101.sql
```
### Redis备份
```bash
# 备份
redis-cli SAVE
cp /var/lib/redis/dump.rdb /backup/redis_$(date +%Y%m%d).rdb
# 恢复
sudo systemctl stop redis
cp /backup/redis_20240101.rdb /var/lib/redis/dump.rdb
sudo systemctl start redis
```
## 安全加固
### 1. 防火墙配置
```bash
# 使用ufw
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
```
### 2. 限制API访问
在Nginx中配置限流
```nginx
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://127.0.0.1:8000;
}
```
### 3. 定期更新
```bash
# 更新系统
sudo apt update && sudo apt upgrade -y
# 更新Python依赖
pip install --upgrade -r requirements.txt
```
## 故障排查
### 常见问题
1. **服务无法启动**
- 检查端口是否被占用:`lsof -i :8000`
- 查看日志:`tail -f /var/log/stock_agent.log`
2. **Redis连接失败**
- 检查Redis状态`sudo systemctl status redis`
- 测试连接:`redis-cli ping`
3. **数据库错误**
- 检查数据库连接:`psql -U stock_user -d stock_agent`
- 查看数据库日志:`sudo tail -f /var/log/postgresql/postgresql-*.log`
4. **API响应慢**
- 检查Redis缓存是否正常
- 查看系统资源:`htop`
- 分析慢查询日志
## 性能测试
使用Apache Bench进行压力测试
```bash
# 安装ab
sudo apt install apache2-utils -y
# 测试API
ab -n 1000 -c 50 http://localhost:8000/api/stock/quote/600519
```
## 更新部署
### 零停机更新
使用蓝绿部署或滚动更新:
```bash
# 1. 拉取最新代码
git pull origin main
# 2. 安装新依赖
pip install -r requirements.txt
# 3. 运行数据库迁移(如有)
# python manage.py migrate
# 4. 重启服务
sudo supervisorctl restart stock_agent
# 或
sudo systemctl restart stock_agent
```
## 联系支持
如遇到部署问题请提交Issue或联系技术支持。