宝塔Python项目管理器不支持Django/Flask直接部署,需改用网站+反向代理+Supervisor手动配置:删Nginx监听端口、反向代理至127.0.0.1:8000/5000、用gunicorn/uvicorn启动并守护,同时正确处理静态文件与权限。

宝塔 Python 项目管理器不支持 Django/Flask 直接部署
宝塔面板的「Python 项目管理器」模块(v8.0+)底层调用的是 gunicorn + supervisor,但它对项目结构有强约束:必须是纯 WSGI 应用、入口文件需为 app.py 或 wsgi.py、且不识别 manage.py 或 flask run 启动逻辑。直接点击“一键部署” Django/Flask 项目大概率会卡在启动失败或 502 错误。
真正可行的方式是绕过项目管理器,改用「网站」+「反向代理」+「手动配置进程」三步组合:
- 用「网站」功能创建站点并绑定域名(走 Nginx)
- 在服务器上手动启动 Django/Flask(用
gunicorn或uvicorn) - 用宝塔「Supervisor 管理器」守护进程,而非 Python 项目管理器
绑定域名前必须关掉 Nginx 的默认端口监听冲突
Django 默认跑 runserver 在 8000,Flask 在 5000,但宝塔新建网站时会自动分配一个端口(如 8888),若你后续让 gunicorn 也监听 8888,Nginx 反向代理就会报 connect refused —— 因为端口被 Nginx 自己占了。
正确做法是:在「网站」→「设置」→「配置文件」里删掉这一行:
listen 8888;
只保留 listen 80;(或 listen 443 ssl;),然后在「反向代理」里新增一条,目标 URL 填 http://127.0.0.1:8000(Django)或 http://127.0.0.1:5000(Flask),这样流量才真正转发到你的应用进程。
- 别在「网站」里填错「根目录」——Django/Flask 静态文件由 Nginx 直接服务,静态路径要设为项目内的
static/目录(如/www/wwwroot/myproject/static) - SSL 证书必须在「网站」→「SSL」里申请并启用,反向代理不会自动透传 HTTPS
- 如果用了
uvicorn,记得加--proxy-headers --forwarded-allow-ips="*",否则request.is_secure永远为 False
Supervisor 管理器配置 gunicorn 启动命令的关键参数
宝塔自带的 Supervisor 管理器(需先安装插件)比 Python 项目管理器更可控。以 Django 为例,添加新进程时,「运行目录」填项目根路径(如 /www/wwwroot/myproject),「启动命令」不能写 python manage.py runserver(开发模式,不抗并发):
gunicorn myproject.wsgi:application --bind 127.0.0.1:8000 --workers 3 --timeout 30 --keep-alive 5 --log-level info
注意几个易错点:
-
myproject.wsgi中的myproject是你的 Django 项目名(即含__init__.py和wsgi.py的那个目录),不是外层代码目录名 - 务必用
--bind 127.0.0.1:8000,不要用0.0.0.0:8000,否则可能被外网扫描到 - Flask 项目则写成:
gunicorn app:app --bind 127.0.0.1:5000(假设主文件叫app.py,app实例名为app) - 如果提示
ModuleNotFoundError,大概率是没激活虚拟环境——在「运行目录」下补上source /www/wwwroot/myproject/venv/bin/activate &&
静态文件 collectstatic 和权限问题最常导致白屏
Nginx 不会执行 Python,所以 django.contrib.staticfiles 的收集和权限必须人工完成。部署后访问 CSS/JS 404 或页面白屏,八成出在这里。
进宝塔终端,cd 到项目根目录,依次执行:
source venv/bin/activate<br>python manage.py collectstatic --noinput
然后确认 Nginx 配置里 static 路径指向正确,并检查文件权限:
-
chown -R www:www /www/wwwroot/myproject/static(宝塔 Nginx 运行用户是www) chmod -R 755 /www/wwwroot/myproject/static- 如果用了
whitenoise或 CDN,这步可跳过,但要在 Djangosettings.py中显式关闭STATICFILES_STORAGE
Flask 没有内置 collectstatic,静态文件得自己放好,路径要和模板里写的 url_for('static', filename='...') 完全一致,且确保 Nginx 的 location /static 块已正确配置。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










