diff --git a/docs/product/Gunicorn部署操作指南 b/docs/product/Gunicorn部署操作指南 new file mode 100644 index 0000000..926700d --- /dev/null +++ b/docs/product/Gunicorn部署操作指南 @@ -0,0 +1,91 @@ +好的,我将修改Gunicorn配置使用5002端口,然后重新启动服务。 + +现在启动Gunicorn服务: + +```bash +eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && gunicorn -c gunicorn.conf.py run_dev:app +``` +检查服务是否成功启动: + +```bash +cd /home/renjianbo/aitsc && eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && sleep 3 && ps aux | grep gunicorn +``` +检查端口监听状态: + +```bash +eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && ss -tlnp | grep :5002 +``` +让我检查日志文件,看看是否有启动错误: + +```bash +eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && ls -la logs/ +``` +检查错误日志: + +```bash +eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && cat logs/gunicorn_error.log +``` +我发现问题了!日志显示Gunicorn仍然在监听5000端口,而不是5002端口。让我检查PID文件并停止旧的服务: + +```bash +eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && cat logs/gunicorn.pid +``` +停止旧的Gunicorn服务: + +```bash +eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && kill -TERM 17895 +``` +等待几秒钟让服务完全停止,然后重新启动: + +```bash +eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && sleep 3 && gunicorn -c gunicorn.conf.py run_dev:app +``` +检查新服务是否在5002端口启动: + +```bash +cd /home/renjianbo/aitsc && eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && sleep 5 && ss -tlnp | grep :5002 +``` +太好了!现在检查Gunicorn进程状态: + +```bash +eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && ps aux | grep gunicorn | grep -v grep +``` +测试服务是否正常响应: + +```bash +eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" && conda activate myenv && curl -s http://localhost:5002/ | head -20 +``` +## ✅ **Gunicorn部署成功!** + +### **部署状态总结**: + +1. **✅ 环境激活**:Python 3.12.7环境已激活 +2. **✅ 端口配置**:已修改为5002端口 +3. **✅ 服务启动**:Gunicorn成功启动 +4. **✅ 进程运行**:6个工作进程正在运行 +5. **✅ 端口监听**:5002端口正常监听 +6. **✅ 服务响应**:Web服务正常响应 + +### **当前部署信息**: + +- **访问地址**:`http://localhost:5002` +- **外网地址**:`http://101.43.95.130:5002` +- **工作进程数**:6个(根据CPU核心数自动配置) +- **并发能力**:约6000个并发连接 +- **日志位置**:`logs/gunicorn_access.log` 和 `logs/gunicorn_error.log` + +### **管理命令**: + +```bash +# 停止服务 +kill -TERM $(cat logs/gunicorn.pid) + +# 重启服务 +kill -HUP $(cat logs/gunicorn.pid) + +# 查看日志 +tail -f logs/gunicorn_access.log +tail -f logs/gunicorn_error.log +``` + +**您的Flask应用现在已成功使用Gunicorn部署在5002端口,支持高并发访问!** 🚀 \ No newline at end of file diff --git a/docs/product/启动服务器 b/docs/product/启动服务器 new file mode 100644 index 0000000..9f75ce2 --- /dev/null +++ b/docs/product/启动服务器 @@ -0,0 +1,129 @@ +我来帮您了解如何使用已安装的Python 3.12.7环境。让我为您提供详细的使用指南: + +Python 3.12.7 环境使用指南 + +1. 激活conda环境 + +首先需要激活包含Python 3.12.7的conda环境: + +# 激活conda基础环境 +eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" + +# 激活项目环境(包含Python 3.12.7) +conda activate myenv + +2. 验证Python版本 + +# 检查Python版本 +python --version +# 应该显示: Python 3.12.7 + +# 检查pip版本 +pip --version + +3. 常用conda命令 + +# 查看所有环境 +conda env list + +# 激活环境 +conda activate 环境名 + +# 退出环境 +conda deactivate + +# 查看当前环境安装的包 +conda list + +# 安装包 +conda install 包名 +# 或者使用pip +pip install 包名 + +4. 项目开发流程 + +# 1. 进入项目目录 +cd /home/renjianbo/aitsc + +# 2. 激活项目环境 +conda activate myenv + +# 3. 运行项目 +python run_dev.py + +# 4. 安装新的依赖包 +pip install 新包名 + +# 5. 更新requirements.txt +pip freeze > requirements.txt + +5. 环境管理 + +# 创建新环境 +conda create -n 新环境名 python=3.12.7 + +# 删除环境 +conda env remove -n 环境名 + +# 导出环境配置 +conda env export > environment.yml + +# 从配置文件创建环境 +conda env create -f environment.yml + +6. 包管理 + +# 使用conda安装包 +conda install numpy pandas matplotlib + +# 使用pip安装包 +pip install flask django requests + +# 查看已安装的包 +pip list + +# 搜索包 +conda search 包名 + +7. 虚拟环境vs conda环境 + +conda环境的优势: +- 可以管理Python版本 +- 可以管理非Python包 +- 更好的依赖解析 +- 跨平台兼容性好 + +使用建议: +- 开发项目时使用conda环境 +- 每个项目创建独立环境 +- 定期更新环境 + +8. 常见问题解决 + +# 如果conda命令不可用 +export PATH="/home/renjianbo/miniconda3/bin:$PATH" + +# 如果环境激活失败 +conda init bash +source ~/.bashrc + +# 清理conda缓存 +conda clean --all + +9. 项目启动完整流程 + +# 完整启动流程 +cd /home/renjianbo/aitsc +eval "$(/home/renjianbo/miniconda3/bin/conda shell.bash hook)" +conda activate myenv +python run_dev.py + +10. 环境信息 + +您的Python 3.12.7环境信息: +- 环境名称: myenv +- Python版本: 3.12.7 +- 环境路径: /home/renjianbo/miniconda3/envs/myenv +- 已安装包: Flask, SQLAlchemy, PyMySQL等 + +这样您就可以充分利用Python 3.12.7环境进行开发了! diff --git a/docs/product/项目部署咨询 b/docs/product/项目部署咨询 new file mode 100644 index 0000000..9c6207a --- /dev/null +++ b/docs/product/项目部署咨询 @@ -0,0 +1,102 @@ +我需要先了解您当前的启动方式和项目结构,以便分析是否支持高并发访问。让我查看一下您的项目配置。 + +Ran tool +我看到您有多种启动方式,让我查看主要的启动配置文件来分析高并发支持情况: + +Read file: gunicorn.conf.py +Read file: uwsgi.ini +Read file: run_production_simple.py +Read file: run_production_public.py +Read file: docker-compose.prod.yml +基于对您项目启动配置的分析,我来回答关于高并发访问支持的问题: + +## 当前启动方式的高并发支持分析 + +### 🔴 **不支持高并发** 的启动方式: + +1. **Flask内置服务器启动** (`run_production_simple.py`, `run_production_public.py`) + - 使用 `app.run()` 启动 + - 虽然启用了 `threaded=True`,但仍然是单进程 + - **并发能力限制**:通常只能处理几十到几百个并发连接 + - **适用场景**:开发测试、小规模部署 + +### 🟡 **部分支持高并发** 的启动方式: + +2. **uWSGI启动** (`uwsgi.ini`) + - 配置了4个进程,每个进程2个线程 + - **并发能力**:理论上可处理 4×2×1000 = 8000 个并发连接 + - **限制**:进程数固定,无法动态扩展 + +### �� **支持高并发** 的启动方式: + +3. **Gunicorn启动** (`gunicorn.conf.py`) + - 工作进程数:`multiprocessing.cpu_count() * 2 + 1` + - 每个工作进程连接数:1000 + - **并发能力**:在8核服务器上可处理约 17×1000 = 17000 个并发连接 + - **优势**:进程数根据CPU核心数自动调整 + +4. **Docker容器化部署** (`docker-compose.prod.yml`) + - 包含Nginx反向代理 + - 支持水平扩展(可启动多个app容器) + - **并发能力**:理论上无上限,取决于服务器资源 + +### 📊 **高并发支持对比表**: + +| 启动方式 | 并发能力 | 扩展性 | 生产环境适用性 | +|---------|---------|--------|---------------| +| Flask内置服务器 | 低 (100-500) | 无 | ❌ | +| uWSGI | 中 (5000-10000) | 有限 | ⚠️ | +| Gunicorn | 高 (10000+) | 好 | ✅ | +| Docker+K8s | 极高 (无上限) | 极好 | ✅ | + +### 💡 **建议**: + +1. **小规模部署**:使用Gunicorn即可满足需求 +2. **大规模部署**:使用Docker容器化 + Nginx负载均衡 +3. **超高并发**:考虑Kubernetes集群部署 + +**总结**:您当前的启动方式中,只有Gunicorn和Docker部署方 +式支持高并发访问,Flask内置服务器和uWSGI配置在高并发场景下会有明显瓶颈。 + + + + + + + + +是的,您的项目**完全可以**进行小规模部署,使用Gunicorn作为WSGI服务器。 + +## ✅ **支持小规模部署的原因**: + +### 1. **项目结构完整** +- 已有完整的Gunicorn配置文件 (`gunicorn.conf.py`) +- 包含生产环境配置 (`env.production`) +- 有Docker部署方案 (`docker-compose.prod.yml`) + +### 2. **Gunicorn配置合理** +- 工作进程数:`CPU核心数 × 2 + 1`(自动适配服务器性能) +- 每个进程连接数:1000 +- 超时配置:30秒(适合Web应用) +- 日志配置完整 + +### 3. **小规模部署能力** +- **并发支持**:可处理1000-10000个并发连接 +- **资源需求**:2-4GB内存,2-4核CPU即可 +- **稳定性**:进程自动重启,错误恢复机制 + +## �� **小规模部署规格建议**: + +| 服务器配置 | 并发用户数 | 适用场景 | +|-----------|-----------|----------| +| 2核4GB | 500-1000 | 小型团队/部门 | +| 4核8GB | 1000-3000 | 中型企业 | +| 8核16GB | 3000-10000 | 大型企业 | + +## �� **部署方式**: + +1. **直接部署**:使用 `gunicorn -c gunicorn.conf.py run_dev:app` +2. **Docker部署**:使用 `docker-compose.prod.yml` +3. **系统服务**:配置为systemd服务 + +**结论**:您的项目完全支持小规模生产部署,Gunicorn配置已经为生产环境做好了准备,可以安全地部署到生产服务器上。 \ No newline at end of file diff --git a/gunicorn.conf.py b/gunicorn.conf.py index f960fe3..d740445 100644 --- a/gunicorn.conf.py +++ b/gunicorn.conf.py @@ -8,7 +8,7 @@ import os import multiprocessing # 服务器配置 -bind = "0.0.0.0:5000" +bind = "0.0.0.0:5002" workers = multiprocessing.cpu_count() * 2 + 1 worker_class = "sync" worker_connections = 1000