492 lines
8.3 KiB
Markdown
492 lines
8.3 KiB
Markdown
# 部署文档
|
||
|
||
本文档介绍如何部署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或联系技术支持。
|