如何在 Ubuntu 14.04 上安装 CouchDB 和 Futon

介绍

Apache CouchDB,像Redis,Cassandra和MongoDB一样,是一个NoSQL数据库。CouchDB将数据存储为具有非关系性质的JSON文档。

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

目标

到本文结束时,你将:

  • 有 CouchDB 安装在运行 Ubuntu 14.04
  • 有 Futon 安装在相同的服务器
  • 有 CouchDB 安装
  • 使用 Futon 访问 CouchDB 使用本地机器,使用安全隧道
  • 知道如何将管理员添加到 CouchDB
  • 使用 Futon 使用 CouchDB 执行 CRUD 操作* 从命令行 执行 CRUD 操作与 CouchDB

前提条件

请满足以下前提条件:

  • Ubuntu 14.04 Droplet
  • 您已登录到您的服务器作为具有管理权限的非根用户([Ubuntu 14.04 初始服务器设置])

<$>[注] 注: 虽然本教程假定非根用户,但您也可以作为用户执行下面的步骤,如果您不希望创建一个sudo用户,请注意,如果您使用的是非根用户,您将被要求在首次执行命令时使用sudo

步骤1:准备服务器

在我们能够安装CouchDB之前,我们需要确保服务器为此设置。

首先,更新系统:

1sudo apt-get update

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

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

<$>[注] 注: -y 旗指示 apt-get 命令假定对安装过程中可能出现的所有提示的响应是 Yes

添加 PPA 以帮助我们从适当的存储库中获取最新 CouchDB 版本:

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

<$>[warning] 警告: 在将新的个人包存档案(PPA)添加到您的服务器时,应该非常小心。由于任何人都可以创建一个PPA,所以没有保证它可以信任或安全。

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

1sudo apt-get update

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

第2步:安装CouchDB

如果您以前在这个服务器上安装了 CouchDB,请开始删除现有版本:

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

<$>[注] 注: 如果您有新鲜的Droplet,您可以忽略此步骤。

现在安装CouchDB:

1sudo apt-get install couchdb -y

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

默认情况下,CouchDB 运行在 localhost 上,并使用端口 ** 5984** . 您可以从命令行运行curl来获取这些基本信息:

1curl localhost:5984

<$>[注] 注: 如果您没有安装‘curl’,您可以使用‘sudo apt-get install curl’命令来安装它。

你应该得到类似于以下的东西:

1[secondary_label Output]
2{"couchdb":"Welcome","uuid":"b9f278c743b5fc0b971c4e587d77582e","version":"1.6.1","vendor":{"name":"Ubuntu","version":"14.04"}}

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

1curl -X PUT localhost:5984/new_database

结果应该是这样的:

1[secondary_label Output]
2{"ok":true}

步骤 3 – 确保 CouchDB 安装

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

当 CouchDB 安装时,它会创建一个名为 couchdb 的用户和组. 在本节中,我们将将 CouchDB 文件的所有权和权限更改为 ** couchdb** 的用户和组。

更改所有权控制 what 可访问 CouchDB 流程,更改权限控制 who 可访问 CouchDB 文件和目录。

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

1sudo stop couchdb

更改/usr/lib/couchdb,/usr/share/couchdb/etc/couchdb目录的所有权,以及/usr/bin/couchdb可执行文件,以便其所有者是 couchdb ,它们属于 ** couchdb** 组。

1sudo 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 安装),而没有其他用户可以访问这些文件和目录。

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

剩下的就是重新启动CouchDB:

1sudo start couchdb

CouchDB 现在应该在没有任何文件或目录的情况下运行,这些文件或目录都属于 root 用户或 ** root** 组。

步骤 4 – 访问 Futon

CouchDB 提供了一个方便的基于 Web 的控制面板,名为 Futon. 我们将从您的 本地工作站 访问它,通过 SSH 连接到您的服务器来隧道流量,这意味着只有在您的服务器上登录 SSH 的用户才能访问 Futon 控制面板。

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

您可以使用以下命令,从您的 本地计算机 运行,设置隧道:

1ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

<$>[注] 注: 请记住用您的用户名和您的_server_ip 代替您的 Droplet 的 IP 地址。

虽然连接是开放的,你可以从你最喜欢的网页浏览器访问Futon,使用端口5984访问这个URL显示有用的Futon页面:

1http://localhost:5984/_utils

Futon Home Page Screenshot

默认情况下,所有访问 Futon 的 CouchDB 用户都拥有管理权利。

Welcome to Admin Party! Everyone is admin. Fix this

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

步骤 5 – 添加 Admin 用户

现在我们有CouchDB并运行,让我们开始使用它。

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

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

要做到这一点,点击在Futon的右下角出现的 ** Fix this** 链接,这将带来一个屏幕,允许您创建一个CouchDB管理员用户,如下所示:

Admin User Creation Screen

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

Enter a username, such as "admin", and a password

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

Welcome admin! Setup more admins or Change password or Logout

<$>[note] ** 注意:** 创建管理员用户可以防止未经授权的用户删除和修改数据库、设计文档和 CouchDB 配置。

请小心将 SSH 访问权限交给您的服务器。

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

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

从Futon执行CRUD操作

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

在本节中,我们将创建一个名为todos的新数据库,添加一个新的文档,然后获取,更新和删除此文档。

<$>[注] 注: 如果您创建了一个管理员用户,则需要登录为管理员才能创建一个新的数据库。

请确保您的 SSH 隧道仍然打开,否则,请使用以下命令从您的本地计算机打开连接到服务器:

1ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

首先,请访问 Futon 页面:http://localhost:5984/_utils/`。

<$>[注] ** 注意:** 本节假定 CouchDB 正在使用一个 SSH 隧道访问,该隧道是如上文中的 ** 访问 Futon ** 部分所描述的。

