8.3 KiB
8.3 KiB
部署文档
本文档介绍如何部署A股AI分析Agent系统到生产环境。
部署方式
方式一:本地部署
1. 系统要求
- 操作系统:Linux/macOS/Windows
- Python 3.9+
- Redis 6.0+(可选)
- 内存:至少2GB
- 磁盘:至少1GB
2. 安装步骤
# 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:
[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
启动服务:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start stock_agent
使用systemd
创建服务文件 /etc/systemd/system/stock_agent.service:
[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
启动服务:
sudo systemctl daemon-reload
sudo systemctl enable stock_agent
sudo systemctl start stock_agent
方式二:Docker部署
1. 创建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
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. 启动服务
# 构建镜像
docker-compose build
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
方式三:云服务器部署
阿里云/腾讯云部署
-
购买云服务器
- 配置:2核4GB内存
- 系统:Ubuntu 20.04 LTS
-
安全组配置
- 开放8000端口(HTTP)
- 开放22端口(SSH)
-
安装环境
# 更新系统
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
- 部署应用
按照"本地部署"步骤进行。
- 配置Nginx反向代理
创建配置文件 /etc/nginx/sites-available/stock_agent:
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;
}
}
启用配置:
sudo ln -s /etc/nginx/sites-available/stock_agent /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
- 配置HTTPS(推荐)
使用Let's Encrypt免费证书:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain.com
生产环境配置
1. 环境变量配置
生产环境的 .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:
sudo apt install postgresql postgresql-contrib -y
创建数据库:
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:
maxmemory 256mb
maxmemory-policy allkeys-lru
save 900 1
save 300 10
save 60 10000
应用配置优化
在 config.py 中调整:
# 增加工作进程数
workers = multiprocessing.cpu_count() * 2 + 1
# 调整超时时间
timeout = 120
4. 监控和日志
日志配置
在 utils/logger.py 中配置日志文件:
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备份
# 备份
cp stock_agent.db stock_agent_backup_$(date +%Y%m%d).db
# 恢复
cp stock_agent_backup_20240101.db stock_agent.db
PostgreSQL备份
# 备份
pg_dump -U stock_user stock_agent > backup_$(date +%Y%m%d).sql
# 恢复
psql -U stock_user stock_agent < backup_20240101.sql
Redis备份
# 备份
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. 防火墙配置
# 使用ufw
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
2. 限制API访问
在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. 定期更新
# 更新系统
sudo apt update && sudo apt upgrade -y
# 更新Python依赖
pip install --upgrade -r requirements.txt
故障排查
常见问题
-
服务无法启动
- 检查端口是否被占用:
lsof -i :8000 - 查看日志:
tail -f /var/log/stock_agent.log
- 检查端口是否被占用:
-
Redis连接失败
- 检查Redis状态:
sudo systemctl status redis - 测试连接:
redis-cli ping
- 检查Redis状态:
-
数据库错误
- 检查数据库连接:
psql -U stock_user -d stock_agent - 查看数据库日志:
sudo tail -f /var/log/postgresql/postgresql-*.log
- 检查数据库连接:
-
API响应慢
- 检查Redis缓存是否正常
- 查看系统资源:
htop - 分析慢查询日志
性能测试
使用Apache Bench进行压力测试:
# 安装ab
sudo apt install apache2-utils -y
# 测试API
ab -n 1000 -c 50 http://localhost:8000/api/stock/quote/600519
更新部署
零停机更新
使用蓝绿部署或滚动更新:
# 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或联系技术支持。