ubuntu22.04宝塔部署django项目?

在 Ubuntu 22.04 上使用宝塔面板(BT Panel)部署 Django 项目是一个非常高效的选择。由于 Django 依赖 Python 环境,而宝塔默认主要面向 Nginx/PHP,因此我们需要通过宝塔的“软件商店”安装 Python 环境,并配合 Nginx 进行反向X_X。

以下是完整的部署流程:

1. 准备环境与基础软件

首先登录宝塔面板,进入左侧菜单的 “软件商店”

  1. 安装 Python 环境

    • 搜索 Python,选择 Python 3.x(建议安装最新的稳定版,如 3.9 或 3.10)。
    • 点击安装,等待完成。
    • 注意:宝塔通常会自动配置好 pip 和虚拟环境工具。
  2. 安装 Nginx

    • 如果尚未安装,在软件商店搜索 Nginx 并安装最新版本。
  3. 安装 MySQL/MariaDB(可选,视你的数据库需求而定):

    • 如果你的 Django 项目使用 MySQL,请在软件商店安装 MySQLMariaDB,并创建对应的数据库和用户。

2. 上传项目代码

  1. 打开宝塔左侧的 “文件” 菜单。
  2. 进入 /www/wwwroot/ 目录。
  3. 新建一个文件夹作为网站根目录(例如 my_django_project)。
  4. 将你的 Django 项目代码上传到该文件夹中。
    • 推荐方式:使用 Git 克隆(在终端执行 git clone ...),或者使用 SFTP 工具(如 FileZilla)上传压缩包后解压。
    • 重要:确保 .gitignore 生效,不要上传 __pycache__, *.pyc, db.sqlite3 (如果是开发环境) 等敏感或临时文件。

3. 配置 Python 虚拟环境

为了隔离依赖,强烈建议在项目目录下创建虚拟环境。

  1. 在宝塔 “文件” 界面,右键点击你的项目文件夹,选择 “命令行”(或者直接在 SSH 终端操作)。

  2. 切换到项目目录并创建虚拟环境:

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

    (激活成功后,命令行前会出现 (venv) 标记)

  3. 安装项目依赖 (requirements.txt):

    pip install -r requirements.txt

    如果没有 requirements.txt,请手动安装 django, gunicorn, psycopg2-binary (MySQL驱动), uvicorn (ASGI) 等核心包。


4. 配置 Django 项目设置

在部署到生产环境前,必须修改 settings.py 中的关键配置:

  1. ALLOWED_HOSTS
    ALLOWED_HOSTS = [] 修改为你的域名或 IP:

    ALLOWED_HOSTS = ['your_domain.com', '127.0.0.1', 'localhost']
  2. DEBUG
    必须设置为 False

    DEBUG = False
  3. 静态文件 (Static Files)
    确保配置了收集静态文件的命令。在终端运行:

    python manage.py collectstatic --noinput

    这会将所有静态文件(CSS, JS, 图片)合并到你配置的 STATIC_ROOT 目录中。

  4. 数据库配置
    根据你安装的数据库类型,更新 DATABASES 配置,确保密码、主机名正确。

  5. Secret_KEY
    生成一个新的随机密钥替换 SECRET_KEY,切勿使用开发时的密钥。


5. 启动应用 (Gunicorn)

Django 本身不适合直接处理高并发,生产环境通常使用 Gunicorn 作为 WSGI 服务器。

  1. 测试 Gunicorn 启动
    在项目目录下(确保已激活 venv)运行:

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

    注意:请将 my_project_name 替换为你 manage.py 同级目录下的项目名称(即包含 wsgi.py 的那个文件夹名)。

    • 如果启动成功且无报错,按 Ctrl+C 停止。
  2. 配置 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

回到宝塔面板 “网站” 菜单:

  1. 添加站点

    • 点击“添加站点”,输入域名,数据库选择“无”,PHP 版本选择“纯静态”或"Nginx"(因为 Django 是动态的,Nginx 只负责转发)。
    • 或者,如果你已经有一个站点,可以直接编辑该站点的配置。
  2. 修改配置文件

    • 进入该网站的 “设置” -> “配置文件”
    • 找到 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 配置中的路径完全一致。

  3. 重启 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 + 宝塔面板上稳定运行了。

未经允许不得转载:云计算 » ubuntu22.04宝塔部署django项目?