创建数据库和文档

Futon Homepage

要创建一个名为todos的新数据库,请点击屏幕上的Create Database**链接。

New Database Dialog; enter Database Name

输入数据库的名称,然后点击创建按钮。

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

"todos" Database Page

  • 创建文档 *

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

这将打开一个新文档的屏幕. 此文档将只包含 _id 字段. 如果需要,您可以更改该字段的值,或者您可以将其留下。

Click the Add Field link; double-click the null value to update it

点击添加字段链接,将新字段添加到本文档中。

如上所示,我们已添加了两个名为全部完成的字段,默认情况下,新字段具有值。

双击该值以更改它。

在本示例中,我们双击全部完成值字段,然后分别输入任务 1错误值。

输入值后,要么按ENTER键,要么单击字段旁边的小绿色标记来保存其内容。

Create and Save Field and Values

要保存文档,请点击保存文档链接.文档保存后,您将看到一个_rev字段已添加到它,如下:

_rev field

阅读一份文件

点击todos链接(在概览链接旁边的顶部栏)以查看新创建的文档,作为todos数据库中的唯一文档。

Todos Database Page

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

编辑 文档

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

Document Details Page

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

您可以删除任何字段(除了_id_rev字段),添加新字段或更改现有字段的值。

Change Field Value: "done" field from "false" to "true"

一旦您对更改感到满意,请单击保存文档链接来更新文档. 一旦您这样做,您将注意到_rev字段的值也已更新。

Save the changes

删除一份文件

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

Are you sure you want to delete this document?

点击删除按钮来确认。

Futon 会删除该文档并将您带到todos数据库页面,该页面现在应该是空的,确认该文档确实已被删除。

Todos Database Page

从命令行执行 CRUD 操作

本节将说明如何在CouchDB数据库中使用curl执行基本的CRUD操作(创建、阅读、更新和删除)。

请确保您的 SSH 隧道仍然打开,否则,请使用以下命令从您的本地计算机打开连接到服务器:

1ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

<$>[注] 注: 本节将使用在上面的步骤 2(** Installing CouchDB** )中创建的数据库 new_database。本节还将假定我们正在使用 SSH 隧道访问 CouchDB,如上面的步骤 ** Accessing Futon** 所描述。

创建一个数据库

如果您尚未创建数据库 new_database,请现在这样做. 此命令应该从您的 本地工作站 执行:

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

由于我们已将管理员用户添加到 CouchDB,因此我们必须在创建新数据库时发送管理员用户名和密码。

结果应该是这样的:

1[secondary_label Output]
2{"ok":true}

创建一个文档

让我们从创建一个新的文件开始。

1curl -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 文档。

此操作的反应如下:

1[secondary_label Output]
2{"ok":true,"id":"803da996e1524591ce773d24400004ff","rev":"1-2fc1d70532433c39c9f61480607e3681"}

此响应的OK:true部分表示操作成功. 响应包括idrev字段,分别代表文档ID和文档修订。

在本示例中,CouchDB 生成了文档 ID,因为我们没有提供命令,如果需要,我们可以创建具有我们生成的唯一 ID 的文档。

** 使用指定 ID 创建**

创建一个 ID random_task 的文档:

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

此命令会创建一个新的文档,其ID设置为random_task

1[secondary_label Output]
2{"ok":true,"id":"random_task","rev":"1-bceeae3c4a9154c87db1649473316e44"}

** 创建多个文档**

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

1curl -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。

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

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

阅读一份文件

从 CouchDB 数据库中获取文档是发出 HTTP GET 命令的一个简单问题,让我们尝试获取我们上面创建的文档之一:被称为随机_task

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

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

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

编辑 文档

在尝试更新文档时,重要的是包括_rev字段。CouchDB 会拒绝任何不包含_rev字段的更新请求。

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

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

请确保将 _rev 值替换为您在上一个输出中收到的字符串。

这会更改文档,并将完成字段更新为

1[secondary_label Output]
2{"ok":true,"id":"random_task","rev":"2-4cc3dfb6e76befd665faf124b36b7f1c"}

正如答案所示,此特定文档的rev字段在更新后会发生变化,未来更新或删除此文档的任何请求都必须使用最新的rev值。

删除一份文件

让我们使用这个新的rev值来使用以下 HTTP DELETE 请求删除此文档:

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

与上面的 GET & PUT 请求一样,DELETE 请求使用指向文档的 URL. 但是,它还包含了 URL 中的额外查询参数。

在此特定情况下,我们使用在上一步更新操作后返回的值。

1[secondary_label Output]
2{"ok":true,"id":"random_task","rev":"3-07d6cde68be2a559497ec263045edc9d"}

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

启动、停止和重新启动 CouchDB 服务非常简单. 从 ** 服务器** 完成这些步骤。

重启

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

1sudo restart couchdb

此命令将重新启动正在运行的 CouchDB 实例并显示新实例的进程 ID。

1[secondary_label Output]
2restart: Unknown instance:

停止

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

1sudo stop couchdb

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

1[secondary_label Output]
2couchdb stop/waiting

开始

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

1sudo start couchdb

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

1[secondary_label Output]
2couchdb start/running, process 12345

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

1[secondary_label Output]
2start: Job is already running: couchdb

状态

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

1sudo status couchdb

如果 CouchDB 正在运行,则会发出类似于以下的消息:

1[secondary_label Output]
2couchdb start/running, process 12345

如果 CouchDB 未运行,则检查状态会导致以下情况:

1[secondary_label Output]
2couchdb stop/waiting

结论

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

Published At
Categories with 技术
Tagged with
comments powered by Disqus