奋斗
努力

阿里云ECS Ubuntu 22.04使用宝塔部署Django项目时数据库怎么配置?

云计算

在阿里云 ECS Ubuntu 22.04 上使用宝塔面板(Baota Panel)部署 Django 项目时,数据库配置通常分为两个阶段:在宝塔中创建/安装数据库和在 Django 项目中配置连接。

以下是完整的操作步骤:

第一步:在宝塔面板中准备数据库

  1. 登录宝塔面板
    访问 http://<你的服务器IP>:8888 并登录。

  2. 安装数据库插件

    • 点击左侧菜单的 【软件商店】。
    • 搜索 MySQL 或 MariaDB(推荐 MySQL 5.7 或 8.0,Django 对两者兼容性都很好)。
    • 点击安装,等待安装完成。
    • 注意:Ubuntu 22.04 默认源可能包含 MariaDB,但宝塔通常提供独立的安装包,建议直接使用宝塔安装的版本以确保兼容性和管理便捷性。
  3. 创建数据库和用户

    • 点击左侧菜单的 【数据库】 -> 【+ 添加】。
    • 数据库名:输入你的项目名称(如 myproject_db),建议使用小写字母和下划线。
    • 用户名:输入一个安全的用户名(如 myproject_user)。
    • 密码:设置一个强密码(务必记住,稍后需要填入 Django 配置)。
    • 权限:选择“所有主机”(如果只允许本地连接,选“localhost”;如果 Django 和数据库在同一台机器,选 localhost 即可;如果是云数据库则需选所有主机)。
    • 点击 【提交】。
  4. 获取连接信息
    创建成功后,在列表中找到该数据库,点击右侧的 【详情】 或 【编辑】,记下以下信息:

    • 数据库名称 (Database Name)
    • 用户名 (User Name)
    • 密码 (Password)
    • 端口 (Port):默认为 3306。
    • 主机 (Host):如果是本地部署,填写 127.0.0.1 或 localhost。

第二步:在 Django 项目中配置数据库

你需要修改 Django 项目的配置文件 settings.py。

1. 确保安装了数据库驱动

Django 连接 MySQL 需要 mysqlclient 库。由于 Ubuntu 22.04 环境限制,直接 pip install mysqlclient 可能会因为缺少编译依赖而失败。

推荐方式(使用预编译包):

# 进入你的项目虚拟环境目录
source /www/wwwroot/你的项目路径/venv/bin/activate

# 安装 pymysql (纯 Python 实现,无需编译,最方便)
pip install pymysql

# 或者安装 mysqlclient (性能更好,但需要系统依赖)
# sudo apt-get update
# sudo apt-get install default-libmysqlclient-dev build-essential python3-dev
# pip install mysqlclient

关键步骤(如果使用 pymysql):
在 Django 项目根目录下的 __init__.py 文件中(或者主入口文件,如 manage.py 同级目录下),添加以下代码以强制使用 pymysql 作为 MySQL 后端:

import pymysql
pymysql.install_as_MySQLdb()

如果你使用的是 mysqlclient,则不需要这一步。

2. 修改 settings.py

打开你的 Django 项目配置文件(通常在 config/settings.py 或同名的 settings.py),找到 DATABASES 部分并修改为如下内容:

DATABASES = {
    'default': {
        # 引擎类型
        'ENGINE': 'django.db.backends.mysql', 

        # 数据库名称
        'NAME': 'myproject_db',  # 替换为第一步创建的数据库名

        # 用户名
        'USER': 'myproject_user', # 替换为第一步创建的用户名

        # 密码
        'PASSWORD': 'your_strong_password', # 替换为第一步设置的密码

        # 主机地址
        'HOST': '127.0.0.1',  # 宝塔本地部署通常填 127.0.0.1

        # 端口
        'PORT': '3306',       # 默认端口

        # 字符集设置 (重要,防止中文乱码)
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
            'charset': 'utf8mb4',
        },
    }
}

第三步:迁移与验证

  1. 执行迁移命令
    在终端激活虚拟环境后,运行:

    python manage.py migrate

    如果没有报错,说明数据库连接成功且表结构已创建。

  2. 创建超级管理员

    python manage.py createsuperuser
  3. 测试运行
    启动开发服务器(生产环境请使用 Gunicorn + Nginx):

    python manage.py runserver 0.0.0.0:8000

    访问 http://<你的服务器IP>:8000/admin,如果能正常登录,说明数据库配置完全成功。

常见问题排查

  • Connection Refused:
    • 检查宝塔防火墙是否放行了 3306 端口(虽然本地连接通常不需要公网端口,但有时安全组策略会干扰)。
    • 确认 HOST 是 127.0.0.1 而不是 localhost(在某些 Linux 环境下 localhost 会尝试通过 socket 连接而非 TCP,可能导致权限问题,改用 IP 更稳妥)。
  • Authentication Plugin Error:
    • 如果你遇到 Client does not support authentication protocol requested by server 错误,这是因为 MySQL 8.0 默认使用 caching_sha2_password 加密方式,而旧版 Python 驱动不支持。
    • 解决方法:登录宝塔 MySQL 命令行,将用户加密方式改为 mysql_native_password:
      ALTER USER 'myproject_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
      FLUSH PRIVILEGES;
  • 中文乱码:
    • 确保 settings.py 中的 'charset': 'utf8mb4' 已设置。
    • 同时检查 MySQL 实例的全局字符集是否为 utf8mb4(宝塔安装时通常默认已配置好)。

按照以上步骤操作,你的 Django 项目即可顺利连接到宝塔面板管理的 MySQL 数据库。

未经允许不得转载:云服务器 » 阿里云ECS Ubuntu 22.04使用宝塔部署Django项目时数据库怎么配置?