在阿里云 ECS Ubuntu 22.04 上,使用宝塔面板(Baota Panel)部署 Django 项目时,数据库配置主要分为两个阶段:在宝塔中创建/管理数据库 和 在 Django 项目中连接数据库。
以下是详细的操作步骤:
第一步:在宝塔面板中创建数据库
Django 默认推荐使用 MySQL 或 PostgreSQL。以最常见的 MySQL 为例:
-
登录宝塔面板:
在浏览器访问http://你的服务器IP:8888,输入账号密码登录。 -
进入数据库管理:
点击左侧菜单的 “数据库”。 -
创建数据库:
- 点击页面右上角的 “添加数据库” 按钮。
- 数据库类型:选择
MySQL(宝塔通常预装了 MariaDB,兼容 MySQL)。 - 数据库名:填写 Django 项目使用的名称(例如
myproject_db)。 - 用户名:系统会自动生成一个随机用户名,或者你可以自定义(例如
myproject_user)。 - 密码:设置强密码(建议复制保存),这是 Django 连接的关键。
- 权限:通常选择“全部权限”或“仅允许本地连接”(如果 Django 和本地在同一台机器,选 localhost 即可;如果是远程连接需勾选允许远程 IP)。
- 点击 “提交”。
-
记录关键信息:
创建成功后,务必记下以下四要素,稍后配置settings.py时需要用到:- Host: 通常是
127.0.0.1或localhost(如果应用和数据库在同一台服务器)。 - User: 刚才创建的用户名。
- Password: 刚才设置的密码。
- Database: 刚才创建的数据库名。
- Host: 通常是
第二步:在 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如果宝塔面板里有“软件商店”,也可以尝试搜索安装
mysqlclient或PyMySQL。如果是 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' 即可。
第三步:执行迁移与测试
配置完成后,需要在终端执行以下命令来同步数据库结构:
- 生成迁移文件:
python manage.py makemigrations - 应用迁移:
python manage.py migrate - 创建超级用户(可选):
python manage.py createsuperuser - 启动服务测试:
确保防火墙已放行端口(宝塔安全组里开放了 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。
- 检查 MySQL 服务是否在运行:
- 字符集乱码:
- 在宝塔数据库管理中,选中该数据库 -> “编辑”,将字符集设置为
utf8mb4,排序规则为utf8mb4_general_ci。 - 在 Django
settings.py的DATABASES选项中可以显式指定OPTIONS:{'charset': 'utf8mb4'}。
- 在宝塔数据库管理中,选中该数据库 -> “编辑”,将字符集设置为
- 阿里云安全组:
- 如果你需要从外部(非本机)连接数据库,必须在阿里云控制台的安全组规则中,放行 TCP 3306 端口,并且宝塔数据库用户权限中要允许
%(任意 IP) 或特定 IP 访问。但在 Django 部署场景下,通常应用和数据库都在同一台 ECS 内,使用127.0.0.1是最安全且无需额外配置安全组的方案。
- 如果你需要从外部(非本机)连接数据库,必须在阿里云控制台的安全组规则中,放行 TCP 3306 端口,并且宝塔数据库用户权限中要允许
按照以上步骤,你的 Django 项目就能成功连接到宝塔管理的 MySQL 数据库了。
CLOUD云计算