宝塔面板不内置Python应用管理器,部署Flask/Django需手动配置gunicorn+uWSGI、Nginx反向代理及静态文件服务;核心链路为应用→gunicorn→Nginx,须严格设置路径、端口、日志与环境依赖。

宝塔面板里没有“一键部署Python项目”按钮,别找
宝塔面板本身不内置 Python 应用管理器,所谓“部署 Flask/Django”本质是手动配置 Web 服务 + 进程守护 + 反向代理。它只提供基础环境(Python 解释器、pip、Nginx/Apache),其余全靠你补全。很多人卡在“点了提交没反应”“访问 502”“日志空空如也”,问题几乎都出在 gunicorn 或 uWSGI 启动失败,但宝塔根本不报这个错。
必须手动配 gunicorn + Nginx 反向代理(Flask/Django 通用)
宝塔的“Python 项目”功能(新版叫“应用部署”)只是个壳,实际仍需你写启动命令、设工作目录、暴露端口。核心链路是:Flask/Django → gunicorn(监听 127.0.0.1:8000)→ Nginx(反代到 80/443)。跳过 gunicorn 直连 Python 进程?线上环境会崩得毫无征兆。
- 启动命令别写
python app.py,要写gunicorn -w 2 -b 127.0.0.1:8000 --chdir /www/wwwroot/myapp myapp:app(Flask)或gunicorn myproject.wsgi:application(Django) -
--chdir必须指定项目根目录,否则import报错;myapp:app中的app是 Flask 实例变量名,不是文件名 - Nginx 配置里
proxy_pass http://127.0.0.1:8000;后面不能加/,否则 Django 静态路径全乱 - 确保
gunicorn安装在站点对应 Python 环境里:用宝塔终端进站点 Python 环境(如/www/server/python/bin/python),再pip install gunicorn
静态文件 404?Django 的 collectstatic 和 Nginx 配置要对齐
Django 不通过 Python 进程处理静态文件,必须由 Nginx 直接服务。宝塔不会自动帮你做 collectstatic,也不会改 Nginx 配置指向 STATIC_ROOT。结果就是 CSS/JS 全 404,页面裸奔。
- 先在终端进项目目录,用站点对应的 Python 执行
python manage.py collectstatic --noinput - 确认
STATIC_ROOT = '/www/wwwroot/myapp/staticfiles'(举例),然后在 Nginx 配置中加:location /static/ { alias /www/wwwroot/myapp/staticfiles/; } - 注意
alias结尾有/,且路径和STATIC_ROOT完全一致;location的/static/要和 Django 的STATIC_URL = '/static/'匹配
进程起不来?先看 gunicorn 日志,不是看宝塔“运行状态”
宝塔面板上显示“运行中”,可能只是 gunicorn 主进程在,但 worker 全挂了。真正线索在 gunicorn 自己的日志里——宝塔根本不会把 stderr 输出到它的日志面板。
- 启动命令务必加
--access-logfile /www/wwwroot/myapp/logs/gunicorn_access.log --error-logfile /www/wwwroot/myapp/logs/gunicorn_error.log - 检查
gunicorn_error.log,90% 的问题是:ModuleNotFoundError(路径不对)、ImproperlyConfigured(Djangosettings.py缺SECRET_KEY或数据库配置错)、Address already in use(端口被占) - 别信“重启宝塔”能解决问题,先
ps aux | grep gunicorn杀干净旧进程,再手动跑一遍启动命令看报错
最麻烦的永远不是配置步骤,而是每个环节的日志都不往一个地方写,得自己串起来看。比如 Nginx 报 502,可能是 gunicorn 没启,也可能是启了但 bind 失败,还可能是 Python 环境里少装了某个包——而宝塔面板只告诉你“状态:运行中”。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










