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

在阿里云 Ubuntu 22.04 上安装宝塔面板后配置 Django,建议采用“宝塔 + Nginx + Gunicorn + Python 虚拟环境”的标准生产模式。这种方式既利用了宝塔的图形化管理便利性,又能保证 Django 应用的安全性和性能。

以下是完整的操作指南:

第一步:准备工作(系统级)

  1. 登录宝塔面板
    使用浏览器访问 http://你的服务器IP:8888,输入用户名和密码登录。

  2. 安装必要的软件栈
    在宝塔左侧菜单点击 “软件商店”,确保安装了以下核心组件(如果未安装):

    • Nginx (Web 服务器)
    • Python 3.x (宝塔通常自带 Python 3.9+,请确认版本)
    • MySQL/MariaDB (用于数据库,或者使用 SQLite/Redis)
    • Redis (可选,用于缓存或 Celery)
    • Git (用于拉取代码)

    注意:Ubuntu 22.04 默认可能预装了 Python 3.10,宝塔有时会自动管理。建议在终端检查:python3 --version。如果宝塔自带的 Python 版本过旧,可以在软件商店搜索 "Python" 并安装指定版本(如 3.10 或 3.11),但需注意后续路径配置。


第二步:创建网站与目录结构

  1. 创建网站站点

    • 进入 “网站” -> “添加站点”
    • 填写域名(如果没有域名,可以先填 IP 或 localhost)。
    • 根目录:建议自定义,例如 /www/wwwroot/my_django_app
    • PHP 版本:选择“纯静态”或“无”。
    • 数据库:根据需求选择(Django 需要 MySQL/PostgreSQL 时在此创建,若用 SQLite 可跳过)。
    • 点击确定,等待创建完成。
  2. 上传代码

    • 进入 “文件”,打开刚才创建的目录 (/www/wwwroot/my_django_app)。
    • 将你的 Django 项目源码上传到该目录(建议使用 FTP 工具如 FileZilla,或在宝塔终端使用 git clone / scp)。
    • 关键结构:确保 manage.py 位于根目录下,且包含 requirements.txtstatic/media/ 等文件夹。

第三步:配置 Python 虚拟环境(推荐)

为了隔离依赖,不要直接在系统 Python 下安装包。

  1. 进入终端
    在宝塔左侧菜单点击 “终端”,切换到网站目录:

    cd /www/wwwroot/my_django_app
  2. 创建虚拟环境

    # 假设你使用的是系统默认的 python3
    python3 -m venv venv
    source venv/bin/activate

    激活后,命令行提示符前会出现 (venv) 字样。

  3. 安装依赖

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

    注意:如果 requirements.txt 中没有 gunicornpsycopg2-binary (如果是 PostgreSQL),请手动添加。
    如果是 MySQL,通常需要安装 mysqlclientpymysql

  4. 收集静态文件
    settings.py 中已配置好 STATIC_ROOT 后,执行:

    python manage.py collectstatic --noinput

    这会将所有静态文件汇总到指定的目录(通常是 staticfiles 或你配置的 STATIC_ROOT)。

  5. 设置环境变量
    编辑 .env 文件或直接在终端导出关键变量(生产环境强烈建议使用 .env 文件配合 python-decoupledjango-environ):

    export DJANGO_SETTINGS_MODULE=myproject.settings.production
    export SECRET_KEY=你的超安全密钥
    export DEBUG=False
    export ALLOWED_HOSTS='*' # 生产环境需替换为具体域名

    建议创建一个 start_gunicorn.sh 脚本,将所有命令写入其中,方便调用。


第四步:启动 Django (Gunicorn)

