走啊走
加油

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

服务器价格表

在阿里云 Ubuntu 22.04 上安装宝塔面板后配置 Django,推荐采用“宝塔 Nginx + Gunicorn + Python3”的标准生产环境方案。虽然宝塔有自带的“网站”功能,但 Django 项目通常需要自定义部署流程,直接通过宝塔的“文件管理”和“终端”操作最为灵活。

以下是完整的操作步骤:

第一步:环境准备与依赖安装

  1. 登录宝塔面板

    • 打开浏览器访问 http://你的服务器IP:8888,输入账号密码登录。
  2. 安装基础软件(通过宝塔“软件商店”)

    • 进入左侧菜单【软件商店】。
    • 搜索并安装以下软件(版本建议保持较新):
      • Nginx (Web 服务器)
      • Python 3.9+ (Django 运行环境,宝塔默认通常已带 Python3,若需特定版本可手动安装或修改软链接)
      • MySQL 5.7/8.0MariaDB (数据库)
      • Redis (可选,用于缓存或 Celery)
    • 注意:如果宝塔自带的 Python 版本过旧,建议在终端中重新安装一个高版本 Python,或者直接使用系统自带的最新版本。
  3. 创建项目目录

    • 点击左侧【文件】->【网站】->【添加站点】(这一步主要是为了生成默认的 Nginx 配置文件结构,后续我们会覆盖它)。
    • 或者直接在 /www/wwwroot 下创建一个专属目录,例如 /www/wwwroot/my_django_project
    • 确保该目录的所有权属于当前用户(通常是 www):
      sudo chown -R www:www /www/wwwroot/my_django_project

第二步:上传代码与安装依赖

  1. 上传代码

    • 使用 FTP 工具(如 FileZilla,端口默认为 21)或直接使用宝塔【文件】界面的【上传】功能,将本地 Django 项目的源代码上传到 /www/wwwroot/my_django_project 目录下。
    • 提示:确保上传了 requirements.txt 文件。
  2. 创建虚拟环境(推荐)

    • 点击宝塔左侧【终端】。
    • 进入项目目录:
      cd /www/wwwroot/my_django_project
    • 安装虚拟环境工具(如果未安装):
      sudo apt update && sudo apt install python3-venv -y
    • 创建并激活虚拟环境:
      python3 -m venv venv
      source venv/bin/activate
    • 安装依赖:
      pip install django gunicorn psycopg2-binary redis
      # 如果有 requirements.txt
      pip install -r requirements.txt
    • 注意:psycopg2-binary 是 PostgreSQL 驱动,如果你用 MySQL,请换成 mysqlclient
  3. 配置 Django 设置

    • 编辑 settings.py 文件(位于项目根目录):

      # 允许所有域名访问(生产环境建议改为具体域名)
      ALLOWED_HOSTS = ['*', 'your-domain.com'] 
      
      # 数据库配置 (以 MySQL 为例)
      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.mysql',
              'NAME': '你的数据库名',
              'USER': '你的用户名',
              'PASSWORD': '你的密码',
              'HOST': 'localhost',
              'PORT': '3306',
          }
      }
      
      # 静态文件配置 (关键)
      STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
      STATIC_URL = '/static/'
      
      # 关闭调试模式
      DEBUG = False
  4. 收集静态文件

    • 执行以下命令生成静态文件到 staticfiles 目录:
      python manage.py collectstatic --noinput
  5. 迁移数据库

    • python manage.py migrate
  6. 创建超级管理员

    • python manage.py createsuperuser

第三步:配置 Gunicorn (应用进程管理器)

Gunicorn 负责将 Django 应用转化为 HTTP 服务,供 Nginx 转发。

  1. 启动测试(临时)

    • 在终端运行:
      gunicorn myproject.wsgi:application --bind 127.0.0.1:8000
    • 注意:将 myproject 替换为你的实际项目文件夹名(包含 manage.py 的那个文件夹),wsgi 是 Django 生成的模块名。
    • 如果启动成功,浏览器访问 http://你的IP:8000 应能看到 Django 首页。此时先按 Ctrl+C 停止。
  2. 编写 Systemd 服务文件(实现开机自启)

    • 创建服务文件:
      sudo nano /etc/systemd/system/django-app.service
    • 粘贴以下内容(请根据实际情况修改路径、用户和项目名称):

      [Unit]
      Description=Django Application
      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/gunicorn.sock 
                myproject.wsgi:application
      Restart=always
      
      [Install]
      WantedBy=multi-user.target
    • 保存退出 (Ctrl+O, Enter, Ctrl+X)。
    • 启动服务:
      sudo systemctl daemon-reload
      sudo systemctl start django-app
      sudo systemctl enable django-app
      sudo systemctl status django-app
    • 检查状态应为 active (running)。

第四步:配置 Nginx 反向X_X

现在我们需要让 Nginx 监听 80/443 端口,并将请求转发给 Gunicorn 创建的 socket 文件。

  1. 在宝塔中添加站点

    • 点击【网站】 -> 【添加站点】。
    • 域名填写你的域名(如果没有域名,可以填 IP 地址,但需要解析 A 记录指向服务器 IP)。
    • 根目录选择 /www/wwwroot/my_django_project
    • 数据库类型选择对应的类型(如 MySQL),创建好即可。
    • 点击【提交】。
  2. 修改 Nginx 配置

    • 在宝塔【网站】列表中找到刚才添加的网站,点击【设置】 -> 【配置文件】。
    • 删除或注释掉原有的 PHP 相关配置,替换为如下内容:
    server {
        listen 80;
        server_name your-domain.com; # 替换为你的域名
    
        location /static/ {
            alias /www/wwwroot/my_django_project/staticfiles/;
            expires 30d;
            add_header Cache-Control "public, immutable";
        }
    
        location /media/ {
            alias /www/wwwroot/my_django_project/media/;
            expires 30d;
        }
    
        location / {
            include proxy_params;
            proxy_pass http://unix:/www/wwwroot/my_django_project/gunicorn.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;
        }
    }
    • 保存并重启 Nginx(宝塔界面点击【重载配置】)。

第五步:SSL 证书配置(HTTPS)

为了安全,建议开启 HTTPS。

  1. 在宝塔【网站】 -> 【SSL】选项卡。
  2. 选择【Let’s Encrypt】免费证书。
  3. 勾选你的域名,点击【申请】。
  4. 申请成功后,勾选【强制 HTTPS】,保存即可。

常见问题排查

  • 权限问题 (Permission Denied)
    • 如果 Nginx 无法读取文件或 Gunicorn 无法写入日志,请在终端执行:
      sudo chown -R www:www /www/wwwroot/my_django_project
      sudo chmod -R 755 /www/wwwroot/my_django_project
  • 白屏或 502 Bad Gateway
    • 检查 Gunicorn 服务状态:sudo systemctl status django-app
    • 查看 Gunicorn 日志:通常在 ~/logs 或项目目录下的日志文件中。
    • 检查 settings.py 中的 ALLOWED_HOSTS 是否包含了你的域名。
    • 确认 Nginx 配置中的 proxy_pass 路径与 Gunicorn socket 路径完全一致。
  • 数据库连接失败
    • 确认 settings.py 中的数据库账号密码正确。
    • 确认 MySQL/MariaDB 允许远程连接(如果是本地连接则无需此步,但需确保 bind-address 配置正确)。

按照以上步骤,你就可以在阿里云 Ubuntu 22.04 + 宝塔面板上成功部署一个生产级的 Django 应用了。