在 Ubuntu 22.04 上使用宝塔面板(BT Panel)部署 Django 项目,核心思路是将 Django 作为 Werkzeug/Gunicorn 进程运行,并通过 Nginx 进行反向X_X。虽然宝塔对 Python 项目有自动化的“宝塔应用”功能,但为了生产环境的稳定性和灵活性,建议采用更标准的 Nginx + Gunicorn 配置方式。
以下是详细的操作步骤:
第一步:环境准备
-
安装宝塔面板
如果尚未安装,请在终端执行官方安装脚本(注意选择专业版或免费版):wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh安装完成后,记下面板的登录地址、用户名和密码。
-
安装必要软件
进入宝塔面板 -> 软件商店,搜索并安装以下组件:- Nginx (Web 服务器)
- Python 3.8+ (Django 推荐版本,Ubuntu 22.04 自带较新 Python,但建议用宝塔管理的版本以防依赖冲突,或者直接使用系统自带 Python 3.10)
- MySQL 或 MariaDB (数据库)
- Redis (可选,用于缓存或 Celery)
提示:在宝塔中安装 Python 时,建议选择
Python 3.10或更高版本,因为 Ubuntu 22.04 默认自带的 Python 版本较高。
第二步:上传代码与创建虚拟环境
-
创建网站目录
- 在宝塔面板左侧菜单点击 网站 -> 添加站点。
- 输入域名(如果是本地测试可用
127.0.0.1或本机 IP),根目录建议设置为/www/wwwroot/你的域名。 - 创建成功后,点击进入该网站的管理页面。
-
上传代码
- 使用 文件 管理器,将你的 Django 项目源码上传到上述根目录(例如
/www/wwwroot/yourdomain.com)。 - 确保
.gitignore被正确忽略,不要上传__pycache__,*.pyc,venv等临时文件。
- 使用 文件 管理器,将你的 Django 项目源码上传到上述根目录(例如
-
创建 Python 虚拟环境
- 打开宝塔的 终端 或 SSH 连接。
- 进入项目目录:
cd /www/wwwroot/你的域名 - 创建虚拟环境(假设名为
venv):python3 -m venv venv - 激活虚拟环境:
source venv/bin/activate - 安装依赖:
pip install django gunicorn mysqlclient redis # 根据实际需求安装 - 生成静态文件(Django 必须执行此步):
python manage.py collectstatic --noinput - 退出虚拟环境(可选,后续启动脚本会重新激活):
deactivate
第三步:配置数据库
- 在宝塔 数据库 菜单中创建一个新的 MySQL 数据库和对应用户。
- 修改项目中的
settings.py文件,填入新的数据库账号密码:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '数据库名', 'USER': '数据库用户', 'PASSWORD': '数据库密码', 'HOST': 'localhost', 'PORT': '3306', 'OPTIONS': {'charset': 'utf8mb4'} } } - 迁移数据表:
source venv/bin/activate python manage.py migrate
第四步:配置 Nginx 反向X_X(关键步骤)
这是让 Django 对外提供服务的关键。
- 在宝塔 网站 列表,点击你的域名对应的 设置 -> 配置文件。
- 找到
location /部分,将其替换为以下标准 Nginx 配置(注意保留原有的其他配置):
server {
listen 80;
server_name your_domain.com; # 替换为你的域名
root /www/wwwroot/你的域名; # 替换为你的实际路径
# 静态文件处理
location /static/ {
alias /www/wwwroot/你的域名/static/;
expires 30d;
access_log off;
}
# 媒体文件处理 (如果有 MEDIA_ROOT)
location /media/ {
alias /www/wwwroot/你的域名/media/;
expires 30d;
access_log off;
}
# Django 动态请求转发
location / {
proxy_pass http://127.0.0.1:8000; # 端口需与下方 Gunicorn 监听端口一致
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";
}
}
- 保存配置。
第五步:启动 Gunicorn 守护进程
为了让 Django 常驻后台运行,我们需要使用 systemd 来管理 Gunicorn。
-
在宝塔 终端 创建服务文件:
sudo nano /etc/systemd/system/django-project.service -
粘贴以下内容(请根据实际情况修改路径和用户名):
[Unit] Description=Gunicorn instance to serve django-project After=network.target [Service] User=www-data # 宝塔通常使用的用户,也可以改为你的当前用户 Group=www-data WorkingDirectory=/www/wwwroot/你的域名 Environment="PATH=/www/wwwroot/你的域名/venv/bin" ExecStart=/www/wwwroot/你的域名/venv/bin/gunicorn --workers 3 --bind unix:/www/wwwroot/你的域名/gunicorn.sock --access-logfile - --error-logfile - myproject.wsgi:application [Install] WantedBy=multi-user.target注意:
myproject.wsgi:application中的myproject需替换为你实际的 Django 项目名称(即包含wsgi.py的那个文件夹名)。- 这里使用了
unix socket(gunicorn.sock) 而不是 TCP 端口,性能更好且更安全。如果你习惯用端口,可以将--bind改为--bind 127.0.0.1:8000,并记得修改 Nginx 配置中的proxy_pass。
-
启用并启动服务:
sudo systemctl daemon-reload sudo systemctl start django-project sudo systemctl enable django-project sudo systemctl status django-project检查状态是否为
active (running)。 -
修正 Nginx 配置以匹配 Socket
如果你在上面的 Service 文件中使用了unix socket,需要修改 Nginx 配置中的location /部分:location / { include uwsgi_params; uwsgi_pass unix:/www/wwwroot/你的域名/gunicorn.sock; # 或者手动指定头信息 proxy_pass http://unix:/www/wwwroot/你的域名/gunicorn.sock; 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; }(如果使用 TCP 端口模式,则保持第四步中的
proxy_pass http://127.0.0.1:8000;即可) -
重启 Nginx 使配置生效:
sudo nginx -t # 检查配置语法 sudo systemctl restart nginx
第六步:安全与 SSL 配置
-
开启 HTTPS
- 在宝塔 网站 -> SSL 中,申请 Let’s Encrypt 免费证书。
- 勾选“强制 HTTPS"。
-
防火墙设置
- 确保宝塔 安全 菜单中,放行了 80 和 443 端口(通常宝塔会自动处理)。
- 如果使用了云服务器(阿里云/腾讯云/AWS),记得在云控制台的安全组中也放行 80/443 端口。
-
调试常见问题
- 权限问题:如果 Nginx 无法读取文件或启动报错,尝试修改目录所有者:
sudo chown -R www-data:www-data /www/wwwroot/你的域名 - 日志查看:如果网站打不开,查看
/www/wwwroot/你的域名/error.log或 Nginx 的错误日志。
- 权限问题:如果 Nginx 无法读取文件或启动报错,尝试修改目录所有者:
通过以上步骤,你的 Django 项目就已经成功在 Ubuntu 22.04 + 宝塔面板上稳定运行了。
CLOUD技术博