如何在Ubuntu 14.04上安装CouchDB和Futon

2018-10-09 17:31:42 浏览数 (1)

介绍

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

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

目标

到本文结束时,您将:

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

准备

请完成以下准备:

  • Ubuntu 14.04 腾讯云CVM,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
  • 以具有管理权限的非root用户身份登录到服务器

注意:虽然本教程假设非root用户,但您也可以以root用户身份执行以下步骤,以防您不想创建sudo用户。请注意,如果您使用的是非root用户,则在第一次使用sudo权限执行命令时会要求您输入密码。

第1步 - 准备服务器

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

首先更新系统:

代码语言:javascript复制
sudo apt-get update

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

代码语言:javascript复制
sudo apt-get install software-properties-common -y

注意:-y标志告诉apt-get命令假定Yes响应安装过程中可能出现的所有提示。如果您希望手动响应提示,则可以删除此标志。

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

代码语言:javascript复制
sudo add-apt-repository ppa:couchdb/stable -y

警告:在向服务器添加新的个人包存档(PPA)时应特别小心。由于任何人都可以创建PPA,因此不能保证它可以被信任或者它是安全的。在这种情况下,上述PPA是官方的,由Apache CouchDB团队维护。

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

代码语言:javascript复制
sudo apt-get update

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

第2步 - 安装CouchDB

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

代码语言:javascript复制
sudo apt-get remove couchdb couchdb-bin couchdb-common -yf

注意:如果您有新的腾讯云CVM,则可以忽略此步骤。

现在安装CouchDB:

代码语言:javascript复制
sudo apt-get install couchdb -y

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

默认情况下,CouchDB在localhost上运行并使用端口5984。您可以通过curl从命令行运行来检索此基本信息:

代码语言:javascript复制
curl localhost:5984

注意:如果尚未安装curl,则可以使用sudo apt-get install curl命令进行安装。

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

代码语言:javascript复制
{"couchdb":"Welcome","uuid":"b9f278c743b5fc0b971c4e587d77582e","version":"1.6.1","vendor":{"name":"Ubuntu","version":"14.04"}}

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

代码语言:javascript复制
curl -X PUT localhost:5984/new_database

结果应如下所示:

代码语言:javascript复制
{"ok":true}

第3步 - 确保CouchDB安装的安全

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

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

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

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

代码语言:javascript复制
sudo stop couchdb

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

代码语言:javascript复制
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的安装),而没有其他用户访问这些文件和目录。

代码语言:javascript复制
sudo chmod -R 0770 /usr/lib/couchdb /usr/share/couchdb /etc/couchdb /usr/bin/couchdb

剩下要做的就是重启CouchDB:

代码语言:javascript复制
sudo start couchdb

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

第4步 - 访问Futon

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

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

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

代码语言:javascript复制
ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

注意:请记住使用您的用户名替换sammy,并使用您的腾讯云CVM的IP地址替换your_server_ip。

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

代码语言:javascript复制
http://localhost:5984/_utils

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

您可以通过单击“ 修复此链接”并创建新管理员来更改此设置。

第5步 - 添加管理员用户

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

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

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

要执行此操作,请单击Futon右下角显示的“ 修复此链接”。这将打开一个允许您创建CouchDB管理员用户的屏幕,如下所示:

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

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

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

小心分发对服务器的SSH访问权限。

至此,我们的CouchDB服务器现已完全配置。

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

从Futon执行CRUD操作

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

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

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

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

代码语言:javascript复制
ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

让我们首先再http://localhost:5984/_utils/上访问Futon页面。

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

创建数据库和文档

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

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

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

创建文档

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

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

单击“ 添加字段”链接以向此文档添加新字段。

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

双击该值以更改它。

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

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

要保存文档,请单击“ 保存文档”链接。保存文档后,您将看到_rev已添加一个字段,如下所示:

阅读文件

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

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

编辑文档

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

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

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

对更改满意后,单击“ 保存文档”链接以更新文档。完成后,您会注意到该_rev字段的值也已更新。

删除文档

要删除文档,可以单击“ 删除文档”链接,该链接将提示您进行确认:

按“ 删除”按钮确认。

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

从命令行执行CRUD操作

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

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

代码语言:javascript复制
ssh -L5984:127.0.0.1:5984 sammy@your_server_ip

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

