如何在 Debian 11 上安装 Apache CouchDB NoSQL 数据库服务器
在此页
- 先决条件
- 第 1 步 - 安装实用程序
- 第 2 步 - 添加 CouchDB 存储库
- 第 3 步 - 安装 CouchDB
- 第 4 步 - 验证 CouchDB 安装
- 第 5 步 - 访问 CouchDB
- 第 6 步 - 使用 CouchDB 接口的基本数据库操作
- 创建数据库
- 创建文档
- 删除文档
- 创建数据库
- 创建文档
- 批量创建文档
- 阅读文档
- 编辑文档
- 删除文档
- 查看数据
Apache CouchDB 是由 Apache 软件基金会开发的开源 NoSQL 数据库。每个数据库都是 JSON 格式的文档集合。每个文档都包含许多字段和附件。它带有一个 restful API,允许您创建、编辑和删除数据库文档。它支持两种模式——独立模式和集群模式。如果您在单个服务器上使用它,则可以使用独立模式。如果您使用多个服务器,集群模式会有所帮助。
本教程将教您如何在 Debian 11 服务器上安装 Apache CouchDB 数据库服务器。您还将学习如何执行一些基本的数据库操作,以及如何使用 Caddy Web 服务器通过公共 URL 访问 CouchDB。
先决条件
-
A server running Debian 11.
-
Sudo package is installed.
$ apt install sudo
-
A non-root user with sudo privileges.
-
Everything is updated.
$ sudo apt update && sudo apt upgrade
-
A fully qualified domain name (FQDN), like,
couchdb.example.com
to access CouchDB over a public URL with HTTPS.
第 1 步 - 安装实用程序
在继续安装之前,我们需要安装本教程所需的一些工具。运行以下命令来安装它们。
$ sudo apt install -y curl apt-transport-https gnupg nano lsb-release
第 2 步 - 添加 CouchDB 存储库
第一步是导入 CouchDBs GPG 密钥。运行以下命令以导入密钥。
$ curl https://couchdb.apache.org/repo/keys.asc | gpg --dearmor | sudo tee /usr/share/keyrings/couchdb-archive-keyring.gpg >/dev/null 2>&1
将 CouchDBs 存储库添加到系统存储库列表。
$ echo "deb [signed-by=/usr/share/keyrings/couchdb-archive-keyring.gpg] https://apache.jfrog.io/artifactory/couchdb-deb/ `lsb_release -cs` main" \ | sudo tee /etc/apt/sources.list.d/couchdb.list >/dev/null
更新系统存储库列表。
$ sudo apt update
第 3 步 - 安装 CouchDB
运行以下命令来安装 CouchDB。
$ sudo apt install couchdb -y
CouchDB 安装程序会自动提示您配置基本设置。在第一步中,它会询问您是否要在单个服务器设置或多个节点中使用它。由于我们将其安装在单个服务器上,因此请保持选中该选项并按 Enter 继续。
接下来,您将被要求设置一个 cookie 名称。选择您想要的任何名称。
接下来,系统会要求您为 CouchDBs 服务设置绑定地址。由于我们将其安装在服务器上,并且需要通过 UI 控制面板访问它,因此将 0.0.0.0 设置为绑定地址。如果您计划将对 CouchDB 服务器的访问限制为 IP 地址,请使用该地址。
接下来,系统会要求您为其默认管理员帐户创建管理员密码。
系统将要求您再次验证密码。
按 Enter 键完成安装过程。
第 4 步 - 验证 CouchDB 安装
要验证安装是否成功,请运行以下命令。
$ curl http://127.0.0.1:5984/
它将返回一个 JSON 格式的输出,其中包含有关 CouchDB 的信息。
{"couchdb":"Welcome","version":"3.2.2","git_sha":"d5b746b7c","uuid":"7a20b1eadd803f1c0d77fb9617c7f3de","features":["access-ready","partitioned","pluggable-storage-engines","reshard","scheduler"],"vendor":{"name":"The Apache Software Foundation"}}
shell 输出未格式化。这是它在格式化时的样子。
{ "couchdb":"Welcome", "version":"3.2.2", "git_sha":"d5b746b7c", "uuid":"7a20b1eadd803f1c0d77fb9617c7f3de", "features":[ "access-ready", "partitioned", "pluggable-storage-engines", "reshard", "scheduler" ], "vendor":{ "name":"The Apache Software Foundation" } }
您也可以通过访问 URL
http://
通过 Web 访问它。但在此之前,我们需要在防火墙中打开端口。假设您使用的是 Uncomplicated Firewall(ufw),请运行以下命令打开端口。:5984/ $ sudo ufw allow 5984/tcp
在浏览器中打开 URL
http://
。您将看到以下屏幕。以下输出是在 Firefox 上捕获的。在其他浏览器中,您只会看到您在终端中获得的原始输出。:5984 第 5 步 - 访问 CouchDB
CouchDB 附带一个名为 Fauxton 的基于 Web 的 GUI 来管理和创建数据库。您可以通过 URL
http://
访问它。在您最喜欢的浏览器中启动 URL,您将看到以下登录屏幕。:5984/_utils/ 输入 admin 作为您的用户名和之前创建的密码。按登录按钮继续。接下来,您将被带到 CouchDB 仪表板。
在这里,您将看到两个在安装期间创建的数据库。
_users
数据库按预期处理 CouchDB 平台用户的信息,_replicator
数据库保存有关任何复制数据库或操作的信息。您还将看到一个侧边栏,其中包含您可以与 CouchDB 一起使用的各种选项。
第 6 步 - 使用 CouchDB 接口的基本数据库操作
CouchDB 的 Fauxton 接口允许我们执行基本的 CRUD 操作(创建、读取、更新和删除)。让我们从创建一个新数据库开始。
创建数据库
要创建新数据库,请单击主屏幕上的创建数据库链接。它将打开以下弹出窗口。
输入要创建的数据库的名称,然后单击“创建”按钮。
这将创建一个新数据库并打开以下屏幕。
创建文档
现在我们有了一个数据库,让我们在其中创建一个文档。单击“创建文档”按钮开始。您将获得以下新文档屏幕,其中预填充了一个 JSON 对象和一个带有全局唯一标识符 (GUID) 的
_id
。让我们通过以下方式添加更多字段来添加一些数据。如果您想更改
_id
字段的值,您可以但只能在创建文档之前进行。创建文档后,您无法更改其值。不过,您可以随时编辑其他字段。{ "_id": "0b4ad0d607479c09bb9121b146007363", "Name": "Navjot Singh", "role": "writer", "skills": "linux" }
完成添加字段后单击创建文档按钮以保存新文档。您将返回到以下所有文档页面。
要查看文档的内容,您可以点击 {} JSON 链接。
要编辑文档,您可以单击右侧显示的铅笔图标或切换回元数据视图并单击文档链接。更改任何项目的值并单击保存文档以完成它。
删除文件
要删除文档,请单击文档前面的复选标记,然后选择顶部的删除按钮,如下所示。
第 7 步 - 使用命令行的基本数据库操作
虽然使用 Web 界面是使用 CouchDB 的一种更简单的方法,但通过命令行执行相同的操作可以实现更高的效率。
创建数据库
在我们开始创建数据库之前,让我们为要连接的 URL 定义一个变量。我们将为我们的示例使用简单的纯文本身份验证。由于我们需要对每个命令进行身份验证,因此最好为其使用预定义的变量。您可以使用
localhost
或127.0.0.1
连接到 CouchDB 安装。$ HOST="http://admin::5984"
注意:使用纯文本密码不是最好的方法,不应在生产环境中使用。您可以查看 CouchDBs 官方文档以获取更安全的身份验证方法。
现在我们已经定义了主机 URL,让我们尝试使用以下命令创建另一个数据库。
$ curl -X PUT $HOST/another_db
数据库的名称是
another_db
。我们需要为命令提供管理员密码。创建文档
要创建文档,请运行以下命令。
$ curl -X POST -d '{"todo":"task 1", "done":false}' $HOST/another_db -H "Content-Type:application/json"
-X
标志表示我们正在执行 HTTP POST 操作。-H
标志指定我们推送的内容类型,这里是 JSON。-d
标志指定了我们要添加的实际 JSON 内容。上面的命令会自动为文档生成一个 ID。它将生成以下输出,表明命令成功。
{"ok":true,"id":"0b4ad0d607479c09bb9121b14600c6ee","rev":"1-2fc1d70532433c39c9f61480607e3681"}
如您所见,文档的 ID 是自动生成的。如果要指定自定义 ID,可以通过以下方式进行。
$ curl -X POST -d '{"_id":"random_task", "todo":"task 2", "done":false}' $HOST/another_db -H "Content-Type:application/json" {"ok":true,"id":"random_task","rev":"1-bceeae3c4a9154c87db1649473316e44"}
批量创建文档
您还可以批量添加文档。
$ curl -X POST -d '{"docs": [{"todo":"task 3", "done":false}, {"todo":"task 4", "done":false}]}' $HOST/another_db/_bulk_docs -H "Content-Type:application/json"
如您所见,当我们插入多个文档时,POST 主体包含一个带有
docs
字段的对象。该字段包含要插入数据库的文档数组。插入单个文档时,POST 请求被发送到数据库 ($HOST/another_db
)。但是当我们需要插入多个文档时,请求必须发送到$HOST/another_db/_bulk_docs
URL。您将收到类似的输出。
[{"ok":true,"id":"0b4ad0d607479c09bb9121b14600cb04","rev":"1-778fd61f8f460d0c1df1bb174279489d"},{"ok":true,"id":"0b4ad0d607479c09bb9121b14600d9ef","rev":"1-dc9e84861bba58e5cfefeed8f5133636"}]
在这里您可以看到,输出包含两个新文档的 ID。
阅读文档
要从数据库中读取文档,您需要指定其 ID。运行以下命令以检索
random_task
文档。由于我们使用了 HTTP POST 请求来添加数据,因此要检索数据就需要使用 GET 请求。$ curl -X GET $HOST/another_db/random_task
您将收到以下输出。
{"_id":"random_task","_rev":"1-bceeae3c4a9154c87db1649473316e44","todo":"task 2","done":false}
在这里,记下文档的
_rev
字段。当您需要编辑或删除文档时,此字段很有用。编辑文档
要编辑文档,您需要使用
_rev
字段。任何不包含_rev
字段的请求在编辑时都会被 CouchDB 自动拒绝。由于 CouchDB 更新整个文档,因此在编辑操作期间必须在请求正文中发送整个文档。让我们使用以下命令更新
random_task
文档。$ curl -X PUT -d '{"_rev":"1-bceeae3c4a9154c87db1649473316e44", "todo":"task 2", "done":true}' $HOST/another_db/random_task
确保将
_rev
字段的值替换为阅读文档时获得的值。它应该与实际文档中的值相匹配。您将收到类似于下面的输出。
{"ok":true,"id":"random_task","rev":"2-4cc3dfb6e76befd665faf124b36b7f1c"}
如果您注意到,
rev
字段数据已更改。对文档的任何进一步更改都将要求您使用这个新的rev
值。删除文件
要删除文档,您需要指定 ID 和更新的
rev
值。让我们删除random-task
文件。$ curl -X DELETE $HOST/another_db/random_task?rev=2-4cc3dfb6e76befd665faf124b36b7f1c
确保命令中
rev
字段的值与实际文档中的值相匹配。您将获得类似如下的输出。{"ok":true,"id":"random_task","rev":"3-07d6cde68be2a559497ec263045edc9d"}
查看数据
让我们检查服务器上所有数据库的列表。
$ curl -X GET $HOST/_all_dbs
列出特定数据库下的所有文档。
$ curl -X GET $HOST/another_db/_all_docs
第 8 步 - 安装 Caddy 服务器
到目前为止,我们已经使用服务器 IP 地址访问了 CouchDB。如果您想将其替换为您的域名并在其前面使用 SSL 以使其更安全,则有一种简单的方法。对于我们的教程,我们将使用 Caddy Server,因为它是轻量级的,只需最少的配置即可工作,并且内置了 SSL 创建功能。
运行以下命令来安装 Caddy 需要的一些包。它们可能已经安装在您的服务器上。
$ sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
安装 Caddys GPG 密钥并将官方存储库添加到 Debians 存储库列表。
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg $ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
安装 Caddy 服务器。
$ sudo apt update $ sudo apt install caddy
运行以下命令以验证安装。
$ caddy version v2.5.1 h1:bAWwslD1jNeCzDa+jDCNwb8M3UJ2tPa8UZFFzPVmGKs=
第 9 步 - 配置 Caddy
要将 Caddy 配置为反向代理服务器,您需要配置 Caddyfile。打开 Caddyfile 进行编辑。
$ sudo nano /etc/caddy/Caddyfile
用以下代码替换其中的代码。
couchdb.example.com { reverse_proxy localhost:5984 tls log { output file /var/log/caddy/couchdb.log } }
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
运行 Caddy 验证程序以检查是否存在任何问题。
$ caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile
如果您收到有关格式的任何错误,请运行以下命令进行修复。
$ sudo caddy fmt --overwrite /etc/caddy/Caddyfile
再次运行验证器。
重新启动 Caddy 服务器以实施更改。
$ sudo systemctl restart caddy
您现在可以在浏览器中通过 URL
https://couchdb.example.com/_utils/
访问 CouchDB。结论
您已经学习了如何在 Debian 11 机器上安装 Apache CouchDB 数据库服务器。您还学习了如何通过命令行和 Fauxton UI 执行基本的数据库操作。最后但同样重要的是,您还学习了如何使用 Caddy 作为反向代理服务器在 Internet 上公开 Fauxton UI。如果您有任何问题,请在下面的评论中发表。