在阿里云 ECS(Ubuntu 22.04)上通过宝塔面板部署 Django 项目时,数据库配置通常分为“安装/启动数据库”和“在 Django 项目中连接数据库”两个核心步骤。
以下是详细的操作指南:
第一步:在宝塔面板中安装并配置数据库
Django 默认支持多种数据库,最常用的是 MySQL 或 PostgreSQL。这里以 MySQL 8.0 为例(宝塔默认推荐),操作流程如下:
- 登录宝塔面板:访问你的宝塔 Web 管理界面。
- 安装数据库软件:
- 点击左侧菜单的 “软件商店”。
- 在搜索框输入
MySQL。 - 找到 MySQL 8.0(推荐版本,兼容性较好),点击右侧的 “安装”。
- 注意:安装过程中会要求设置 root 密码,请务必记牢,后续代码配置需要用到。
- 创建数据库:
- 安装完成后,点击左侧菜单的 “数据库”。
- 点击页面右上角的 “添加” 按钮。
- 填写信息:
- 数据库名:建议与项目名称一致(如
myproject_db)。 - 用户名:可以自定义(如
django_user)。 - 密码:设置一个强密码(建议与 root 密码不同,方便权限隔离)。
- 权限:选择“全部权限”或仅勾选当前 IP 地址(生产环境建议限制为
localhost或特定 IP 以提高安全性)。
- 数据库名:建议与项目名称一致(如
- 点击 “提交”。
关键提示:此时你需要记录下刚才创建的 数据库名、用户名、密码 以及 端口(默认 MySQL 是
3306)。
第二步:在 Django 项目中配置数据库连接
完成服务器端的数据库准备后,需要在你的 Django 代码中进行连接配置。
1. 安装 Python 数据库驱动
在你的虚拟环境中安装 mysqlclient(或 pymysql,但官方推荐 mysqlclient):
# 进入你的项目虚拟环境目录
cd /www/wwwroot/你的域名/venv/bin # 路径根据宝塔实际部署位置可能不同
# 激活虚拟环境
source activate
# 安装依赖 (如果报错缺少编译头文件,可能需要先安装 gcc)
pip install mysqlclient
注:如果在 Ubuntu 22.04 上安装 mysqlclient 遇到编译错误,请先运行 sudo apt update && sudo apt install python3-dev default-libmysqlclient-dev build-essential,然后再执行 pip install。
2. 修改 settings.py
打开你的 Django 项目根目录下的 settings.py 文件,找到 DATABASES 配置部分,将其修改为如下格式:
import os
# 从环境变量读取,或者直接使用下面的硬编码(开发环境方便,生产环境建议用变量)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 必须指定引擎
'NAME': 'your_database_name', # 第一步中创建的数据库名
'USER': 'your_database_user', # 第一步中创建的用户名
'PASSWORD': 'your_password', # 第一步中设置的密码
'HOST': '127.0.0.1', # 本地连接通常用 localhost 或 127.0.0.1
'PORT': '3306', # 宝塔默认端口
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
'charset': 'utf8mb4' # 必须设置为 utf8mb4 以支持 Emoji
}
}
}
关于 HOST 的特别说明:
- 本地调试:填
127.0.0.1或localhost。 - 宝塔远程连接:如果你希望 Django 进程(可能在另一个容器或网络命名空间)连接数据库,且宝塔开启了远程访问,可以填
127.0.0.1。 - 安全建议:Django 运行在服务器上,数据库也在同一台服务器上,使用
127.0.0.1是最安全且性能最好的方式,不需要开放公网 IP。
3. 同步数据库模型
配置完成后,执行迁移命令使数据库生效:
python manage.py makemigrations
python manage.py migrate
第三步:常见问题排查 (Troubleshooting)
如果在配置过程中遇到问题,请检查以下几点:
-
权限问题 (Access Denied):
- 宝塔创建的数据库用户默认只允许
localhost登录。如果你的 Django 应用是通过 Docker 或其他非本地进程调用,可能需要修改权限: - 在宝塔“数据库”页面 -> 点击对应数据库的“权限” -> 将权限改为“所有主机”或添加具体 IP(不推荐生产环境全开)。
- 或者在 MySQL 命令行执行:
GRANT ALL PRIVILEGES ON db_name.* TO 'user'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
- 宝塔创建的数据库用户默认只允许
-
字符集乱码:
- 务必确保
settings.py中的'charset': 'utf8mb4'已设置,并且宝塔数据库中该表也是utf8mb4排序规则。
- 务必确保
-
防火墙/安全组:
- 虽然 Django 连
127.0.0.1不需要公网端口,但如果你尝试从外部工具(如 Navicat)连接测试,需要去 阿里云控制台 -> 安全组 放行3306端口,并在宝塔数据库设置中开启“允许远程连接”。
- 虽然 Django 连
-
Python 驱动缺失:
- 如果运行
migrate时报错ModuleNotFoundError: No module named 'mysqlclient',请确认你是在正确的虚拟环境中安装的驱动,而不是系统全局环境。
- 如果运行
通过以上步骤,你的 Django 项目即可成功连接到宝塔面板上的 MySQL 数据库。
CLOUD云枢