231 lines
4.4 KiB
Markdown
231 lines
4.4 KiB
Markdown
|
|
# Python API 部署说明
|
|||
|
|
|
|||
|
|
## 1. 环境准备
|
|||
|
|
|
|||
|
|
### 安装 Python 3.8+
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Ubuntu/Debian
|
|||
|
|
sudo apt-get update
|
|||
|
|
sudo apt-get install python3 python3-pip python3-venv
|
|||
|
|
|
|||
|
|
# CentOS/RHEL
|
|||
|
|
sudo yum install python3 python3-pip
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 创建虚拟环境(推荐)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd backend_api_python
|
|||
|
|
python3 -m venv venv
|
|||
|
|
source venv/bin/activate # Linux/Mac
|
|||
|
|
# 或
|
|||
|
|
venv\Scripts\activate # Windows
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 安装依赖
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pip install -r requirements.txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 2. 开发环境运行
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python run.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
服务将在 `http://localhost:5000` 启动
|
|||
|
|
|
|||
|
|
## 3. 生产环境部署
|
|||
|
|
|
|||
|
|
### 使用 Gunicorn
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 安装 gunicorn(已在 requirements.txt 中)
|
|||
|
|
pip install gunicorn
|
|||
|
|
|
|||
|
|
# 启动服务
|
|||
|
|
gunicorn -c gunicorn_config.py "run:app"
|
|||
|
|
|
|||
|
|
# 或使用命令行参数
|
|||
|
|
gunicorn -w 4 -b 0.0.0.0:5000 --timeout 120 "run:app"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 使用 Supervisor 管理进程
|
|||
|
|
|
|||
|
|
创建 `/etc/supervisor/conf.d/quantdinger_python_api.conf`:
|
|||
|
|
|
|||
|
|
```ini
|
|||
|
|
[program:quantdinger_python_api]
|
|||
|
|
command=/path/to/venv/bin/gunicorn -c /path/to/gunicorn_config.py "run:app"
|
|||
|
|
directory=/path/to/backend_api_python
|
|||
|
|
user=www-data
|
|||
|
|
autostart=true
|
|||
|
|
autorestart=true
|
|||
|
|
redirect_stderr=true
|
|||
|
|
stdout_logfile=/path/to/logs/supervisor.log
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
启动:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
sudo supervisorctl reread
|
|||
|
|
sudo supervisorctl update
|
|||
|
|
sudo supervisorctl start quantdinger_python_api
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 使用 Systemd 管理服务
|
|||
|
|
|
|||
|
|
创建 `/etc/systemd/system/quantdinger-python-api.service`:
|
|||
|
|
|
|||
|
|
```ini
|
|||
|
|
[Unit]
|
|||
|
|
Description=QuantDinger Python API Service
|
|||
|
|
After=network.target
|
|||
|
|
|
|||
|
|
[Service]
|
|||
|
|
Type=notify
|
|||
|
|
User=www-data
|
|||
|
|
Group=www-data
|
|||
|
|
WorkingDirectory=/path/to/backend_api_python
|
|||
|
|
Environment="PATH=/path/to/venv/bin"
|
|||
|
|
ExecStart=/path/to/venv/bin/gunicorn -c /path/to/gunicorn_config.py "run:app"
|
|||
|
|
Restart=always
|
|||
|
|
RestartSec=10
|
|||
|
|
|
|||
|
|
[Install]
|
|||
|
|
WantedBy=multi-user.target
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
启动:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
sudo systemctl daemon-reload
|
|||
|
|
sudo systemctl enable quantdinger-python-api
|
|||
|
|
sudo systemctl start quantdinger-python-api
|
|||
|
|
sudo systemctl status quantdinger-python-api
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 4. Nginx 反向代理配置
|
|||
|
|
|
|||
|
|
在 Nginx 配置文件中添加:
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
upstream python_api {
|
|||
|
|
server 127.0.0.1:5000;
|
|||
|
|
keepalive 32;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
server {
|
|||
|
|
listen 80;
|
|||
|
|
server_name api-python.quantdinger.com;
|
|||
|
|
|
|||
|
|
location / {
|
|||
|
|
proxy_pass http://python_api;
|
|||
|
|
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;
|
|||
|
|
|
|||
|
|
# WebSocket 支持(如果需要)
|
|||
|
|
proxy_http_version 1.1;
|
|||
|
|
proxy_set_header Upgrade $http_upgrade;
|
|||
|
|
proxy_set_header Connection "upgrade";
|
|||
|
|
|
|||
|
|
# 超时设置
|
|||
|
|
proxy_connect_timeout 60s;
|
|||
|
|
proxy_send_timeout 60s;
|
|||
|
|
proxy_read_timeout 60s;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 5. PHP 配置
|
|||
|
|
(已移除)本仓库当前不包含 PHP 网关/后台服务,前端开发环境通过 `quantdinger_vue/vue.config.js` 将 `/api` 代理到 Python 服务即可。
|
|||
|
|
|
|||
|
|
## 6. 日志管理
|
|||
|
|
|
|||
|
|
创建日志目录:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
mkdir -p logs
|
|||
|
|
chmod 755 logs
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
日志文件:
|
|||
|
|
- `logs/access.log` - 访问日志
|
|||
|
|
- `logs/error.log` - 错误日志
|
|||
|
|
- `logs/gunicorn.pid` - Gunicorn 进程ID
|
|||
|
|
|
|||
|
|
## 7. 监控和健康检查
|
|||
|
|
|
|||
|
|
### 健康检查接口
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl http://localhost:5000/health
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 监控脚本示例
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
#!/bin/bash
|
|||
|
|
# check_api.sh
|
|||
|
|
|
|||
|
|
API_URL="http://localhost:5000/health"
|
|||
|
|
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $API_URL)
|
|||
|
|
|
|||
|
|
if [ $RESPONSE -ne 200 ]; then
|
|||
|
|
echo "API 服务异常,状态码: $RESPONSE"
|
|||
|
|
# 发送告警通知
|
|||
|
|
# 重启服务
|
|||
|
|
systemctl restart quantdinger-python-api
|
|||
|
|
fi
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 8. 常见问题
|
|||
|
|
|
|||
|
|
### AKSHARE 安装失败
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 可能需要安装系统依赖
|
|||
|
|
sudo apt-get install build-essential
|
|||
|
|
pip install akshare --upgrade
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 端口被占用
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看端口占用
|
|||
|
|
lsof -i :5000
|
|||
|
|
# 或
|
|||
|
|
netstat -tulpn | grep 5000
|
|||
|
|
|
|||
|
|
# 修改端口
|
|||
|
|
export PYTHON_API_PORT=5001
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 权限问题
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 确保日志目录有写权限
|
|||
|
|
chown -R www-data:www-data logs/
|
|||
|
|
chmod -R 755 logs/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 9. 性能优化
|
|||
|
|
|
|||
|
|
1. **增加 Worker 数量**:根据 CPU 核心数调整
|
|||
|
|
2. **使用异步 Worker**:`worker_class = "gevent"`(需要安装 gevent)
|
|||
|
|
3. **启用缓存**:使用 Redis 缓存指数数据
|
|||
|
|
4. **数据库连接池**:如果使用数据库,配置连接池
|
|||
|
|
|
|||
|
|
## 10. 安全建议
|
|||
|
|
|
|||
|
|
1. 使用 HTTPS
|
|||
|
|
2. 配置防火墙规则
|
|||
|
|
3. 限制 API 访问频率
|
|||
|
|
4. 使用 API Key 认证(如果需要)
|
|||
|
|
5. 定期更新依赖包
|
|||
|
|
|