走啊走
加油

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

服务器价格表

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

以下是详细的操作步骤:

第一步:在宝塔面板中创建数据库

Django 默认推荐使用 MySQL 或 PostgreSQL。以最常见的 MySQL 为例:

  1. 登录宝塔面板
    在浏览器访问 http://你的服务器IP:8888,输入账号密码登录。

  2. 进入数据库管理
    点击左侧菜单的 “数据库”

  3. 创建数据库

    • 点击页面右上角的 “添加数据库” 按钮。
    • 数据库类型:选择 MySQL (宝塔通常预装了 MariaDB,兼容 MySQL)。
    • 数据库名:填写 Django 项目使用的名称(例如 myproject_db)。
    • 用户名:系统会自动生成一个随机用户名,或者你可以自定义(例如 myproject_user)。
    • 密码:设置强密码(建议复制保存),这是 Django 连接的关键。
    • 权限:通常选择“全部权限”或“仅允许本地连接”(如果 Django 和本地在同一台机器,选 localhost 即可;如果是远程连接需勾选允许远程 IP)。
    • 点击 “提交”
  4. 记录关键信息
    创建成功后,务必记下以下四要素,稍后配置 settings.py 时需要用到:

    • Host: 通常是 127.0.0.1localhost(如果应用和数据库在同一台服务器)。
    • User: 刚才创建的用户名。
    • Password: 刚才设置的密码。
    • Database: 刚才创建的数据库名。

第二步:在 Django 项目中配置数据库 (settings.py)

你需要修改 Django 项目的 settings.py 文件,将默认的 SQLite 配置替换为 MySQL 配置。

1. 安装 MySQL 驱动

Django 需要 Python 驱动才能连接 MySQL。

  • 如果你使用的是宝塔自带的 Python 环境(推荐路径通常在 /www/server/panel/virtualenvs/django_project/bin/python),请先激活虚拟环境并安装驱动:

    # 假设你的虚拟环境名为 django_project,请根据实际名称调整
    source /www/server/panel/virtualenvs/django_project/bin/activate
    
    # 安装 mysqlclient (编译依赖)
    # 注意:Ubuntu 22.04 可能需要先安装开发包
    sudo apt update
    sudo apt install python3-dev default-libmysqlclient-dev build-essential pkg-config
    pip install mysqlclient

    如果宝塔面板里有“软件商店”,也可以尝试搜索安装 mysqlclientPyMySQL。如果是 PyMySQL,则不需要编译依赖,直接 pip install pymysql 即可。

2. 修改 settings.py

找到 DATABASES 配置块,将其修改为如下格式:

# settings.py

import os

BASE_DIR = Path(__file__).resolve().parent.parent

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 如果使用 PyMySQL,这里改为 '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',                      # MySQL 默认端口
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
    }
}

特殊情况:如果你使用的是 PyMySQL
如果在 settings.py 顶部添加以下代码来伪装 PyMySQL 为 MySQL 后端:

import pymysql
pymysql.install_as_MySQLdb()

然后保持 ENGINE'django.db.backends.mysql' 即可。


第三步:执行迁移与测试

配置完成后,需要在终端执行以下命令来同步数据库结构:

  1. 生成迁移文件
    python manage.py makemigrations
  2. 应用迁移
    python manage.py migrate
  3. 创建超级用户(可选):
    python manage.py createsuperuser
  4. 启动服务测试
    确保防火墙已放行端口(宝塔安全组里开放了 80/443/8888,但 Django 开发端口如 8000 也要开放),然后运行:

    python manage.py runserver 0.0.0.0:8000

    如果报错 Access denied for user...,请检查密码、用户名是否拼写错误,或者检查 MySQL 用户是否有远程权限(虽然本地连接通常不需要)。

常见问题排查

  • 连接被拒绝 (Connection refused)
    • 检查 MySQL 服务是否在运行:systemctl status mariadb (或 mysql)。
    • 检查 settings.py 中的 HOST 是否为 127.0.0.1
  • 字符集乱码
    • 在宝塔数据库管理中,选中该数据库 -> “编辑”,将字符集设置为 utf8mb4,排序规则为 utf8mb4_general_ci
    • 在 Django settings.pyDATABASES 选项中可以显式指定 OPTIONS: {'charset': 'utf8mb4'}
  • 阿里云安全组
    • 如果你需要从外部(非本机)连接数据库,必须在阿里云控制台的安全组规则中,放行 TCP 3306 端口,并且宝塔数据库用户权限中要允许 % (任意 IP) 或特定 IP 访问。但在 Django 部署场景下,通常应用和数据库都在同一台 ECS 内,使用 127.0.0.1 是最安全且无需额外配置安全组的方案。

按照以上步骤,你的 Django 项目就能成功连接到宝塔管理的 MySQL 数据库了。