速卖通素材
努力

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

服务器

在阿里云 Ubuntu 22.04 上通过宝塔面板(BT Panel)部署 Django 项目,推荐采用 Nginx + Gunicorn + Supervisor 的组合方式。这种方式稳定、易于管理,且能充分利用宝塔的可视化功能。

以下是完整的配置步骤:

第一步:安装 Python 环境与依赖

虽然宝塔自带了 Python,但为了更灵活地管理虚拟环境,建议先安装系统级依赖并创建虚拟环境。

  1. 登录宝塔面板,进入【软件商店】。
  2. 搜索并安装 Python(建议选择 Python 3.9 或更高版本,Ubuntu 22.04 默认源通常包含较新版本)。
  3. 安装完成后,点击右侧的 【终端】 按钮,或者直接在宝塔的【文件】中操作。

创建项目目录与虚拟环境

假设你的项目名为 myproject,路径为 /www/wwwroot/myproject

# 1. 进入网站根目录 (根据你实际创建的站点路径调整)
cd /www/wwwroot/

# 2. 创建项目文件夹
mkdir myproject
cd myproject

# 3. 创建 Python 虚拟环境
python3 -m venv venv

# 4. 激活虚拟环境
source venv/bin/activate

# 5. 升级 pip 并安装 Django
pip install --upgrade pip
pip install django gunicorn supervisor

# 6. 安装其他依赖 (如果已有 requirements.txt)
# pip install -r requirements.txt

注意:激活环境后,命令行提示符前会出现 (venv) 字样。后续所有 Django 命令都需在激活状态下执行。


第二步:编写 Django 启动脚本

宝塔的 Nginx 反向X_X需要后端进程运行。我们使用 gunicorn 作为 WSGI 服务器,用 supervisor 来守护进程(确保服务重启后自动运行)。

1. 生成配置文件

在项目目录下创建 run_gunicorn.sh

nano run_gunicorn.sh

粘贴以下内容(请修改为你的实际域名和模块名):

#!/bin/bash
PROJECT_DIR=/www/wwwroot/myproject
VENV_PATH=$PROJECT_DIR/venv
WSGI_MODULE=myproject.wsgi:application # 注意:替换为你项目的 wsgi.py 所在路径
PORT=8000
HOST=127.0.0.1

# 激活虚拟环境
source $VENV_PATH/bin/activate

# 启动 Gunicorn
exec gunicorn $WSGI_MODULE 
    --bind $HOST:$PORT 
    --workers 4 
    --threads 2 
    --timeout 120 
    --access-logfile $PROJECT_DIR/logs/access.log 
    --error-logfile $PROJECT_DIR/logs/error.log

赋予执行权限:

chmod +x run_gunicorn.sh

2. 创建日志目录

mkdir -p logs
touch logs/access.log logs/error.log
chown -R www-data:www-data logs/

第三步:配置 Supervisor 守护进程

为了让项目在服务器重启后自动运行,我们需要配置 Supervisor。

  1. 在宝塔左侧菜单找到 【计划任务】 -> 【守护进程】(如果没有直接入口,可通过“终端”手动配置,或使用宝塔的“进程守护”插件)。
  2. 推荐方式(使用宝塔自带的守护进程功能)

    • 在宝塔左侧菜单找到 【计划任务】 -> 【守护进程】(部分新版宝塔称为“进程守护”)。
    • 点击 添加守护进程
    • 名称django-myproject
    • 工作目录/www/wwwroot/myproject
    • 启动命令/www/wwwroot/myproject/run_gunicorn.sh
    • 守护数量:1
    • 启动参数:留空
    • 用户www (宝塔默认用户)
    • 保存

    (如果找不到此菜单,可手动编辑 /etc/supervisor/conf.d/django.conf)

    [program:django]
    command=/www/wwwroot/myproject/run_gunicorn.sh
    directory=/www/wwwroot/myproject
    user=www
    autostart=true
    autorestart=true
    stderr_logfile=/www/wwwroot/myproject/logs/error.log
    stdout_logfile=/www/wwwroot/myproject/logs/access.log
    environment=DJANGO_SETTINGS_MODULE="myproject.settings"

    然后执行 sudo supervisorctl reread && sudo supervisorctl update


第四步:配置 Nginx 反向X_X

这是最关键的一步,将外部请求转发给 Gunicorn。

  1. 在宝塔左侧菜单点击 【网站】 -> 【设置】 -> 选择你的站点 -> 【伪静态】(如果是 Django 默认模式,通常选 DjangoCustom,但主要逻辑在反向X_X)。

  2. 点击 【反向X_X】 -> 【添加反向X_X】

    • X_X名称django-gunicorn
    • 目标 URLhttp://127.0.0.1:8000 (对应你脚本中的端口)
    • 发送域名$host
    • 是否启用缓存:否
    • 提交
  3. 配置 Django Settings (settings.py)
    打开你的 Django 项目目录下的 settings.py,确保允许跨域访问(如果宝塔开启了 HTTPS):

    import os
    
    # 允许所有主机访问 (生产环境建议改为具体域名列表)
    ALLOWED_HOSTS = ['*', 'your-domain.com', '127.0.0.1']
    
    # 开启调试模式 (生产环境务必设为 False)
    DEBUG = False
    
    # 静态文件配置 (关键!Django 必须收集静态文件到指定目录)
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') 
    # 或者如果你放在网站目录下的 static 文件夹
    # STATIC_ROOT = '/www/wwwroot/myproject/staticfiles'
    
    # 媒体文件配置
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    
    # 确保中间件包含白名单
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'whitenoise.middleware.WhiteNoiseMiddleware', # 可选:优化静态文件性能
        # ... 其他中间件
    ]

    重要:收集静态文件
    在终端执行以下命令,将 Django 的静态文件收集到 STATIC_ROOT 指定的目录:

    cd /www/wwwroot/myproject
    source venv/bin/activate
    python manage.py collectstatic --noinput

第五步:数据库与域名绑定

  1. 数据库配置

    • 在宝塔【数据库】中创建一个 MySQL 数据库。
    • settings.py 中更新 DATABASES 配置:
      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.mysql',
              'NAME': '你的数据库名',
              'USER': '你的用户名',
              'PASSWORD': '你的密码',
              'HOST': 'localhost',
              'PORT': '3306',
              'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
          }
      }
    • 安装 MySQL 驱动:pip install mysqlclient (可能需要先安装 libmysqlclient-dev)。
    • 迁移数据:python manage.py migrate
  2. SSL 证书

    • 在宝塔【网站】->【SSL】中申请 Let’s Encrypt 免费证书。
    • 开启强制 HTTPS。
  3. 防火墙与安全组

    • 宝塔会自动开放 80/443 端口。
    • 确保阿里云控制台【安全组】已放行 80 和 443 端口。

常见问题排查

  • 404 Not Found:检查 Nginx 反向X_X是否配置正确,以及 Django 的 ALLOWED_HOSTS 是否包含域名。
  • Permission Denied:检查 logs 目录和 staticfiles 目录的权限,确保 www 用户有写入权限 (chown -R www:www /www/wwwroot/myproject)。
  • Gunicorn 未启动:查看 /www/wwwroot/myproject/logs/error.log 日志,确认是否有语法错误或端口占用。
  • 静态文件不显示:确认是否执行了 collectstatic,且 Nginx 配置中是否禁用了直接提供静态文件(通常由 Django/Gunicorn 处理,或者配置 Nginx 指向 staticfiles 目录)。

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

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