创建数据库

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

代码语言:javascript复制
 curl -X PUT http://localhost:5984/new_database -u "admin:password"
{"ok":true}

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

结果应如下所示:

代码语言:javascript复制
{"ok":true}

创建文档

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

代码语言:javascript复制
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标志。

该操作的响应如下:

代码语言:javascript复制
{"ok":true,"id":"803da996e1524591ce773d24400004ff","rev":"1-2fc1d70532433c39c9f61480607e3681"}

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

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

使用指定的ID创建

使用random_taskID创建文档:

代码语言:javascript复制
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的新文档。对此命令的响应如下:

代码语言:javascript复制
{"ok":true,"id":"random_task","rev":"1-bceeae3c4a9154c87db1649473316e44"}

创建多个文档

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

代码语言:javascript复制
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_docsURL。

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

代码语言:javascript复制
[{"ok":true,"id":"803da996e1524591ce773d24400007df","rev":"1-778fd61f8f460d0c1df1bb174279489d"},{"ok":true,"id":"803da996e1524591ce773d2440001723","rev":"1-dc9e84861bba58e5cfefeed8f5133636"}]

阅读文件

从CouchDB数据库中检索文档很简单,只需发出HTTP GET命令即可。让我们尝试检索上面创建的一个名为random_task的文档。

代码语言:javascript复制
curl -X GET http://localhost:5984/new_database/random_task

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

代码语言:javascript复制
Output{"_id":"random_task","_rev":"1-bceeae3c4a9154c87db1649473316e44","todo":"task 2","done":false}

编辑文档

在尝试更新文档时,包含该_rev字段非常重要。CouchDB将拒绝任何不包含_rev字段的更新请求。由于CouchDB更新整个文档,而不仅仅是部分文档,因此在更新操作期间必须在请求正文中发送整个文档。

要更新使用random_taskID创建的文档,我们需要发出HTTP PUT请求,如下所示:

代码语言:javascript复制
curl -X PUT -d '{"_rev":"1-bceeae3c4a9154c87db1649473316e44", "todo":"task 2", "done":true}' http://localhost:5984/new_database/random_task

请务必使用您在上一个输出中收到的字符串替换_rev值。

这会修改文档并将done字段更新为true。对此请求的回复如下:

代码语言:javascript复制
Output{"ok":true,"id":"random_task","rev":"2-4cc3dfb6e76befd665faf124b36b7f1c"}

从响应中可以看出,此特定文档的字段rev在更新后会发生更改。此后任何更新或删除此文档的请求现在都必须使用最新rev值。

删除文档

让我们使用这个新rev值来使用HTTP DELETE请求删除此文档,如下所示:

代码语言:javascript复制
curl -X DELETE http://localhost:5984/new_database/random_task?rev=2-4cc3dfb6e76befd665faf124b36b7f1c

就像上面的GET和PUT请求一样,DELETE请求使用指向文档的URL。但是,它还在URL中包含其他查询参数。此参数rev应具有删除操作成功的最新值_rev

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

代码语言:javascript复制
{"ok":true,"id":"random_task","rev":"3-07d6cde68be2a559497ec263045edc9d"}

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

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

重新开始

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

代码语言:javascript复制
sudo restart couchdb

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

代码语言:javascript复制
Outputrestart: Unknown instance:

停止

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

代码语言:javascript复制
sudo stop couchdb

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

代码语言:javascript复制
couchdb stop/waiting

开始

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

代码语言:javascript复制
sudo start couchdb

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

代码语言:javascript复制
couchdb start/running, process 12345

另一方面,如果已经运行了CouchDB实例,则执行上述命令将导致如下消息:

代码语言:javascript复制
start: Job is already running: couchdb

状态

如果要检查CouchDB的状态,可以使用以下命令执行此操作:

代码语言:javascript复制
sudo status couchdb

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

代码语言:javascript复制
couchdb start/running, process 12345

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

代码语言:javascript复制
couchdb stop/waiting

结论

您现在可以在腾讯云CVM上使用CouchDB进行全功能设置,您可以使用Futon或命令行从本地计算机安全地进行管理。

想要了解更多关于安装CouchDB和Futon的相关教程,请前往腾讯云 社区学习更多知识。


参考文献:《How To Install CouchDB and Futon on Ubuntu 14.04》

0 人点赞