阿里云服务器Ubuntu 22.04安装宝塔后如何配置Django?

在阿里云 Ubuntu 22.04 上安装宝塔面板后配置 Django,推荐采用 “宝塔 Nginx + Gunicorn + Python3” 的经典组合。这种方式既利用了宝塔的可视化优势,又能保证生产环境的性能。

以下是完整的操作步骤:

第一步:准备环境(通过宝塔面板)

  1. 登录宝塔面板:使用 SSH 工具(如 Xshell、PuTTY)或直接在浏览器访问 http://你的IP:8888 登录。
  2. 安装软件栈
    • 进入左侧菜单 【软件商店】
    • 搜索并安装 Nginx(建议版本 1.24+)。
    • 搜索并安装 Python3.9(Django 3.x/4.x 推荐使用 Python 3.9 或 3.10,Ubuntu 22.04 默认源可能较新,直接选最新版即可)。
    • 安装完成后,点击 Python3 旁边的 【设置】 -> 【管理插件】,确保安装了 pipvirtualenv(通常默认已装)。

第二步:创建项目目录与虚拟环境

  1. 创建网站目录

    • 在宝塔左侧菜单进入 【文件】
    • /www/wwwroot/ 下创建一个文件夹,例如 my_django_project
    • 将该文件夹的权限设置为 755,所有者设为 www(或者你当前登录的用户)。
  2. 上传代码

    • 将你的 Django 项目代码上传到 /www/wwwroot/my_django_project/
    • 确保根目录下有 manage.pyrequirements.txt(如果有的话)。
  3. 初始化虚拟环境

    • 打开宝塔的 【终端】(SSH 连接)。
    • 切换到项目目录并创建虚拟环境:
      cd /www/wwwroot/my_django_project
      python3 -m venv venv
      source venv/bin/activate
    • 安装依赖(根据你的 requirements.txt 或手动安装):
      pip install django gunicorn psycopg2-binary  # 如果是 MySQL 则换成 mysqlclient
    • 注意:如果需要使用数据库,请先在宝塔【数据库】中创建好对应的库和用户,并更新 settings.py 中的配置。

第三步:配置 Django (settings.py)

修改项目根目录下的 settings.py 文件:

  1. ALLOWED_HOSTS
    必须添加你的域名或服务器 IP,否则 Django 会报错 403。

    ALLOWED_HOSTS = ['your-domain.com', '127.0.0.1', 'YOUR_SERVER_IP']
  2. 静态文件配置
    确保 STATIC_URLSTATIC_ROOT 配置正确。

    import os
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') # 确保这个路径存在且有写入权限
  3. 收集静态文件
    在终端运行以下命令生成静态文件到 staticfiles 目录:

    python manage.py collectstatic --noinput

    此时,/www/wwwroot/my_django_project/staticfiles/ 目录下会有大量静态文件。

  4. 开启 DEBUG 模式(可选)
    生产环境建议关闭 DEBUG,但在调试时可暂时保持 True

    DEBUG = False

第四步:在宝塔创建站点并配置 Nginx

  1. 创建站点

    • 进入宝塔 【网站】 -> 【添加站点】
    • 输入域名(如果没有域名,可以先填 IP),选择 Python 版本(选择你刚才安装的 Python3.9)。
    • 在“根目录”处,手动填写项目路径:/www/wwwroot/my_django_project
    • 点击提交。
  2. 配置 Nginx 反向X_X

    • 进入该站点的 【设置】 -> 【配置文件】
    • 找到 server { ... } 块,在 location / 部分进行如下修改(这是关键步骤):
    server {
        listen 80;
        server_name your-domain.com; # 替换为你的域名
    
        root /www/wwwroot/my_django_project; # 替换为实际路径
    
        # 静态文件处理 (指向 collectstatic 生成的目录)
        location /static/ {
            alias /www/wwwroot/my_django_project/staticfiles/;
            expires 30d;
            add_header Cache-Control "public, immutable";
        }
    
        # Django 应用处理
        location / {
            proxy_pass http://127.0.0.1:8000; # 端口后面定义
            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;
        }
    }

    保存并重启 Nginx。

第五步:启动 Gunicorn (守护进程)

Gunicorn 是负责运行 Django 应用的 WSGI 服务器。

  1. 创建启动脚本
    在宝塔左侧菜单进入 【计划任务】 -> 【添加计划任务】 -> 【Shell 脚本】(或者直接写一个 systemd 服务,推荐 systemd 方式更稳定)。

    推荐方式:使用 Systemd 管理(最稳定)

    在终端执行:

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

    粘贴以下内容(请根据实际情况修改路径):

    [Unit]
    Description=Django myproject 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/myproject.sock 
              myproject.wsgi:application
    Restart=always
    
    [Install]
    WantedBy=multi-user.target

    注意:myproject.wsgi:application 中的 myproject 需替换为你实际的 Django 项目名称(即包含 wsgi.py 的那个文件夹名)。

    保存退出 (Ctrl+O, Enter, Ctrl+X),然后启动服务:

    systemctl start django-myproject.service
    systemctl enable django-myproject.service
    systemctl status django-myproject.service
  2. 调整 Nginx 配置以匹配 Socket
    回到宝塔 【网站】 -> 【设置】 -> 【配置文件】
    由于我们使用了 Unix Socket (myproject.sock),需要修改 location / 部分:

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/www/wwwroot/my_django_project/myproject.sock;
        uwsgi_param UWSGI_CHDIR /www/wwwroot/my_django_project;
        uwsgi_param UWSGI_PYHOME /www/wwwroot/my_django_project/venv;
        uwsgi_param UWSGI_VIRTUALENV /www/wwwroot/my_django_project/venv;
        uwsgi_param UWSGI_SCRIPT myproject.wsgi:application;
    }

    (注:如果你不想用 socket,也可以改回 proxy_pass http://127.0.0.1:8000;,但需要在 Gunicorn 启动命令中加 --bind 127.0.0.1:8000)

    保存并重载 Nginx

第六步:防火墙与安全组

  1. 宝塔防火墙

    • 进入 【安全】 页面。
    • 确保 80 (HTTP) 和 443 (HTTPS) 端口已放行。
    • 如果使用 HTTPS,记得申请证书。
  2. 阿里云安全组

    • 登录阿里云控制台 -> ECS 实例 -> 安全组。
    • 添加入方向规则:允许 TCP 协议的 80443 端口。

常见问题排查

  • 502 Bad Gateway
    • 检查 Gunicorn 是否启动成功:systemctl status django-myproject.service
    • 检查 Nginx 错误日志:tail -f /www/wwwlogs/你的域名-error.log
    • 检查 settings.py 中的 ALLOWED_HOSTS 是否包含了域名。
  • 权限问题
    • 确保 /www/wwwroot/my_django_project/ 及其子目录属于 www 用户。
    • chmod -R 755 /www/wwwroot/my_django_project
    • chown -R www:www /www/wwwroot/my_django_project
  • 数据库连接失败
    • 确认 settings.py 中的数据库密码、用户名是否正确。
    • 确认宝塔数据库中该用户是否有远程连接权限(虽然本地通常不需要,但需确认 host 设置为 %localhost)。

完成以上步骤后,访问你的域名即可看到 Django 首页。

未经允许不得转载:云知识CLOUD » 阿里云服务器Ubuntu 22.04安装宝塔后如何配置Django?