基于 Gunicorn 与 Nginx 的 Flask 应用部署运维指南
在使用 Flask 框架开发 Python Web 应用时,通常结合 Gunicorn 作为 WSGI 服务器,并通过 Nginx 做反向代理。以下是完整的部署、依赖管理与进程控制操作流程。
1. 重启 Nginx 服务
进入 Nginx 可执行目录并重新加载配置:
cd /usr/local/nginx/sbin
./nginx -s reload
2. 虚拟环境激活与依赖管理
激活指定项目的虚拟环境(以 StoreHub 为例):
source /usr/local/nginx/html/prod/python_project/StoreHub/py3.9/bin/activate
导出当前环境的依赖包列表:
pip freeze > requirements.txt
安装项目所需全部依赖:
pip install -r requirements.txt
若需跳过子依赖检查,仅安装主包:
pip install -r requirements.txt --no-deps
3. 启动 Flask 应用(Gunicorn)
推荐使用预加载模式启动应用,避免运行时导入问题:
gunicorn --config gunicorn-conf.py --preload app:app
对于入口文件为 index.py 的项目:
gunicorn --config gunicorn-conf.py --preload index:app
后台持久化运行并记录日志:
nohup gunicorn --config gunicorn-conf.py --preload app:app > gunicorn.log 2>&1 &
4. 查看端口占用情况
检查特定端口是否被监听(例如 9100):
netstat -ntulp | grep 9100
5. 终止 Gunicorn 进程
根据应用路径精确终止某个项目的服务进程:
pkill -f "/usr/local/nginx/html/prod/dhcy/myenv3.9/bin/gunicorn"
强制结束所有匹配的 Gunicorn 实例:
sudo pkill -f "gunicorn --config gunicorn-conf.py"
也可通过主模块名终止任务:
pkill -f "gunicorn.*index:app"
6. 创建独立虚拟环境
为新项目创建隔离的 Python 环境:
python3.9 -m venv /usr/local/nginx/html/prod/dhcy/myenv_fixed
source /usr/local/nginx/html/prod/dhcy/myenv_fixed/bin/activate
退出当前虚拟环境:
deactivate
7. 安装本地或第三方库
安装压缩包形式的 SDK:
pip install python-sdk_v2.0.16.zip
安装 JavaScript 执行支持库(用于 PyExecJS):
pip install PyExecJS
8. 多项目部署示例
到货差异系统(端口 9100)
cd /usr/local/nginx/html/prod/dhcy
source myenv3.9/bin/activate
gunicorn --config gunicorn-conf.py --preload app:app
盘点系统(端口 9102)
cd /usr/local/nginx/html/prod/feipy3
source venv/bin/activate
gunicorn --config gunicorn-conf.py --preload app:app
MdShopFlow 系统(端口 9103)
cd /usr/local/nginx/html/prod/python_project/MdShopFlow
source py3.9/bin/activate
gunicorn --config gunicorn-conf.py --preload app:app
StoreHub 系统(端口 9104)
cd /usr/local/nginx/html/prod/python_project/StoreHub
source py3.9/bin/activate
gunicorn --config gunicorn-conf.py --preload app:app
