如何在Ubuntu 22.04上使用宝塔面板部署Django项目?

下面以 Ubuntu 22.04 + 宝塔面板(BT Panel)为例,给出一个从零部署 Django 项目的完整流程。假设你已经:

  • 有一台 Ubuntu 22.04 服务器
  • 已安装宝塔面板(Linux 版)
  • 有 Django 项目源码(本地或 Git 仓库)

一、基础环境准备

1. 登录宝塔并确认服务

  1. 用浏览器访问 http://你的IP:8888,登录宝塔。
  2. 在「软件商店」中安装以下必要组件(建议版本与系统兼容即可):
    • Nginx
    • MySQL / MariaDB(或 PostgreSQL,这里以 MySQL 为例)
    • PHP(可选,Django 不需要,但有时用于管理后台等)
    • Python 3.x(宝塔默认通常已有,可检查)

如果宝塔自带 Python 环境不够方便,推荐在虚拟环境中运行 Django。


二、创建数据库与用户(MySQL 示例)

  1. 在宝塔 → 「数据库」→ 添加数据库:
    • 名称:django_db
    • 用户名:django_user
    • 密码:自设强密码
    • 权限:全部勾选(或按需求设置)
  2. 记下数据库名、用户名、密码和主机(通常是 localhost)。

若使用 PostgreSQL,同理在「数据库」中添加,并在 Django 配置中使用相应驱动。


三、上传/克隆 Django 项目

方式 A:Git 克隆(推荐)

  1. 在宝塔 → 「文件」→ 进入网站根目录(如 /www/wwwroot/)。
  2. 新建一个文件夹,例如 myproject
  3. 在该目录下打开终端(宝塔 → 终端),执行:
cd /www/wwwroot/myproject
git clone https://github.com/你的用户/你的项目.git .
# 或者先 clone 到其他地方再 cp 过来

方式 B:压缩包上传

  1. 本地打包项目为 .tar.gz.zip
  2. 在宝塔 → 「文件」→ 上传压缩包到 /www/wwwroot/myproject
  3. 解压:
cd /www/wwwroot/myproject
tar -xzf your_project.tar.gz
# 或 unzip your_project.zip

四、配置 Python 虚拟环境

1. 创建虚拟环境

cd /www/wwwroot/myproject
python3 -m venv venv
source venv/bin/activate

激活后提示符应显示 (venv)

2. 升级 pip 并安装依赖

pip install --upgrade pip
pip install -r requirements.txt

如果项目没有 requirements.txt,可以手动安装:

pip install django gunicorn psycopg2-binary mysqlclient uwsgi  # 根据实际选择

五、配置 Django settings.py

  1. 编辑 settings.py(通常在项目根目录):

    • 设置 DEBUG = False(生产环境必须关闭)
    • 配置 ALLOWED_HOSTS
      ALLOWED_HOSTS = ['yourdomain.com', '127.0.0.1', 'localhost']
    • 配置数据库连接(以 MySQL 为例):
      DATABASES = {
       'default': {
           'ENGINE': 'django.db.backends.mysql',
           'NAME': 'django_db',
           'USER': 'django_user',
           'PASSWORD': 'your_password',
           'HOST': 'localhost',
           'PORT': '3306',
           'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
       }
      }
    • 静态文件配置(见下文六)。
  2. 在项目中运行迁移:

python manage.py migrate
  1. 创建超级用户(可选):
python manage.py createsuperuser
  1. 收集静态文件:
python manage.py collectstatic --noinput

六、配置 Nginx + Gunicorn/uWSGI

1. 在宝塔创建网站

  1. 宝塔 → 「网站」→ 添加站点:
    • 域名:填写你的域名(或留空仅 IP 访问)
    • 根目录:/www/wwwroot/myproject
    • 数据库:关联之前创建的 django_db(宝塔会帮你建好连接信息,但 Django 仍需自己配置)
    • 类型:选择 PHP纯静态 都可以,因为 Django 由 Gunicorn 运行,Nginx 只做反向X_X。
  2. 保存后,进入该网站的「配置文件」。

