奋斗
努力

ubuntu22.04宝塔部署django项目?

云计算

在 Ubuntu 22.04 上使用宝塔面板(Baota Panel)部署 Django 项目,最推荐且稳定的方式是使用 Python 虚拟环境 + Gunicorn + Nginx 的架构。虽然宝塔有“网站”功能,但直接运行 Python 脚本通常不如配置为反向X_X稳定。

以下是完整的操作步骤:

第一步:安装基础环境

  1. 登录宝塔面板:使用 root 账号登录你的服务器。
  2. 安装 Python 环境:
    • 进入宝塔左侧菜单的 【软件商店】。
    • 搜索并安装 Python。建议选择版本 3.9 或 3.10(Django 3.x/4.x 对这两个版本支持最好)。
    • 安装完成后,点击右侧的 “设置”,确保已勾选 “开启 pip 管理” 和 “开启虚拟环境”(这很重要,方便后续隔离依赖)。

第二步:上传代码与创建目录

  1. 创建项目目录:
    • 进入 【文件】 菜单。
    • 建议将项目放在 /www/wwwroot/你的域名 下,或者自定义一个目录如 /www/wwwroot/my_django_project。
    • 在该目录下创建一个文件夹(例如 project_name)。
  2. 上传代码:
    • 将你的 Django 项目源码上传到该文件夹中。
    • 注意:请确保上传了 requirements.txt 文件,并且 .gitignore 正确排除了 __pycache__、.env 等敏感或临时文件。

第三步:配置虚拟环境与安装依赖

  1. 打开终端:
    • 在宝塔左侧菜单选择 【终端】,或者通过 SSH 连接服务器。
  2. 激活虚拟环境(假设你刚才安装了 Python 3.10):

    # 进入项目目录
    cd /www/wwwroot/my_django_project/project_name
    
    # 创建虚拟环境 (如果还没创建)
    python3 -m venv venv
    
    # 激活虚拟环境
    source venv/bin/activate

    此时命令行提示符前会出现 (venv) 字样。

  3. 安装依赖:

    # 升级 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 以适应生产环境:

  1. 允许访问 IP:
    找到 ALLOWED_HOSTS,添加你的域名或 IP:

    ALLOWED_HOSTS = ['your-domain.com', 'localhost', '127.0.0.1', 'your-server-ip']
  2. 关闭调试模式:
    务必设置为 False:

    DEBUG = False
  3. 静态文件处理:
    • 确保 STATIC_ROOT 路径存在且可写。
    • 运行收集命令生成静态文件:
      python manage.py collectstatic --noinput
    • 注意:如果你使用了环境变量(如数据库密码),请确保 .env 文件已配置好,并在 settings.py 中正确加载(推荐使用 python-decouple 或 django-environ)。

第五步:在宝塔创建网站并配置 Nginx

这是最关键的一步,让 Nginx 转发请求给 Django。

  1. 创建网站:

    • 进入 【网站】 菜单 -> 【添加站点】。
    • 输入域名(需解析到服务器 IP)。
    • 根目录:指向你的项目根目录(即包含 manage.py 的那个文件夹,例如 /www/wwwroot/my_django_project/project_name)。
    • PHP 版本:选择 "纯静态" 或 "Python"(如果有此选项,选纯静态更安全,后面手动配 Nginx)。
    • 点击确定。
  2. 配置 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 管理

  1. 创建服务文件:
    在终端执行:

    sudo nano /etc/systemd/system/django.service
  2. 粘贴以下内容(请根据实际路径修改):

    [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。

  3. 启动服务:

    sudo systemctl daemon-reload
    sudo systemctl start django
    sudo systemctl enable django # 开机自启
    sudo systemctl status django
  4. 修改 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。

第七步:验证与测试

  1. 检查防火墙:确保宝塔面板的防火墙已放行 80 和 443 端口(默认通常已放行)。
  2. 浏览器访问:输入你的域名,应该能看到 Django 首页。
  3. 日志排查:如果页面无法访问,查看:
    • 宝塔网站日志(错误日志)。
    • 系统日志: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 项目了。

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