宝塔面板无法直接安装Python项目管理器插件,应采用gunicorn+nginx反向代理方式部署Django:先安装Python并配置gunicorn启动脚本,再在网站配置中设置反向代理和静态文件规则,最后排查502等常见错误。

宝塔面板里直接装Python项目管理器行不通
宝塔官方应用商店里的「Python项目管理器」插件,从 8.0 版本起已下架,且不兼容新版宝塔(尤其是基于 Debian/Ubuntu 的系统)。强行安装旧版插件会导致面板崩溃或 nginx 配置错乱。这不是权限或路径问题,是架构层面的废弃——它依赖的 supervisor 启动逻辑和新版宝塔的进程管理冲突。
真实可行的路径只有一条:绕过插件,用宝塔的「网站」+「反向代理」+ 手动部署 WSGI 服务组合实现。
用 gunicorn + nginx 反向代理跑 Django(最稳方案)
这是生产环境最常用、宝塔适配最好的方式。核心是让 gunicorn 在后台运行 Django 的 wsgi.py,再由宝塔自动配置的 nginx 把请求转发过去。
- 先在宝塔「软件商店」确认已安装
Python(建议 3.8+),并记下 Python 路径,通常是/www/server/python/bin/python3 - 进网站根目录(如
/www/wwwroot/myproject),用宝塔终端执行:cd /www/wwwroot/myproject<br>/www/server/python/bin/python3 -m pip install gunicorn
- 写一个启动脚本
start_gunicorn.sh(放在项目根目录):#!/bin/bash<br>cd /www/wwwroot/myproject<br>/www/server/python/bin/python3 -m gunicorn myproject.wsgi:application --bind 127.0.0.1:8000 --workers 2 --daemon --pid /www/wwwroot/myproject/gunicorn.pid
注意把myproject.wsgi换成你实际的包名和wsgi.py所在路径 - 给脚本加执行权限:
chmod +x start_gunicorn.sh,然后手动运行一次:./start_gunicorn.sh
宝塔网站设置里必须改的三项
进「网站」→ 点击你的域名 → 「配置文件」,不是改 Nginx 全局配置,而是改这个站点的 conf。重点动三处:
立即学习“Python免费学习笔记(深入)”;
- 删掉原配置里所有
location /下的index和try_files行——Django 不走静态首页路由 - 在
server块里加反向代理段:location / {<br> proxy_pass http://127.0.0.1:8000;<br> proxy_set_header Host $host;<br> proxy_set_header X-Real-IP $remote_addr;<br> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>} - 静态文件别让 Django 处理:在同个
server块里加一段专门处理/static/的规则:location /static/ {<br> alias /www/wwwroot/myproject/static/;<br>}记得提前用python manage.py collectstatic把静态文件收进去
常见报错和对应检查点
502 Bad Gateway 是最常遇到的,90% 是以下三个原因中的某一个:
-
gunicorn没起来:用ps aux | grep gunicorn看进程,用cat /www/wwwroot/myproject/gunicorn.pid看 pid 文件是否存在,再查tail -f /www/wwwroot/myproject/gunicorn.log(如果没日志,启动命令加--error-logfile /www/wwwroot/myproject/gunicorn.log) - Django 的
ALLOWED_HOSTS没加你的域名:必须是['yourdomain.com', 'www.yourdomain.com'],不能只写['*'](开发可以,生产不行) - 宝塔防火墙或安全组没放行本地端口:虽然
127.0.0.1:8000不对外,但 nginx 和 gunicorn 进程间通信依赖该端口畅通,确保没被宝塔「安全」→「防火墙」误拦
WSGI 路径写错、settings.py 里 DEBUG=True 时暴露敏感信息、静态路径权限为 755 但 nginx 用户(通常是 www)没读取权——这些细节漏掉一个,服务就起不来。

















