如何在Ubuntu 14.04安装的CouchDB和Futon

[Apache CouchDB的(http://couchdb.apache.org/),喜欢的Redis,Cassandra,和MongoDB,是*的NoSQL数据库*。 CouchDB中存储的数据作为其本质上是非关系JSON文档。这使得CouchDB的用户存储的方式,看起来非常相似,他们的真实世界同行的数据。 您可以通过命令行或称为蒲团Web界面管理CouchDB的。蒲团可用于执行诸如创建和操作数据库,文档,和用户的CouchDB管理任务。

介绍

Apache CouchDB的 ,像Redis的,Cassandra,和MongoDB,是一个NoSQL的数据库 CouchDB将数据存储为本质上是非关系的JSON文档。 这允许CouchDB的用户以看起来非常类似于他们的真实世界对应方式的方式存储数据。

您可以从命令行或从名为Futon的Web界面管理CouchDB。 Futon可用于执行管理任务,如为CouchDB创建和操作数据库,文档和用户。

目标

在本文末尾,您将:

  • 有CouchDB安装在运行Ubuntu 14.04的Droplet上
  • 将Futon安装在同一台服务器上
  • 已经安全CouchDB安装
  • 使用Futon从本地计算机访问CouchDB,使用安全隧道
  • 知道如何添加一个管理员用户到CouchDB
  • 使用Futon对CouchDB执行CRUD操作
  • 使用CouchDB从命令行执行CRUD操作

先决条件

请完成以下先决条件:

注:虽然本教程假定非root用户,可以执行下列步骤作为root用户为好,如果你不希望创建一个用户Sudo。 请注意,如果你使用一个非root用户,你会被要求输入密码,您执行了命令第一次sudo

第1步 - 准备服务器

在我们可以安装CouchDB之前,我们需要确保服务器已经设置好了。

从更新系统开始:

sudo apt-get update

安装允许您管理源存储库的软件:

sudo apt-get install software-properties-common -y

注: -y标志告诉apt-get命令来承担一个Yes响应所有在安装过程中可能出现的提示进行操作。 如果您希望手动响应提示,可以删除此标志。

添加PPA将帮助我们从相应的存储库获取最新的CouchDB版本:

sudo add-apt-repository ppa:couchdb/stable -y

警告:应十分注意,同时增加了新的个人存档包(PPA)到服务器服用。 由于任何人都可以创建PPA,因此无法保证其可信任或安全。 在这种情况下,上述PPA是官方的,由Apache CouchDB团队维护。

现在我们已经添加了一个新的PPA,让我们更新系统,以便它有最新的软件包信息:

sudo apt-get update

我们现在准备安装CouchDB和Futon。

第2步 - 安装CouchDB

如果以前在此服务器上安装了CouchDB,请先删除现有版本:

sudo apt-get remove couchdb couchdb-bin couchdb-common -yf

注意:如果你有一个新的Droplet,可以忽略这一步。

现在安装CouchDB:

sudo apt-get install couchdb -y

这将在您的服务器上安装CouchDB和Futon。

默认情况下,CouchDB的运行在本地主机上,使用端口5984。 您可以通过运行检索这些基本信息curl在命令行:

curl localhost:5984

注意:如果你没有curl安装,您可以使用sudo apt-get install curl命令来安装它。

您应该得到类似以下内容:

{"couchdb":"Welcome","uuid":"b9f278c743b5fc0b971c4e587d77582e","version":"1.6.1","vendor":{"name":"Ubuntu","version":"14.04"}}

现在,您可以创建一个新的数据库curl -X PUT命令:

curl -X PUT localhost:5984/new_database

结果应如下所示:

{"ok":true}

第3步 - 保护CouchDB安装

默认情况下,一些文件和安装的CouchDB时创建的目录属于root用户和组。 虽然这在开发期间很好(虽然不可取),但它可能是生产中的安全风险。

当安装CouchDB的,它会创建一个用户和一组命名的CouchDB。 在本节中,我们将改变CouchDB的文件到CouchDB的用户和组的所有权和权限。

更改所有权控制什么 CouchDB的进程可以访问和更改可以访问CouchDB的文件和目录的权限控制。

在更改所有权和权限之前,停止CouchDB:

sudo stop couchdb

更改所有权/usr/lib/couchdb/usr/share/couchdb ,并/etc/couchdb目录,而/usr/bin/couchdb可执行文件,使得它们的主人是CouchDB的以及他们所属的CouchDB的组。

sudo chown -R couchdb:couchdb /usr/lib/couchdb /usr/share/couchdb /etc/couchdb /usr/bin/couchdb

现在,更改的权限/usr/lib/couchdb/usr/share/couchdb ,并/etc/couchdb目录,而/usr/bin/couchdb可执行文件,使得CouchDB的用户和CouchDB的组拥有完全访问(到CouchDB安装),而没有其他用户可以访问这些文件和目录。

sudo chmod -R 0770 /usr/lib/couchdb /usr/share/couchdb /etc/couchdb /usr/bin/couchdb

所有剩下要做的是重新启动CouchDB:

sudo start couchdb

CouchDB的现在应该启动和运行没有任何文件或属于无论是root用户或组目录。

第4步 - 访问Futon

CouchDB提供了一个方便的基于web的控制面板,称为Futon。 我们打算从本地工作站访问,通过SSH连接到你的服务器隧道的流量。 这意味着只有具有SSH登录到您的服务器的用户才能访问Futon控制面板。

要安全地连接到CouchDB,而不使其公开可用,您可以创建从本地端口5984到远程服务器的端口5984的SSH隧道。

您可以使用下面的命令,从本地计算机上运行,以建立通道:

ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

注意:请记住您的用户名和your_server_ip与Droplet的IP地址替换sammy

当连接打开时,您可以使用端口5984从您最喜爱的网络浏览器访问Futon。访问此URL以显示有用的Futon页面:

http://localhost:5984/_utils

Futon主页截图

默认情况下,所有访问Futon的CouchDB用户都具有管理权限。 这是在右下角公布:

欢迎来到管理团队!每个人都是管理员。解决这个问题

您可以通过点击小修复此链接,并创造新的管理员改变这一点。

第5步 - 添加管理用户

现在我们已经启动并运行CouchDB,让我们开始使用它。

在创建管理用户之前,所有用户都可以使用管理权限访问CouchDB(尽管它们需要首先对服务器进行SSH访问)。

为CouchDB创建一个管理员帐户是一个很好的做法,以防止意外或未经授权的数据丢失。

要做到这一点,单击修复此链接出现在Futon的右下角。 这将打开一个屏幕,允许您创建一个CouchDB管理员用户,如下所示:

管理员用户创建屏幕

输入所需的用户名和密码:

输入用户名(如“admin”)和密码

进入新的CouchDB的用户名和一个安全的密码后,点击创建按钮。 这将创建新的管理用户。 Futon右下角的消息将通过显示类似于以下内容的消息来确认:

欢迎管理!设置更多管理员或更改密码或注销

注:管理员用户的创建防止未经授权的用户删除和修改数据库,设计文件和CouchDB的配置。 但是,它不会阻止他们创建或访问文档。

请小心对您的服务器进行SSH访问。

而已! 我们的CouchDB服务器现在完全配置。

要了解有关使用数据库的更多信息,请继续阅读。

从Futon执行CRUD操作

Futon有一个非常简单但有用的用户界面,它允许您执行基本的CRUD操作(创建,读取,更新和删除)。

在本节中,我们将创建一个名为新的数据库, todos ,添加一个新文件,然后检索,更新和删除这个文件。

注意:如果您已经创建了一个管理员用户,你将必须登录为管理员创建一个新的数据库。

确保你仍然有你的SSH隧道打开。 如果没有,就打开从你的本地计算机上使用此命令的服务器的连接:

ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

首先,让我们通过访问网页Futon在http://localhost:5984/_utils/

注意:本节假设正在使用的是设立在访问Futon上面一节中描述的一个SSH隧道访问CouchDB的。 如果您的设置不同,请确保以正确的URL访问Futon。

创建数据库和文档

Futon主页

要创建一个名为新的数据库todos ,点击屏幕上创建数据库链接。 这将弹出一个对话框如下:

新数据库对话框;输入数据库名称

输入数据库的名称,然后单击Create按钮。

这将创建一个新的数据库名为todos ,并带你到一个页面,您可以开始创建和修改在新创建的数据库中的文档。

“todos”数据库页

创建文档

要创建一个新文档,请点击页面上的新建文档的链接。

这将打开一个带有新文档的屏幕。 该文件将刚才的_id领域。 如果需要,您可以更改此字段的值,或者您可以保留原样。

单击添加字段链接;双击空值以更新它

点击添加字段链接到一个新的字段添加到该文件。

从上面可以看出,我们已经添加了两个名为领域tododone 默认情况下,新的领域有一个null值。

双击该值进行更改。

在这个例子中,我们双击的价值领域的tododone ,并已输入的值Task 1false分别。

一旦你输入的值,再按下ENTER键或点击旁边的字段的绿色小复选标记保存它的内容。 (如果不这样做会离开字段的值作为null )。这应如下所示:

创建并保存字段和值

要保存文档,单击保存文档的链接。 文档保存后,你会看到一个_rev领域已经被添加到它,如下所示:

_rev字段

阅读文档

点击上todos链接(在顶部栏旁边的Overview链接)来查看新创建的文档,作为唯一的文件todos数据库。

Todos数据库页

单击表中文档的键(ID)以访问文档详细信息页面。

编辑文档

在此页面上,您可以按如下所示编辑和更新文档字段:

文档详细信息页

要编辑字段值,请双击它并开始编辑。

您可以删除任何字段(除了_id_rev领域),添加新的字段,或更改现有字段的值。 在这个例子中,我们已经改变了的数值done从外地falsetrue如下:

更改字段值:“done”字段从“false”更改为“true”

您满意更改后,点击保存文档的链接更新文档。 一旦你这样做,你会发现,价值_rev领域得到了更新。

保存更改

删除文档

要删除文档,您可以点击删除文档的链接,这将提示您确认:

您确定要删除此文档吗?

Delete键确认。

蒲团将删除该文档,并带你到todos数据库页面,它现在应该是空的,确认该文件确实已被删除。

Todos数据库页

从命令行执行CRUD操作

本节将说明我们如何能够从使用命令行的CouchDB数据库上执行基本的CRUD(创建,读取,更新和删除)操作curl

确保你仍然有你的SSH隧道打开。 如果没有,就打开从你的本地计算机上使用此命令的服务器的连接:

ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

注意:本节将使用数据库new_database是在上述第2步( 安装CouchDB的 )创建的。 本节还假设我们使用在上面的Futon访问步骤所述一个SSH隧道访问CouchDB的。 如果你的设置是不同的,请确保您更换网址,端口和数据库名称适当地在执行下面使用的命令。

创建数据库

如果您尚未创建数据库new_database ,请立即这样做。 这个命令应该从本地工作站执行:

 curl -X PUT http://localhost:5984/new_database -u "admin:password"
{"ok":true}

由于我们增加了一个管理员用户CouchDB的,我们现在有创建一个新的数据库时,发送管理员用户名和密码。

结果应如下所示:

{"ok":true}

创建文档

让我们开始创建一个新文档。

curl -X POST -d '{"todo":"task 1", "done":false}' http://localhost:5984/new_database -H "Content-Type:application/json"

此命令将在一个新的文档new_database数据库。

-X标志指示,我们正在执行一个HTTP POST操作。 -H标志其次是首部设置了这一要求作为内容类型application/json ,因为我们正在发布一个JSON文件。 最后,JSON文档本身包括在内,与一起-d标志。

该操作的响应如下:

{"ok":true,"id":"803da996e1524591ce773d24400004ff","rev":"1-2fc1d70532433c39c9f61480607e3681"}

"ok":true这种反应的一部分,表明操作成功。 该响应包括该字段idrev ,分别表示的文档ID和文件版本。 如果需要修改或删除此文档,则需要这两个字段。

在这个例子中,是由CouchDB中生成的文件ID,因为我们没有与命令供给。 如果需要,我们可以创建一个具有我们生成的唯一ID的文档。

使用指定ID创建

创建具有ID文件random_task

curl -X POST -d '{"_id":"random_task", "todo":"task 2", "done":false}' http://localhost:5984/new_database -H "Content-Type:application/json"

这条命令创建的ID设置为一个新的文档random_task 对此命令的响应如下:

{"ok":true,"id":"random_task","rev":"1-bceeae3c4a9154c87db1649473316e44"}

创建多个文档

除了创建单个文档,我们还可以批量创建文档。

curl -X POST -d '{"docs": [{"todo":"task 3", "done":false}, {"todo":"task 4", "done":false}]}' http://localhost:5984/new_database/_bulk_docs -H "Content-Type:application/json"

此命令将创建在POST正文中指定的两个文档。 与单文档插页相比,有两个轻微的差异:

  1. 在插入单个文档时,POST正文只是一个标准的JSON对象。 在批量插入的情况下,POST主体包括具有对象docs字段。 此字段保存要插入的文档数组。
  2. 同时插入单个文档,POST请求被送到URL指向数据库( http://localhost:5984/new_database )。 对于批量插入的要求,但是,POST到http://localhost:5984/new_database/_bulk_docs URL。

批量插入操作的响应如下:

[{"ok":true,"id":"803da996e1524591ce773d24400007df","rev":"1-778fd61f8f460d0c1df1bb174279489d"},{"ok":true,"id":"803da996e1524591ce773d2440001723","rev":"1-dc9e84861bba58e5cfefeed8f5133636"}]

阅读文档

从CouchDB数据库检索文档是发出HTTP GET命令的简单问题。 让我们试着检索我们上面创建的文件之一:一个名为random_task

curl -X GET http://localhost:5984/new_database/random_task

请注意,URL包括ID( random_task正在被检索的文件)。 此GET请求的响应时,如以下所示,包含整个文档与沿_id_rev字段,它可以用于更新或删除该文件。

{"_id":"random_task","_rev":"1-bceeae3c4a9154c87db1649473316e44","todo":"task 2","done":false}

编辑文档

在试图更新文档,它包括了很重要_rev领域。 CouchDB的将拒绝任何更新请求,不包括_rev场。 由于CouchDB的更新整个文档,而不仅仅是其中的一部分,整个文件必须在请求体更新操作时发送。

要更新与该ID创建的文档random_task ,我们需要如下发出HTTP PUT请求:

curl -X PUT -d '{"_rev":"1-bceeae3c4a9154c87db1649473316e44", "todo":"task 2", "done":true}' http://localhost:5984/new_database/random_task

一定要更换_rev与您在上输出接收到的字符串值。

这会修改该文件,并更新done领域true 对此请求的响应如下:

{"ok":true,"id":"random_task","rev":"2-4cc3dfb6e76befd665faf124b36b7f1c"}

如可以在响应中可以看出, rev它已经更新之后对于该特定文档字段变化。 更新或删除该文件的任何未来要求现在必须使用最新的rev值。

删除文档

让我们用这个新的rev值,使用HTTP如下DELETE请求删除这个文件:

curl -X DELETE http://localhost:5984/new_database/random_task?rev=2-4cc3dfb6e76befd665faf124b36b7f1c

就像上面的GET和PUT请求,删除请求使用指向文档的URL。 但是,它还在URL中包括一个附加的查询参数。 这个参数, rev ,应该有最新_rev值删除操作是成功的。

在这种特殊情况下,我们使用在上一步中更新操作之后返回的值。 对上述请求的响应如下所示。

{"ok":true,"id":"random_task","rev":"3-07d6cde68be2a559497ec263045edc9d"}

重新启动,停止和启动CouchDB服务

启动,停止和重新启动CouchDB服务是相当简单的。 完成从服务器上执行这些步骤。

重新开始

要重新启动正在运行的CouchDB实例,请执行以下命令:

sudo restart couchdb

此命令将重新启动正在运行的CouchDB实例,并显示新实例的进程ID。 如果没有CouchDB的实例运行,执行这个命令会给出一个消息

restart: Unknown instance:

停止

要停止正在运行的CouchDB实例,请执行以下命令:

sudo stop couchdb

执行此命令将停止任何正在运行的CouchDB实例,并提供如下所示的确认消息:

couchdb stop/waiting

开始

要启动CouchDB,请执行以下命令:

sudo start couchdb

如果CouchDB尚未运行,则执行此命令将启动CouchDB并提供如下所示的确认消息:

couchdb start/running, process 12345

另一方面,如果有一个CouchDB实例已经运行,然后执行上面的命令将导致这样的消息:

start: Job is already running: couchdb

状态

如果要检查CouchDB的状态,可以使用以下命令:

sudo status couchdb

如果CouchDB正在运行,这将给出类似于以下内容的消息:

couchdb start/running, process 12345

如果CouchDB没有运行,检查状态将导致类似:

couchdb stop/waiting

结论

现在,您可以在Droplet上实现CouchDB的完全功能设置,您可以使用Futon或命令行从本地计算机安全地管理它。