在 Ubuntu 22.04 上使用宝塔面板(BT Panel)部署 Django 项目是一个非常高效的选择。由于 Django 依赖 Python 环境,而宝塔默认主要面向 Nginx/PHP,因此我们需要通过宝塔的“软件商店”安装 Python 环境,并配合 Nginx 进行反向X_X。
以下是完整的部署流程:
1. 准备环境与基础软件
首先登录宝塔面板,进入左侧菜单的 “软件商店”。
-
安装 Python 环境:
- 搜索
Python,选择Python 3.x(建议安装最新的稳定版,如 3.9 或 3.10)。 - 点击安装,等待完成。
- 注意:宝塔通常会自动配置好 pip 和虚拟环境工具。
- 搜索
-
安装 Nginx:
- 如果尚未安装,在软件商店搜索
Nginx并安装最新版本。
- 如果尚未安装,在软件商店搜索
-
安装 MySQL/MariaDB(可选,视你的数据库需求而定):
- 如果你的 Django 项目使用 MySQL,请在软件商店安装
MySQL或MariaDB,并创建对应的数据库和用户。
- 如果你的 Django 项目使用 MySQL,请在软件商店安装
2. 上传项目代码
- 打开宝塔左侧的 “文件” 菜单。
- 进入
/www/wwwroot/目录。 - 新建一个文件夹作为网站根目录(例如
my_django_project)。 - 将你的 Django 项目代码上传到该文件夹中。
- 推荐方式:使用 Git 克隆(在终端执行
git clone ...),或者使用 SFTP 工具(如 FileZilla)上传压缩包后解压。 - 重要:确保
.gitignore生效,不要上传__pycache__,*.pyc,db.sqlite3(如果是开发环境) 等敏感或临时文件。
- 推荐方式:使用 Git 克隆(在终端执行
3. 配置 Python 虚拟环境
为了隔离依赖,强烈建议在项目目录下创建虚拟环境。
-
在宝塔 “文件” 界面,右键点击你的项目文件夹,选择 “命令行”(或者直接在 SSH 终端操作)。
-
切换到项目目录并创建虚拟环境:
cd /www/wwwroot/my_django_project python3 -m venv venv source venv/bin/activate(激活成功后,命令行前会出现
(venv)标记) -
安装项目依赖 (
requirements.txt):pip install -r requirements.txt如果没有
requirements.txt,请手动安装django,gunicorn,psycopg2-binary(MySQL驱动),uvicorn(ASGI) 等核心包。
4. 配置 Django 项目设置
在部署到生产环境前,必须修改 settings.py 中的关键配置:
-
ALLOWED_HOSTS:
将ALLOWED_HOSTS = []修改为你的域名或 IP:ALLOWED_HOSTS = ['your_domain.com', '127.0.0.1', 'localhost'] -
DEBUG:
必须设置为False:DEBUG = False -
静态文件 (Static Files):
确保配置了收集静态文件的命令。在终端运行:python manage.py collectstatic --noinput这会将所有静态文件(CSS, JS, 图片)合并到你配置的
STATIC_ROOT目录中。 -
数据库配置:
根据你安装的数据库类型,更新DATABASES配置,确保密码、主机名正确。 -
Secret_KEY:
生成一个新的随机密钥替换SECRET_KEY,切勿使用开发时的密钥。
5. 启动应用 (Gunicorn)
Django 本身不适合直接处理高并发,生产环境通常使用 Gunicorn 作为 WSGI 服务器。
-
测试 Gunicorn 启动:
在项目目录下(确保已激活 venv)运行:gunicorn my_project_name.wsgi:application --bind 127.0.0.1:8000注意:请将
my_project_name替换为你manage.py同级目录下的项目名称(即包含wsgi.py的那个文件夹名)。- 如果启动成功且无报错,按
Ctrl+C停止。
- 如果启动成功且无报错,按
-
配置 Systemd 守护进程(推荐):
为了让 Gunicorn 开机自启并在后台运行,创建一个服务文件:sudo nano /etc/systemd/system/django-myproject.service填入以下内容(根据实际情况修改路径和用户名):
[Unit] Description=Django my_project daemon After=network.target [Service] User=www Group=www WorkingDirectory=/www/wwwroot/my_django_project ExecStart=/www/wwwroot/my_django_project/venv/bin/gunicorn --workers 3 --bind unix:/www/wwwroot/my_django_project/my_project.sock my_project_name.wsgi:application [Install] WantedBy=multi-user.target解释:这里使用了 Unix Socket (
unix:...) 与 Nginx 通信,比 TCP 端口更快更安全。保存退出后,启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable django-myproject sudo systemctl start django-myproject sudo systemctl status django-myproject
6. 配置 Nginx 反向X_X
回到宝塔面板 “网站” 菜单:
-
添加站点:
- 点击“添加站点”,输入域名,数据库选择“无”,PHP 版本选择“纯静态”或"Nginx"(因为 Django 是动态的,Nginx 只负责转发)。
- 或者,如果你已经有一个站点,可以直接编辑该站点的配置。
-
修改配置文件:
- 进入该网站的 “设置” -> “配置文件”。
- 找到
server { ... }块,删除默认的 PHP 配置部分,替换为以下 Nginx 配置以支持 Django + Gunicorn Socket:
server { listen 80; server_name your_domain.com; # 替换为你的域名 root /www/wwwroot/my_django_project; # 对应项目根目录 # 静态文件处理 location /static/ { alias /www/wwwroot/my_django_project/staticfiles/; # 对应 collectstatic 后的目录 expires 30d; add_header Cache-Control "public, immutable"; } # 媒体文件处理 (如果有 MEDIA_ROOT) location /media/ { alias /www/wwwroot/my_django_project/media/; expires 30d; } # 转发给 Gunicorn Socket location / { include proxy_params; proxy_pass http://unix:/www/wwwroot/my_django_project/my_project.sock; # 解决 WebSocket 问题 (如果需要) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 传递真实 IP 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; } }注意:请确保
my_project.sock的路径与你 systemd 配置中的路径完全一致。 -
重启 Nginx:
点击“保存”后,在宝塔首页点击“重启 Nginx”。
7. 常见问题排查
- 404 Not Found:检查
collectstatic是否执行成功,以及 Nginx 的alias路径是否正确指向了staticfiles目录。 - Permission Denied:Django 生成的文件(如 media 或日志)可能属于
root用户,但 Nginx 以www用户运行。请执行:chown -R www:www /www/wwwroot/my_django_project chmod -R 755 /www/wwwroot/my_django_project - 502 Bad Gateway:通常是 Gunicorn 没启动或 Socket 路径不对。检查
systemctl status django-myproject是否有报错。 - 白屏/500 错误:查看 Django 日志。可以在
settings.py中将LOGGING配置输出到文件,或者直接查看/var/log/nginx/error.log。
通过以上步骤,你的 Django 项目应该已经在 Ubuntu 22.04 + 宝塔面板上稳定运行了。
云计算