Django 自带的开发服务器 (runserver) 不能用于生产环境,必须使用 Gunicorn

  1. 测试启动
    在终端运行(假设你的主程序名为 myproject,WSGI 模块为 myproject.wsgi):

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

    如果看到 Starting gunicorn... 且无报错,说明配置正确。按 Ctrl+C 停止。

  2. 配置 Systemd 守护进程 (宝塔方式)
    为了让服务开机自启并在后台稳定运行,我们需要创建一个 systemd 服务文件。

    • 在宝塔 “终端” 中输入:

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

      [Unit]
      Description=Django App
      After=network.target
      
      [Service]
      User=www
      Group=www
      WorkingDirectory=/www/wwwroot/my_django_app
      Environment="PATH=/www/wwwroot/my_django_app/venv/bin"
      ExecStart=/www/wwwroot/my_django_app/venv/bin/gunicorn myproject.wsgi:application --workers 3 --bind unix:/www/wwwroot/my_django_app/gunicorn.sock
      
      [Install]
      WantedBy=multi-user.target

      注意:UserGroup 通常设为 www (宝塔默认用户)。ExecStart 中的路径要对应你的实际项目名和 WSGI 入口。

    • 保存退出 (Ctrl+O, Enter, Ctrl+X)。

    • 启动服务:

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

第五步:配置 Nginx 反向X_X

现在 Django 正在监听一个 Unix Socket (gunicorn.sock),需要 Nginx 来转发请求。

  1. 找到站点配置文件
    在宝塔 “网站” 列表,点击你的 Django 站点右侧的 “设置” -> “配置文件”

  2. 替换内容
    删除原有的 PHP 配置,替换为如下 Nginx 配置:

    server {
        listen 80;
        server_name your_domain.com; # 替换为你的域名
    
        # 静态文件处理
        location /static/ {
            alias /www/wwwroot/my_django_app/staticfiles/; # 替换为你 collectstatic 后的目录
            expires 30d;
            add_header Cache-Control "public, immutable";
        }
    
        # 媒体文件处理 (如果有用户上传的文件)
        location /media/ {
            alias /www/wwwroot/my_django_app/media/;
            expires 30d;
        }
    
        # 动态请求转发给 Gunicorn
        location / {
            include proxy_params;
            proxy_pass http://unix:/www/wwwroot/my_django_app/gunicorn.sock;
    
            # 防止超时
            proxy_read_timeout 60s;
            proxy_connect_timeout 60s;
            proxy_send_timeout 60s;
        }
    }

    注意:如果你的 collectstatic 输出目录不是 staticfiles,请修改 alias 路径。

  3. 重载 Nginx
    在宝塔 “网站” 页面点击 “重载配置”,或者在终端执行 sudo nginx -t && sudo systemctl reload nginx


第六步:数据库与安全配置

  1. 修改 settings.py
    确保 DEBUG = False
    确保 ALLOWED_HOSTS 包含了你的域名:

    ALLOWED_HOSTS = ['your_domain.com', 'localhost', '127.0.0.1']

    配置数据库连接(使用宝塔创建的 MySQL 账号密码)。

  2. SSL 证书 (HTTPS)
    在宝塔 “网站” -> “SSL” 中,申请免费 Let’s Encrypt 证书并开启 HTTPS。

    • 开启后,记得在 settings.py 中添加 SECURE_SSL_REDIRECT = TrueSESSION_COOKIE_SECURE = True
  3. 防火墙设置
    确保阿里云控制台的安全组开放了 80443 端口。

    • 宝塔内部不需要开放 Django 端口(8000),因为它是通过 Nginx (80/443) 转发的。

常见问题排查

  • Permission Denied: 如果 Nginx 无法读取 socket 或文件,检查目录权限。
    sudo chown -R www:www /www/wwwroot/my_django_app
    sudo chmod -R 755 /www/wwwroot/my_django_app
  • Import Error: 如果提示找不到某个库,检查是否激活了虚拟环境,或者 requirements.txt 是否完整。
  • Static files 404: 检查 collectstatic 是否成功运行,以及 Nginx 配置中的 alias 路径是否与物理路径完全一致。
  • Database Connection Refused: 检查 MySQL 是否允许远程连接(虽然本地 Django 连本地 MySQL 通常没问题),或者防火墙是否拦截了 3306 端口(本地连接通常不受影响,除非配置了 bind-address)。

按照以上步骤,你的 Django 应用即可在阿里云 Ubuntu 22.04 + 宝塔面板环境下稳定运行。

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