使用Gunicorn成功在云服务器上部署
This commit is contained in:
91
docs/product/Gunicorn部署操作指南
Normal file
91
docs/product/Gunicorn部署操作指南
Normal file
@@ -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端口,支持高并发访问!** 🚀
|
||||
129
docs/product/启动服务器
Normal file
129
docs/product/启动服务器
Normal file
@@ -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环境进行开发了!
|
||||
102
docs/product/项目部署咨询
Normal file
102
docs/product/项目部署咨询
Normal file
@@ -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 个并发连接
|
||||
- **限制**:进程数固定,无法动态扩展
|
||||
|
||||
### <20><> **支持高并发** 的启动方式:
|
||||
|
||||
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即可
|
||||
- **稳定性**:进程自动重启,错误恢复机制
|
||||
|
||||
## <20><> **小规模部署规格建议**:
|
||||
|
||||
| 服务器配置 | 并发用户数 | 适用场景 |
|
||||
|-----------|-----------|----------|
|
||||
| 2核4GB | 500-1000 | 小型团队/部门 |
|
||||
| 4核8GB | 1000-3000 | 中型企业 |
|
||||
| 8核16GB | 3000-10000 | 大型企业 |
|
||||
|
||||
## <20><> **部署方式**:
|
||||
|
||||
1. **直接部署**:使用 `gunicorn -c gunicorn.conf.py run_dev:app`
|
||||
2. **Docker部署**:使用 `docker-compose.prod.yml`
|
||||
3. **系统服务**:配置为systemd服务
|
||||
|
||||
**结论**:您的项目完全支持小规模生产部署,Gunicorn配置已经为生产环境做好了准备,可以安全地部署到生产服务器上。
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user