如何在Ubuntu14.04上将MySQL或MariaDB与您的Django应用程序一起使用
介绍
Django 是一个用于快速创建 Python 应用程序的灵活框架。 默认情况下,Django 应用程序配置为将数据存储到轻量级 SQLite 数据库文件中。 虽然这在某些负载下运行良好,但更传统的 DBMS 可以提高生产性能。
在本指南中,我们将演示如何安装和配置 MySQL 或 MariaDB 以与您的 Django 应用程序一起使用。 我们将安装必要的软件,为我们的应用程序创建数据库凭据,然后启动并配置一个新的 Django 项目以使用此后端。
先决条件
首先,您需要一个干净的 Ubuntu 14.04 服务器实例,并设置非 root 用户。 非 root 用户必须配置有 sudo
权限。 按照我们的 初始服务器设置指南 了解如何设置。
当您准备好继续时,请继续阅读。
从 Ubuntu 存储库安装组件
我们的第一步是从存储库中安装我们需要的所有部分。 我们将安装 Python 包管理器 pip
,以便安装和管理我们的 Python 组件。 我们还将安装与它们交互所需的数据库软件和相关库。
我们将在下面介绍 MySQL 和 MariaDB,因此请选择与您要使用的 DBMS 相关的部分。
MySQL
如果您想使用 MySQL,以下 apt
命令将为您提供所需的包:
sudo apt-get update sudo apt-get install python-pip python-dev mysql-server libmysqlclient-dev
系统将要求您选择并确认管理 MySQL 帐户的密码。
安装后,您可以通过键入以下内容来创建数据库目录结构:
sudo mysql_install_db
然后,您可以通过运行以下命令来运行一个简单的安全脚本:
sudo mysql_secure_installation
系统会要求您输入在安装过程中为 MySQL 设置的管理密码。 之后,您将被问到一系列问题。 除了要求您选择另一个管理密码的第一个问题外,请为每个问题选择“是”。
通过安装和初始数据库配置,我们可以继续创建我们的数据库和数据库用户。 跳到下一部分。
玛丽亚数据库
如果您更喜欢 MariaDB,您可以按照以下说明安装它并执行必要的初始配置。 通过键入以下内容从存储库安装软件包:
sudo apt-get update sudo apt-get install python-pip python-dev mariadb-server libmariadbclient-dev libssl-dev
系统将要求您选择并确认管理 MariaDB 帐户的密码。
然后,您可以通过运行以下命令来运行一个简单的安全脚本:
sudo mysql_secure_installation
系统会要求您提供在安装期间为 MariaDB 设置的管理密码。 之后,您将被问到一系列问题。 除了第一个问题,要求您选择另一个管理密码,为每个问题选择是。
通过安装和初始数据库配置,我们可以继续创建我们的数据库和数据库用户。
创建数据库和数据库用户
无论您安装的是 MySQL 还是 MariaDB,都可以按原样遵循本指南的其余部分。
我们可以通过键入以下命令登录到与我们的数据库软件的交互式会话开始(无论您使用哪种数据库软件,命令都是相同的):
mysql -u root -p
系统将提示您输入您在安装过程中选择的管理密码。 之后,您将收到提示。
首先,我们将为我们的 Django 项目创建一个数据库。 出于安全原因,每个项目都应该有自己的隔离数据库。 在本指南中,我们将数据库称为 myproject
,但最好选择更具描述性的内容。 我们将数据库的默认类型设置为 UTF-8,这是 Django 所期望的:
CREATE DATABASE myproject CHARACTER SET UTF8;
请记住在 SQL 提示符处以分号结束所有命令。
接下来,我们将创建一个数据库用户,我们将使用该用户连接到数据库并与之交互。 将密码设置为强大且安全的密码:
CREATE USER myprojectuser@localhost IDENTIFIED BY 'password';
现在,我们需要做的就是给我们的数据库用户访问我们创建的数据库的权限:
GRANT ALL PRIVILEGES ON myproject.* TO myprojectuser@localhost;
刷新更改,以便它们在当前会话期间可用:
FLUSH PRIVILEGES;
退出 SQL 提示符以返回到您的常规 shell 会话:
exit
在虚拟环境中安装 Django
现在我们的数据库已经设置好了,我们可以安装 Django。 为了获得更好的灵活性,我们将在 Python 虚拟环境中安装 Django 及其所有依赖项。
您可以获得 virtualenv
包,它允许您通过键入以下内容来创建这些环境:
sudo pip install virtualenv
创建一个目录来保存您的 Django 项目。 之后进入目录:
mkdir ~/myproject cd ~/myproject
我们可以通过键入以下内容来创建一个虚拟环境来存储我们的 Django 项目的 Python 需求:
virtualenv myprojectenv
这会将 Python 和 pip
的本地副本安装到项目目录中名为 myprojectenv
的目录中。
在我们在虚拟环境中安装应用程序之前,我们需要激活它。 您可以通过键入:
source myprojectenv/bin/activate
您的提示将更改以指示您现在正在虚拟环境中操作。 它看起来像这样 (myprojectenv)user@host:~/myproject$
。
一旦您的虚拟环境处于活动状态,您就可以使用 pip
安装 Django。 我们还将安装 mysqlclient
包,它允许我们使用我们配置的数据库:
pip install django mysqlclient
我们现在可以在我们的 myproject
目录中启动一个 Django 项目。 这将创建一个同名的子目录来保存代码本身,并将在当前目录中创建一个管理脚本。 确保在命令末尾添加点,以便正确设置:
django-admin.py startproject myproject .
配置 Django 数据库设置
现在我们有了一个项目,我们需要将它配置为使用我们创建的数据库。
打开位于子项目目录中的主 Django 项目设置文件:
nano ~/myproject/myproject/settings.py
在文件的底部,您将看到如下所示的 DATABASES
部分:
. . . DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } . . .
这当前配置为使用 SQLite 作为数据库。 我们需要对此进行更改,以便使用我们的 MySQL/MariaDB 数据库。
首先,更改引擎,使其指向 mysql
后端,而不是 sqlite3
后端。 对于 NAME
,使用您的数据库的名称(在我们的示例中为 myproject
)。 我们还需要添加登录凭据。 我们需要用户名、密码和主机来连接。 我们将添加端口选项并将其留空,以便选择默认值:
. . . DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myproject', 'USER': 'myprojectuser', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', } } . . .
完成后,保存并关闭文件。
迁移数据库并测试您的项目
现在已经配置了 Django 设置,我们可以将数据结构迁移到我们的数据库并测试服务器。
我们可以从创建迁移并将其应用到我们的数据库开始。 由于我们还没有任何实际数据,这将简单地设置初始数据库结构:
cd ~/myproject python manage.py makemigrations python manage.py migrate
创建数据库结构后,我们可以通过键入以下内容创建管理帐户:
python manage.py createsuperuser
系统将要求您选择用户名,提供电子邮件地址,然后选择并确认帐户密码。
设置管理员帐户后,您可以通过启动 Django 开发服务器来测试您的数据库是否正常运行:
python manage.py runserver 0.0.0.0:8000
在您的网络浏览器中,访问您的服务器的域名或 IP 地址,后跟 :8000
以访问默认的 Django 根页面:
http://server_domain_or_IP:8000
您应该会看到默认的索引页面:
将 /admin
附加到 URL 的末尾,您应该能够访问管理界面的登录屏幕:
输入您刚刚使用 createsuperuser
命令创建的用户名和密码。 然后您将被带到管理界面:
完成调查后,您可以通过在终端窗口中按 CTRL-C 来停止开发服务器。
通过访问管理界面,我们已经确认我们的数据库已经存储了我们的用户帐户信息并且可以适当地访问它。
结论
在本指南中,我们演示了如何安装和配置 MySQL 或 MariaDB 作为 Django 项目的后端数据库。 虽然 SQLite 可以轻松处理开发和轻型生产使用期间的负载,但大多数项目都受益于实现功能更全的 DBMS。