在 Ubuntu 22.04 上使用宝塔面板(Baota Panel)部署 Django 项目,最推荐且稳定的方式是使用 Python 虚拟环境 + Gunicorn + Nginx 的架构。虽然宝塔有“网站”功能,但直接运行 Python 脚本通常不如配置为反向X_X稳定。
以下是完整的操作步骤:
第一步:安装基础环境
- 登录宝塔面板:使用 root 账号登录你的服务器。
- 安装 Python 环境:
- 进入宝塔左侧菜单的 【软件商店】。
- 搜索并安装 Python。建议选择版本
3.9或3.10(Django 3.x/4.x 对这两个版本支持最好)。 - 安装完成后,点击右侧的 “设置”,确保已勾选 “开启 pip 管理” 和 “开启虚拟环境”(这很重要,方便后续隔离依赖)。
第二步:上传代码与创建目录
- 创建项目目录:
- 进入 【文件】 菜单。
- 建议将项目放在
/www/wwwroot/你的域名下,或者自定义一个目录如/www/wwwroot/my_django_project。 - 在该目录下创建一个文件夹(例如
project_name)。
- 上传代码:
- 将你的 Django 项目源码上传到该文件夹中。
- 注意:请确保上传了
requirements.txt文件,并且.gitignore正确排除了__pycache__、.env等敏感或临时文件。
第三步:配置虚拟环境与安装依赖
- 打开终端:
- 在宝塔左侧菜单选择 【终端】,或者通过 SSH 连接服务器。
-
激活虚拟环境(假设你刚才安装了 Python 3.10):
# 进入项目目录 cd /www/wwwroot/my_django_project/project_name # 创建虚拟环境 (如果还没创建) python3 -m venv venv # 激活虚拟环境 source venv/bin/activate此时命令行提示符前会出现
(venv)字样。 -
安装依赖:
# 升级 pip pip install --upgrade pip # 安装 requirements.txt 中的包 pip install -r requirements.txt如果报错缺少
libpq-dev或python3-dev等系统库,请先运行sudo apt update && sudo apt install libpq-dev python3-dev build-essential。
第四步:配置 Django 生产环境
在部署前,必须修改 settings.py 以适应生产环境:
- 允许访问 IP:
找到ALLOWED_HOSTS,添加你的域名或 IP:ALLOWED_HOSTS = ['your-domain.com', 'localhost', '127.0.0.1', 'your-server-ip'] - 关闭调试模式:
务必设置为False:DEBUG = False - 静态文件处理:
- 确保
STATIC_ROOT路径存在且可写。 - 运行收集命令生成静态文件:
python manage.py collectstatic --noinput - 注意:如果你使用了环境变量(如数据库密码),请确保
.env文件已配置好,并在settings.py中正确加载(推荐使用python-decouple或django-environ)。
- 确保
第五步:在宝塔创建网站并配置 Nginx
这是最关键的一步,让 Nginx 转发请求给 Django。
-
创建网站:
- 进入 【网站】 菜单 -> 【添加站点】。
- 输入域名(需解析到服务器 IP)。
- 根目录:指向你的项目根目录(即包含
manage.py的那个文件夹,例如/www/wwwroot/my_django_project/project_name)。 - PHP 版本:选择 "纯静态" 或 "Python"(如果有此选项,选纯静态更安全,后面手动配 Nginx)。
- 点击确定。
-
配置 Nginx 反向X_X:
- 在网站列表中,点击你的域名右侧的 【设置】 -> 【配置文件】。
- 找到
location / { ... }部分,将其替换为以下配置(保留原有的index指令,主要修改 location):
server { listen 80; server_name your-domain.com; # 替换为你的域名 root /www/wwwroot/my_django_project/project_name; # 替换为你的实际路径 index index.html index.htm; # Django 静态文件 (可选,Nginx 直接托管静态文件性能更好) location /static/ { alias /www/wwwroot/my_django_project/project_name/staticfiles/; # 替换为你 collectstatic 生成的路径 expires 30d; } # 核心配置:反向X_X到 Gunicorn 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"; } # 防止访问 .env 等敏感文件 location ~ /.env { deny all; } }保存后点击“重载配置”。
第六步:启动 Gunicorn 服务
你需要一个进程管理器来长期运行 Gunicorn。宝塔本身没有内置完美的 Gunicorn 守护进程,我们可以利用 Linux 自带的 systemd 来管理,或者使用宝塔的“计划任务”配合 nohup(不推荐,容易重启失效)。
推荐方式:使用 systemd 管理
-
创建服务文件:
在终端执行:sudo nano /etc/systemd/system/django.service -
粘贴以下内容(请根据实际路径修改):
[Unit] Description=Django Project After=network.target [Service] User=root Group=www WorkingDirectory=/www/wwwroot/my_django_project/project_name Environment="PATH=/www/wwwroot/my_django_project/project_name/venv/bin" ExecStart=/www/wwwroot/my_django_project/project_name/venv/bin/gunicorn --workers 3 --bind unix:/www/wwwroot/my_django_project/project_name/django.sock myproject.wsgi:application # 注意:myproject 是你的 django 项目名称,wsgi:application 是入口点 [Install] WantedBy=multi-user.target注意:如果你的 Django 项目在
settings.py中定义了WSGI_APPLICATION,通常是project_name.wsgi.application。 -
启动服务:
sudo systemctl daemon-reload sudo systemctl start django sudo systemctl enable django # 开机自启 sudo systemctl status django -
修改 Nginx 配置以匹配 Socket:
回到宝塔的 Nginx 配置文件,将proxy_pass从http://127.0.0.1:8000改为 socket 路径:location / { proxy_pass http://unix:/www/wwwroot/my_django_project/project_name/django.sock; # ... 其他 header 配置保持不变 }保存并重载 Nginx。
第七步:验证与测试
- 检查防火墙:确保宝塔面板的防火墙已放行 80 和 443 端口(默认通常已放行)。
- 浏览器访问:输入你的域名,应该能看到 Django 首页。
- 日志排查:如果页面无法访问,查看:
- 宝塔网站日志(错误日志)。
- 系统日志:
journalctl -u django -f。
常见问题提示
- Permission Denied:确保
/www/wwwroot/...目录及其子目录的权限属于www用户(宝塔默认 Web 用户),可以使用chown -R www:www /path/to/project修复。 - Static Files 404:检查 Nginx 配置中的
alias路径是否与实际collectstatic输出的路径完全一致。 - 数据库连接失败:如果是远程数据库,确保数据库允许了当前服务器 IP 的连接;如果是本地 MySQL,确保
127.0.0.1没有被防火墙拦截。
按照以上步骤,你就可以在 Ubuntu 22.04 上通过宝塔面板稳定地运行 Django 项目了。
云服务器