ubuntu22.04宝塔部署django项目?

在 Ubuntu 22.04 上使用宝塔面板(BT Panel)部署 Django 项目,核心思路是将 Django 作为 Werkzeug/Gunicorn 进程运行,并通过 Nginx 进行反向X_X。虽然宝塔对 Python 项目有自动化的“宝塔应用”功能,但为了生产环境的稳定性和灵活性,建议采用更标准的 Nginx + Gunicorn 配置方式。

以下是详细的操作步骤:

第一步:环境准备

  1. 安装宝塔面板
    如果尚未安装,请在终端执行官方安装脚本(注意选择专业版或免费版):

    wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh

    安装完成后,记下面板的登录地址、用户名和密码。

  2. 安装必要软件
    进入宝塔面板 -> 软件商店,搜索并安装以下组件:

    • Nginx (Web 服务器)
    • Python 3.8+ (Django 推荐版本,Ubuntu 22.04 自带较新 Python,但建议用宝塔管理的版本以防依赖冲突,或者直接使用系统自带 Python 3.10)
    • MySQLMariaDB (数据库)
    • Redis (可选,用于缓存或 Celery)

    提示:在宝塔中安装 Python 时,建议选择 Python 3.10 或更高版本,因为 Ubuntu 22.04 默认自带的 Python 版本较高。

第二步:上传代码与创建虚拟环境

  1. 创建网站目录

    • 在宝塔面板左侧菜单点击 网站 -> 添加站点
    • 输入域名(如果是本地测试可用 127.0.0.1 或本机 IP),根目录建议设置为 /www/wwwroot/你的域名
    • 创建成功后,点击进入该网站的管理页面。
  2. 上传代码

    • 使用 文件 管理器,将你的 Django 项目源码上传到上述根目录(例如 /www/wwwroot/yourdomain.com)。
    • 确保 .gitignore 被正确忽略,不要上传 __pycache__, *.pyc, venv 等临时文件。
  3. 创建 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

第三步:配置数据库

  1. 在宝塔 数据库 菜单中创建一个新的 MySQL 数据库和对应用户。
  2. 修改项目中的 settings.py 文件,填入新的数据库账号密码:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': '数据库名',
            'USER': '数据库用户',
            'PASSWORD': '数据库密码',
            'HOST': 'localhost',
            'PORT': '3306',
            'OPTIONS': {'charset': 'utf8mb4'}
        }
    }
  3. 迁移数据表:
    source venv/bin/activate
    python manage.py migrate

第四步:配置 Nginx 反向X_X(关键步骤)

这是让 Django 对外提供服务的关键。

  1. 在宝塔 网站 列表,点击你的域名对应的 设置 -> 配置文件
  2. 找到 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";
    }
}
  1. 保存配置。

第五步:启动 Gunicorn 守护进程

为了让 Django 常驻后台运行,我们需要使用 systemd 来管理 Gunicorn。

  1. 在宝塔 终端 创建服务文件:

    sudo nano /etc/systemd/system/django-project.service
  2. 粘贴以下内容(请根据实际情况修改路径和用户名):

    [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
  3. 启用并启动服务:

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

    检查状态是否为 active (running)

  4. 修正 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; 即可)

  5. 重启 Nginx 使配置生效:

    sudo nginx -t  # 检查配置语法
    sudo systemctl restart nginx

第六步:安全与 SSL 配置

  1. 开启 HTTPS

    • 在宝塔 网站 -> SSL 中,申请 Let’s Encrypt 免费证书。
    • 勾选“强制 HTTPS"。
  2. 防火墙设置

    • 确保宝塔 安全 菜单中,放行了 80 和 443 端口(通常宝塔会自动处理)。
    • 如果使用了云服务器(阿里云/腾讯云/AWS),记得在云控制台的安全组中也放行 80/443 端口。
  3. 调试常见问题

    • 权限问题:如果 Nginx 无法读取文件或启动报错,尝试修改目录所有者:
      sudo chown -R www-data:www-data /www/wwwroot/你的域名
    • 日志查看:如果网站打不开,查看 /www/wwwroot/你的域名/error.log 或 Nginx 的错误日志。

通过以上步骤,你的 Django 项目就已经成功在 Ubuntu 22.04 + 宝塔面板上稳定运行了。

未经允许不得转载:CLOUD技术博 » ubuntu22.04宝塔部署django项目?