在 Ubuntu 22.04 上通过宝塔面板(BT Panel)部署 Python + Django 项目,核心逻辑其实非常清晰:利用宝塔的“软件商店”解决环境依赖,利用宝塔的“网站”功能配置反向X_X和进程守护。
很多新手容易卡在权限、虚拟环境路径或者 Nginx 配置上。下面我把步骤拆解为最实操的流程,跳过废话,直接上干货。
第一步:安装运行环境
- 登录宝塔面板:确保你已经安装了 Ubuntu 22.04 系统并完成了宝塔初始设置。
- 进入软件商店:点击左侧菜单【软件商店】。
- 搜索并安装:
- 搜索
Python项目管理器(这是关键组件,用于管理 Python 项目和虚拟环境)。 - 同时建议安装
Nginx或Apache(推荐 Nginx,性能更好),因为你需要用它来做反向X_X。 - 注意:如果之前装过其他版本,请卸载冲突版本,保持环境干净。
- 搜索
第二步:创建 Python 项目
-
上传代码:
- 你可以直接将 Django 项目文件夹通过【文件】管理器上传到服务器,例如
/www/wwwroot/myproject。 - 或者使用 Git 拉取:在终端执行
cd /www/wwwroot && git clone your_repo_url myproject。
- 你可以直接将 Django 项目文件夹通过【文件】管理器上传到服务器,例如
-
添加 Python 项目:
- 回到【软件商店】 -> 找到已安装的
Python项目管理器-> 点击【设置】或直接在首页找到入口。 - 点击【添加项目】。
- 回到【软件商店】 -> 找到已安装的
-
配置项目参数:
- 项目名称:随意填,如
my_django_app。 - 端口:填写一个未被占用的端口,如
8000(Django 默认开发端口,这里作为内部通信端口,不对外暴露)。 - 启动方式:选择
Gunicorn(生产环境推荐,比 uWSGI 更稳定且资源占用更低)。 - Python版本:选择你需要的版本(如 Python 3.10+,Ubuntu 22.04 默认支持较好)。
- 项目路径:指向你上传代码的目录,如
/www/wwwroot/myproject。 - 主模块名:通常是你
manage.py同级目录下那个包含wsgi.py的文件夹名(例如你的项目叫mysite,那这里就填mysite)。 - 虚拟环境:强烈建议勾选“创建虚拟环境”。这能避免全局包污染。创建后,记下虚拟环境的路径(通常在项目根目录下的
.venv或类似文件夹)。
- 项目名称:随意填,如
-
安装依赖:
- 在项目列表中找到刚创建的项目,点击【编辑】或【依赖管理】。
- 在依赖安装框中,填入你的
requirements.txt内容,或者直接输入需要安装的包名(如django,gunicorn,psycopg2-binary等)。 - 点击【安装】。等待安装完成。
第三步:配置数据库与静态文件
- 数据库配置:
- 如果你用 SQLite,确保
db.sqlite3文件有写入权限(chmod 666 db.sqlite3或调整属主)。 - 如果用 MySQL/PostgreSQL,先在宝塔【软件商店】安装对应数据库,创建数据库和用户,然后在 Django 的
settings.py中配置好DATABASES。
- 如果你用 SQLite,确保
- 收集静态文件:
- 在宝塔终端中,进入项目目录,激活虚拟环境:
source .venv/bin/activate # 假设虚拟环境名为 .venv python manage.py collectstatic --noinput - 这一步至关重要,否则前端 CSS/JS 会全部丢失。
- 在宝塔终端中,进入项目目录,激活虚拟环境:
第四步:配置 Nginx 反向X_X
这是让网络能访问的关键一步。
- 添加网站:
- 点击宝塔左侧【网站】 -> 【添加站点】。
- 域名填你的域名(如果没有域名,可以暂时填 IP,但需修改 hosts 测试)。
- 根目录随便选,后面会覆盖。
- 修改 Nginx 配置:
- 在网站列表中,找到刚创建的站点,点击【设置】 -> 【配置文件】。
- 删除原有内容,替换为标准 Django + Gunicorn + Nginx 配置模板:
server {
listen 80;
server_name your_domain.com; # 替换为你的域名
# 静态文件处理
location /static/ {
alias /www/wwwroot/myproject/static/; # 替换为你 collectstatic 后的实际路径
expires 30d;
}
# 媒体文件处理(如果有用户上传)
location /media/ {
alias /www/wwwroot/myproject/media/; # 替换为你的 media 路径
expires 30d;
}
# 反向X_X到 Python 项目
location / {
proxy_pass http://127.0.0.1:8000; # 必须与你 Python 项目中设置的端口一致
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 支持(如果需要)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
- 重载配置:保存配置文件后,点击【重载配置】按钮。
第五步:验证与排错
- 检查 Python 项目状态:
- 回到【Python项目管理器】,确认项目状态为“运行中”。
- 点击【日志】,查看是否有报错。常见错误包括:
Permission denied:确保项目目录及子目录对运行用户(通常是 www)有读写权限。ModuleNotFoundError:依赖没安装成功,去依赖管理里重新安装。
- 浏览器访问:
- 打开浏览器访问你的域名。
- 如果看到 Django 欢迎页面或你的应用界面,说明部署成功。
- 如果白屏或 502 Bad Gateway,重点检查 Nginx 错误日志(位于
/www/server/nginx/logs/error.log)和 Python 项目日志。
高级建议(避坑指南)
- 安全组放行:别忘了在云服务器厂商的控制台(阿里云/AWS/腾讯云等)安全组中,只开放 80 (HTTP) 和 443 (HTTPS) 端口。不要 将 Django 的内部端口(如 8000)直接暴露在公网。
- HTTPS 配置:在宝塔网站设置中,可以直接开启 HTTPS,并申请 Let’s Encrypt 免费证书,一键搞定 SSL。
- 开机自启:宝塔的 Python 项目管理器通常会自动处理服务重启,但如果服务器重启,确保 Gunicorn 服务能随系统启动。可以在 Python 项目管理器的【设置】中检查是否勾选了“开机自动启动”。
- DEBUG = False:生产环境中,务必在
settings.py中将DEBUG = False,并正确配置ALLOWED_HOSTS,否则会出现DisallowedHost错误。
按照这个流程走,基本不会出错。如果遇到具体报错,把日志贴出来,针对性解决即可。
云知道CLOUD