如何在Ubuntu14.04上安装CouchDB和Futon

来自菜鸟教程
跳转至:导航、​搜索

介绍

Apache CouchDB 与 Redis、Cassandra 和 MongoDB 一样,是一个 NoSQL 数据库。 CouchDB 将数据存储为本质上非关系的 JSON 文档。 这允许 CouchDB 的用户以与现实世界中的用户非常相似的方式存储数据。

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

目标

在本文结束时,您将:

  • 在运行 Ubuntu 14.04 的 Droplet 上安装 CouchDB
  • 在同一台服务器上安装被褥
  • 已保护 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 响应。 如果您更喜欢手动响应提示,则可以删除此标志。


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

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 在 localhost 上运行并使用端口 5984。 您可以通过从命令行运行 curl 来检索此基本信息:

curl localhost:5984

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


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

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

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

curl -X PUT localhost:5984/new_database

结果应如下所示:

Output{"ok":true}

第 3 步 — 保护 CouchDB 安装

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

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

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

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

sudo stop couchdb

更改 /usr/lib/couchdb/usr/share/couchdb/etc/couchdb 目录以及 /usr/bin/couchdb 可执行文件的所有权,使其所有者为 couchdb[X148X ] 并且它们属于 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[X144X ] 用户和 couchdb 组具有完全访问权限(对 CouchDB 安装),而其他用户无权访问这些文件和目录。

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

剩下要做的就是重启 CouchDB:

sudo start couchdb

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

第 4 步 — 使用蒲团

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

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

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

ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

注意:记得用你的用户名替换sammy,用你的Droplet的IP地址替换your_server_ip


连接打开时,您可以使用端口 5984 从您喜欢的 Web 浏览器访问 Futon。 访问此 URL 以显示有用的蒲团页面:

http://localhost:5984/_utils

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

您可以通过单击小 Fix this 链接并创建新管理员来更改此设置。

第 5 步 — 添加管理员用户

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

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

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

为此,请单击出现在 Futon 右下角的 Fix this 链接。 这将打开一个屏幕,允许您创建 CouchDB 管理员用户,如下所示:

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

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

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

向您的服务器分配 SSH 访问权限时要小心。


就是这样! 我们的 CouchDB 服务器现在已完全配置。

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

从 Futon 执行 CRUD 操作

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

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

注意: 如果您创建了管理员用户,您必须以管理员身份登录才能创建新数据库。


确保您的 SSH 隧道仍然打开。 如果没有,请使用以下命令从 本地计算机 打开与服务器的连接:

ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

让我们首先访问 http://localhost:5984/_utils/ 的被褥页面。

注意: 本节假定使用 SSH 隧道访问 CouchDB,该隧道已按照上面 访问被褥 部分中所述设置。 如果您的设置不同,请确保您通过正确的 URL 访问 Futon。


创建数据库和文档

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

输入数据库名称,点击Create按钮。

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

创建文档

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

这将打开一个带有新文档的屏幕。 该文档将只有 _id 字段。 如果需要,您可以更改此字段的值,也可以保持原样。

单击 Add Field 链接以向该文档添加新字段。

如上所示,我们添加了两个名为 tododone 的字段。 默认情况下,新字段具有 null 值。

双击该值以更改它。

在这个例子中,我们双击了tododone的值域,分别输入了值Task 1false

输入值后,按 ENTER 键或单击字段旁边的绿色小复选标记以保存其内容。 (如果不这样做,该字段的值将保留为 null。)这应该如下所示:

要保存文档,请单击 Save Document 链接。 保存文档后,您会看到其中添加了一个 _rev 字段,如下所示:

阅读文档

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

点击表格中的文档键(ID),进入文档详情页面。

编辑文档

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

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

您可以删除任何字段(除了 _id_rev 字段)、添加新字段或更改现有字段的值。 在此示例中,我们将 done 字段的值从 false 更改为 true,如下所示:

对更改感到满意后,单击 保存文档 链接以更新文档。 执行此操作后,您会注意到 _rev 字段的值也已更新。

删除文档

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

Delete 按钮确认。

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

从命令行执行 CRUD 操作

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

确保您的 SSH 隧道仍然打开。 如果没有,请使用以下命令从 本地计算机 打开与服务器的连接:

ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

注意:本节将使用在上面步骤2(安装CouchDB)中创建的数据库new_database。 本节还将假设我们使用 SSH 隧道访问 CouchDB,如上面 访问 Futon 步骤中所述。 如果您的设置不同,请确保在执行下面使用的命令时适当地替换 URL、PORT 和数据库名称。


创建数据库

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

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

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

结果应如下所示:

Output{"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,因为我们正在 POST 一个 JSON 文档。 最后,包含 JSON 文档本身以及 -d 标志。

该操作的响应如下:

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

此响应的 "ok":true 部分表示操作成功。 响应包括字段 idrev,分别代表文档 ID 和文档修订版本。 如果需要修改或删除此文档,这两个字段都将是必需的。

在这个例子中,文档 ID 是由 CouchDB 生成的,因为我们没有通过命令提供它。 如果需要,我们可以创建一个具有我们生成的唯一 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 的新文档。 该命令的响应如下:

Output{"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。

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

Output[{"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 字段,可用于更新或删除此文档。

Output{"_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。 对此请求的响应如下:

Output{"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 请求一样,DELETE 请求使用指向文档的 URL。 但是,它还在 URL 中包含一个额外的查询参数。 此参数 rev 应具有最新的 _rev 值,删除操作才能成功。

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

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

重启、停止和启动 CouchDB 服务

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

重新开始

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

sudo restart couchdb

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

Outputrestart: Unknown instance:

停止

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

sudo stop couchdb

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

Outputcouchdb stop/waiting

开始

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

sudo start couchdb

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

Outputcouchdb start/running, process 12345

另一方面,如果有一个 CouchDB 实例已经在运行,那么执行上述命令将产生如下消息:

Outputstart: Job is already running: couchdb

地位

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

sudo status couchdb

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

Outputcouchdb start/running, process 12345

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

Outputcouchdb stop/waiting

结论

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