在阿里云 ECS Ubuntu 22.04 上,通过宝塔面板(Baota)部署 Django 项目时,数据库配置通常分为安装数据库服务、创建数据库/用户以及在 Django 代码中连接三个步骤。
以下是详细的操作指南:
第一步:在宝塔面板中安装并配置数据库
- 进入软件商店
登录宝塔面板,点击左侧菜单的 “软件商店”。 - 安装 MySQL/MariaDB
- 搜索
MySQL或MariaDB。 - 推荐选择 MySQL 8.0(Django 对新版支持更好)或 MariaDB 10.6+。
- 点击“安装”,等待安装完成。
- 搜索
- 设置密码
安装完成后,建议立即修改 root 密码:- 点击左侧菜单 “数据库”。
- 找到刚安装的数据库实例,点击右侧的 “管理”。
- 在弹出的窗口中修改 root 密码(请牢记该密码,后续 Django 配置需要)。
- 点击保存。
第二步:创建数据库和用户(用于 Django)
为了安全起见,不建议直接使用 root 用户连接 Django 应用,应创建一个专用的数据库用户。
- 在宝塔左侧菜单点击 “数据库”。
- 点击右上角的 “创建数据库” 按钮。
- 填写信息:
- 数据库名:例如
my_django_db(注意:Django 默认要求数据库名不能包含特殊字符,建议使用小写字母和下划线)。 - 用户名:例如
django_user。 - 密码:设置一个强密码(例如
MyStrongPass123!),请务必记录。 - 权限:选择“所有权限”或“全部权限”。
- 数据库名:例如
- 点击确定创建。
注意:如果 Django 需要远程连接(较少见,通常本地即可),可以在“权限”处将主机设置为
%允许远程访问,或者在宝塔防火墙中放行 3306 端口。但在同一台服务器上部署时,默认使用localhost或127.0.0.1即可。
第三步:在 Django 项目中配置 settings.py
现在需要在你的 Django 项目的 settings.py 文件中填入刚才创建的数据库信息。
打开你的项目目录下的 config/settings.py(假设你的主配置文件名为 settings.py),找到 DATABASES 配置块并进行如下修改:
import os
from pathlib import Path
# ... 其他配置 ...
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = 'your-secret-key'
DEBUG = True
ALLOWED_HOSTS = ['*'] # 生产环境建议指定具体域名或 IP
# --- 数据库配置开始 ---
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 必须指定为 mysql
'NAME': 'my_django_db', # 对应宝塔创建的数据库名
'USER': 'django_user', # 对应宝塔创建的用户名
'PASSWORD': 'MyStrongPass123!', # 对应宝塔设置的密码
'HOST': '127.0.0.1', # 宝塔默认本地地址,也可用 localhost
'PORT': '3306', # 默认端口
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
'charset': 'utf8mb4', # 推荐使用 utf8mb4 以支持 emoji
},
}
}
# --- 数据库配置结束 ---
关键依赖检查
确保你的项目已经安装了 MySQL 驱动。在终端执行以下命令:
pip install mysqlclient
# 或者
pip install pymysql
注意:如果使用 mysqlclient,Ubuntu 22.04 可能需要先安装开发包:sudo apt-get install default-libmysqlclient-dev build-essential python3-dev。如果不想处理 C 编译依赖,可以直接使用 pymysql(纯 Python 实现),并在 __init__.py 中添加一行代码欺骗 Django:
# 在项目根目录的 __init__.py (即 manage.py 同级) 添加:
import pymysql
pymysql.install_as_MySQLdb()
第四步:迁移数据库并启动项目
-
创建数据表
在项目目录下执行:python manage.py migrate如果没有报错,说明连接成功且表结构已创建。
-
创建超级管理员
python manage.py createsuperuser -
运行项目
使用 Gunicorn + Nginx(宝塔推荐方式)或 Python 自带服务器测试:# 测试模式 python manage.py runserver 0.0.0.0:8000 # 生产模式 (需先在宝塔网站设置中绑定域名和 SSL) # 通常直接通过宝塔面板的“网站” -> “Python 项目”进行部署管理
常见问题排查
- Connection Refused: 检查宝塔面板的“防火墙”设置,确保 3306 端口未被拦截(虽然本地连接不需要公网端口,但有时安全组策略会干扰)。
- Authentication Plugin Error: 如果报错
Access denied for user... using password: YES或涉及caching_sha2_password,通常是因为 MySQL 8.0 默认认证插件与旧版驱动不兼容。- 解决方法:在宝塔数据库管理中,点击该用户的“权限”,将加密方式改为
mysql_native_password,或者在 Django 的DATABASES配置中增加'OPTIONS': {'auth_plugin': 'mysql_native_password'}。
- 解决方法:在宝塔数据库管理中,点击该用户的“权限”,将加密方式改为
- UnicodeError: 如果中文乱码,请确保数据库字符集是
utf8mb4(宝塔新建数据库时默认通常是 utf8mb4),且 Django 配置中的charset也设为utf8mb4。
按照以上步骤,你的 Django 项目应该可以顺利连接到宝塔上的 MySQL 数据库了。
CLOUD技术博