帮酷LOGO
0 0 评论
文章标签:POST  pos  postgres  Postgresql  Ubuntu  

介绍

Django是一个灵活的框架,用于快速创建python应用程序,默认情况下,Django应用程序被配置为将数据存储到轻量级SQLite数据库文件中,虽然在某些负载下这工作正常,但是更传统的DBMS可以提高生产环境的性能。

在本指南中,我们将演示如何安装和配置PostgreSQL以便与Django应用程序一起使用,我们将安装必要的软件,为应用程序创建数据库凭证,然后启动和配置一个新的Django项目来使用它。

前提条件

首先,需要一个干净的Ubuntu服务器实例,非root用户必须使用sudo权限配置。

从ubuntu仓库安装组件

第一步是从仓库中安装需要的所有组件,为了安装和管理python组件,我们将安装python包管理器pip

python 2和python 3需要稍有不同的包,因此请选择下面与项目的python版本匹配的命令。

如果你使用的是python 2,请键入:


sudo apt-get update
sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib

如果你使用的是python 3,请键入:


sudo apt-get update
sudo apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib

安装完成后,我们可以继续创建数据库和数据库用户。

创建数据库和数据库用户

默认情况下,postgres将一个叫"对等身份验证"的身份验证方案用于本地连接,基本上,这意味着如果用户系统用户名与有效的,用户名匹配,那么用户就可以登录。

在Postgres安装过程中,创建了名为postgres的操作系统用户,以对应于postgres PostgreSQL管理用户,我们需要使用此用户执行管理任务,我们可以使用sudo,并通过-u选项传递用户名。

键入以下命令登录到交互式Postgres会话:


sudo -u postgres psql

首先,我们为Django项目创建一个数据库,每个项目都应该有自己的独立数据库,myproject


CREATE DATABASE myproject;

接下来,创建一个数据库用户,我们将使用它来连接数据库,并且与数据库交互,将密码设置为强大且安全的密码:


CREATE USER myprojectuser WITH PASSWORD 'password';

之后,我们将修改刚刚创建的用户的一些连接参数,这将加速数据库操作,以便每次建立连接时都不必查询和设置正确的值。

我们将默认编码设置为Django所期望的UTF-8,我们还将默认事务隔离方案设置为"read committed",这将阻止读取未提交的事务,最后,我们设置时区,默认情况下,我们的Django项目将设置为使用UTC


ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myprojectuser SET timezone TO 'UTC';

现在,给数据库用户授予创建的数据库的访问权限:


GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

退出SQL提示,返回到用户会话的postgres shell :


q

在虚拟环境中安装Django

现在已经建立了数据库,我们可以安装Django了,我们将在python虚拟环境中安装Django及它所有依赖项,以获得更好的,virtualenv包允许你轻松创建这些环境。

如果使用python 2,则可以通过键入以下命令安装正确的软件包:


sudo pip install virtualenv

如果你使用的是python 3,请键入:


sudo pip3 install virtualenv

创建并移动到一个目录以保存你的Django项目:


mkdir ~/myproject
cd ~/myproject

可以创建一个虚拟环境来存储项目需求的Django python,方法是键入:


virtualenv myprojectenv

这将在目录中安装python的本地副本和本地pip命令,myprojectenv 在项目目录内。

在在虚拟环境中安装应用程序之前,我们需要激活它,你可以通过键入以下内容来执行以下操作:


source myprojectenv/bin/activate

它看起来像这样 (myprojectenv)user@host:~/myproject$

一旦虚拟环境激活,就可以使用pip安装Django ,我们还将安装psycopg2软件包,它允许我们使用我们配置的数据库:

便笺 无论使用哪种python版本,当激活虚拟环境时,你都应该使用pip命令(非pip3 ),

pip install django psycopg2

我们现在可以在myproject目录中启动一个Django项目,


django-admin.py startproject myproject .

配置Django数据库设置

现在我们有了一个项目,我们需要将它配置成使用我们创建的数据库。

打开位于子项目目录中的主Django项目设置文件:


nano ~/myproject/myproject/settings.py

在文件底部,你将看到一个类似下面这样的DATABASES部分:

~/myproject/myproject/settings.py

. . .

DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.sqlite3',
 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
 }
}

. . .

当前配置为将SQLite用作数据库,我们需要更改它,以便我们的PostgreSQL数据库被使用。

首先,改变引擎,使它使用postgresql_psycopg2适配器而不是sqlite3适配器,对于NAME,请使用数据库的名称( myproject 在我们的例子中,我们还需要添加登录凭据,我们需要用户名,密码和主机来连接,

~/myproject/myproject/settings.py

. . .

DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.postgresql_psycopg2',
 'NAME': 'myproject',
 'USER': 'myprojectuser',
 'PASSWORD': 'password',
 'HOST': 'localhost',
 'PORT': '',
 }
}

. . .

在这里,你可能还需要调整ALLOWED_HOSTS指令,这定义了地址的白名单,或者域名可以用来连接Django实例,任何带主机标头的传入请求都将引发异常,Django要求你设置此选项以防止某些安全漏洞发生。

在方括号中,列出与Django服务器关联的IP地址或域名,下面的代码段中有一些注释出的例子用于演示:

~/myproject/myproject/settings.py

. . .
# The simplest case: just add the domain name(s) and IP addresses of your Django server
# ALLOWED_HOSTS = [ 'example.com', '203.0.113.5']
# To respond to 'example.com' and any subdomains, start the domain with a dot
# ALLOWED_HOSTS = ['.example.com', '203.0.113.5']
ALLOWED_HOSTS = ['your_server_domain_or_IP', 'second_domain_or_IP', . . .]

完成后,保存并关闭文件。

迁移数据库并测试你的项目

现在已经配置了Django设置,我们可以将数据结构迁移到数据库,并且测试服务器。

我们可以从创建和应用迁移到数据库,由于我们还没有实际的数据,这将简单地设置初始数据库结构:


cd ~/myproject
python manage.py makemigrations
python manage.py migrate

创建数据库结构后,可以通过键入以下命令创建管理帐户:


python manage.py createsuperuser

将要求你选择用户名,提供电子邮件地址,并选择并确认帐户的密码。

在访问Django开发服务器以测试数据库之前,需要打开将在防火墙上使用的端口。

通过键入以下命令允许连接到端口:


sudo ufw allow 8000

启用端口打开后,可以通过启动Django开发服务器来测试数据库是否正确执行:


python manage.py runserver 0.0.0.0:8000

在浏览器中,访问服务器名称或IP地址的域,然后单击:8000以访问默认的Django root页面:


http://server_domain_or_IP:8000



文章标签:pos  POST  Ubuntu  postgres  Postgresql  

Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语