在阿里云 ECS Ubuntu 22.04 上使用宝塔面板(Baota Panel)部署 Django 项目时,数据库配置通常分为两个阶段:在宝塔中创建/安装数据库和在 Django 项目中配置连接。
以下是完整的操作步骤:
第一步:在宝塔面板中准备数据库
-
登录宝塔面板
访问http://<你的服务器IP>:8888并登录。 -
安装数据库插件
- 点击左侧菜单的 【软件商店】。
- 搜索 MySQL 或 MariaDB(推荐 MySQL 5.7 或 8.0,Django 对两者兼容性都很好)。
- 点击安装,等待安装完成。
- 注意:Ubuntu 22.04 默认源可能包含 MariaDB,但宝塔通常提供独立的安装包,建议直接使用宝塔安装的版本以确保兼容性和管理便捷性。
-
创建数据库和用户
- 点击左侧菜单的 【数据库】 -> 【+ 添加】。
- 数据库名:输入你的项目名称(如
myproject_db),建议使用小写字母和下划线。 - 用户名:输入一个安全的用户名(如
myproject_user)。 - 密码:设置一个强密码(务必记住,稍后需要填入 Django 配置)。
- 权限:选择“所有主机”(如果只允许本地连接,选“localhost”;如果 Django 和数据库在同一台机器,选 localhost 即可;如果是云数据库则需选所有主机)。
- 点击 【提交】。
-
获取连接信息
创建成功后,在列表中找到该数据库,点击右侧的 【详情】 或 【编辑】,记下以下信息:- 数据库名称 (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',
},
}
}
第三步:迁移与验证
-
执行迁移命令
在终端激活虚拟环境后,运行:python manage.py migrate如果没有报错,说明数据库连接成功且表结构已创建。
-
创建超级管理员
python manage.py createsuperuser -
测试运行
启动开发服务器(生产环境请使用 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 数据库。
云服务器