2. 安装 Gunicorn(推荐)

source venv/bin/activate
pip install gunicorn

测试启动(临时):

gunicorn myproject.wsgi:application --bind 127.0.0.1:8000

myproject 是项目主目录名(包含 wsgi.py 的目录),application 是 WSGI 可调用对象。

3. 编写 systemd 服务(推荐,持久化)

sudo nano /etc/systemd/system/django-myproject.service

内容示例:

[Unit]
Description=Gunicorn instance to serve Django project
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/www/wwwroot/myproject
Environment="PATH=/www/wwwroot/myproject/venv/bin"
ExecStart=/www/wwwroot/myproject/venv/bin/gunicorn 
          --workers 3 
          --bind unix:/www/wwwroot/myproject/gunicorn.sock 
          myproject.wsgi:application

[Install]
WantedBy=multi-user.target

然后:

sudo systemctl daemon-reload
sudo systemctl enable django-myproject
sudo systemctl start django-myproject
sudo systemctl status django-myproject

确保 gunicorn.sock 生成在正确路径,且权限允许 Nginx 访问。


七、配置 Nginx 反向X_X

在宝塔中编辑对应站点的 Nginx 配置(或直接在宝塔 → 网站 → 配置 → 修改):

server {
    listen 80;
    server_name yourdomain.com;  # 替换为你的域名

    root /www/wwwroot/myproject;
    index index.html index.htm index.php;

    location /static/ {
        alias /www/wwwroot/myproject/static/;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    location /media/ {
        alias /www/wwwroot/myproject/media/;
        expires 30d;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/www/wwwroot/myproject/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;
    }
}

注意:

  • yourdomain.com 替换为你自己的域名。
  • static/media/ 路径需与 Django 中 STATIC_ROOTMEDIA_ROOT 对应。

保存后,在宝塔 → 网站 → 点击「重载配置」或重启 Nginx。


八、开启 HTTPS(可选但推荐)

  1. 在宝塔 → 网站 → 找到你的站点 → SSL。
  2. 选择 Let’s Encrypt 免费证书:
    • 输入域名
    • 自动申请并启用 HTTPS
  3. 勾选“强制 HTTPS”,保存。

九、常见问题排查

  1. 页面 502 Bad Gateway

    • 检查 Gunicorn 是否运行:systemctl status django-myproject
    • 查看日志:journalctl -u django-myproject -f
    • 检查 socket 文件是否存在及权限:
      ls -l /www/wwwroot/myproject/gunicorn.sock
      sudo chown www-data:www-data /www/wwwroot/myproject/gunicorn.sock
  2. 静态文件不生效

    • 确认 collectstatic 已执行
    • 确认 Nginx 中 location /static/ 指向正确的 STATIC_ROOT
    • 检查 STATIC_URLSTATIC_ROOTsettings.py 中是否正确
  3. 数据库连接失败

    • 检查 settings.py 中的 DB 配置
    • 确认 MySQL 服务正常:systemctl status mysql
    • 尝试在服务器上 mysql -u django_user -p -h localhost 测试连接
  4. 权限问题

    • 确保项目目录所有者为 www-data
      sudo chown -R www-data:www-data /www/wwwroot/myproject

十、后续维护建议

  • 定期更新系统:apt update && apt upgrade
  • 定期备份数据库和静态文件
  • 使用宝塔的定时任务做备份
  • 监控 Gunicorn/Nginx 日志(可在宝塔 → 网站 → 日志中查看)

如果你提供:

  • 项目结构(是否有 manage.pywsgi.py
  • 使用的数据库类型(MySQL / PostgreSQL)
  • 是否需要多域名 / 多项目

我可以给出更贴合你情况的配置片段(包括具体的 settings.py 和 Nginx 配置)。

未经允许不得转载:CLOUD云枢 » 如何在Ubuntu 22.04上使用宝塔面板部署Django项目?