如何在Ubuntu 14.04使用MySQL或MariaDB与Django应用程序

介绍

Django是一个用于快速创建Python应用程序的灵活框架。默认情况下,Django应用程序配置为将数据存储到轻量级SQLite数据库文件中。虽然这在一些负载下运行良好,但更传统的DBMS可以提高生产性能。 在本指南中,我们将演示如何安装和配置MySQL或MariaDB以与Django应用程序一起使用。我们将安装必要的软件,为我们的应用程序创建数据库凭据,然后启动并配置一个新的Django项目以使用此后端。

先决条件

要开始,您需要一个干净的Ubuntu 14.04服务器实例,并设置非root用户。 非root用户必须配置 sudo特权。 了解如何按照我们设置此 服务器初始设置指南 。 当您准备好继续时,请继续阅读。

从Ubuntu存储库安装组件

我们的第一步将安装我们从存储库中需要的所有碎片。我们将安装 pip ,Python的包管理器,以便安装和管理我们的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

如果您喜欢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$。 一旦你的虚拟环境是活动的,你可以安装Django pip 。 我们也将安装 mysqlclient包,这将允许我们使用我们配置的数据库:
pip install django mysqlclient
现在,我们可以开始我们的内Django项目 myproject目录。这将创建一个同名的子目录来保存代码本身,并在当前目录中创建一个管理脚本。确保在命令末尾添加点,以便正确设置:
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
在Web浏览器,访问你的服务器的域名或IP地址后面 :8000达到默认的Django根页面:
http://server_domain_or_IP:8000
您应该看到默认索引页: Django索引 追加 /admin到URL的末尾,你应该能够进入登录界面管理界面: Django管理员登录 输入您刚刚使用创建的用户名和密码 createsuperuser命令。然后,您将转到管理界面: Django管理界面 完成调查后,您可以通过在终端窗口中按CTRL-C来停止开发服务器。 通过访问管理界面,我们已经确认我们的数据库已经存储了我们的用户帐户信息,并且可以正确访问。

结论

在本指南中,我们演示了如何安装和配置MySQL或MariaDB作为Django项目的后端数据库。虽然SQLite可以轻松地处理开发和轻量级生产使用期间的负载,但大多数项目都可以从实现更全功能的DBMS中获益。
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