3.1. 配置简介

3.1.1. 配置文件

默认情况下,CouchDB 从以下位置读取配置文件,顺序如下:

  1. etc/default.ini

  2. etc/default.d/*.ini

  3. etc/local.ini

  4. etc/local.d/*.ini

位于 *.d/ 目录中的配置文件按名称排序,这意味着例如名为 etc/local.d/00-shared.ini 的文件将在 etc/local.d/10-server-specific.ini 之前加载。

所有路径都是相对于 CouchDB 安装目录指定的:在类 Unix 系统上建议使用 /opt/couchdb,在 Windows 系统上建议使用 C:\CouchDB,在 macOS 上建议使用两个目录的组合:Applications/Apache CouchDB.app/Contents/Resources/couchdbx-core/etc 用于 default.inidefault.d 目录,以及 /Users/<your-user>/Library/Application Support/CouchDB2/etc/couchdb/Users/<your-user>/Library/Preferences/couchdb2-local.ini 之一用于 local.inilocal.d 目录。

后续文档中的设置将覆盖之前条目中的设置。例如,在 local.ini 中设置 chttpd/bind_address 参数将覆盖 default.ini 中的任何设置。

警告

在升级或重新安装期间,default.ini 文件可能会被覆盖,因此本地化更改应在 local.ini 文件或 local.d 目录中的文件中进行。

可以通过设置 ERL_FLAGS 环境变量来更改配置文件链

export ERL_FLAGS="-couch_ini /path/to/my/default.ini /path/to/my/local.ini"

或者将 -couch_ini .. 标志直接放在 etc/vm.args 文件中。在启动 couchdb 时将 -couch_ini .. 作为命令行参数传递与设置 ERL_FLAGS 环境变量相同。

警告

环境变量/命令行标志将覆盖 etc/vm.args 文件中指定的任何 -couch_ini 选项。并且,这两个选项都完全覆盖 CouchDB 从默认位置搜索。仅在必要时使用这些选项,并确保跟踪 etc/default.ini 的内容,这些内容可能会在将来的版本中发生变化。

如果需要使用不同的 vm.argssys.config 文件,例如,在与 CouchDB 提供的文件不同的位置,或者您不想编辑原始文件,可以通过设置 COUCHDB_ARGS_FILE 或 COUCHDB_SYSCONFIG_FILE 环境变量来更改默认位置

export COUCHDB_ARGS_FILE="/path/to/my/vm.args"
export COUCHDB_SYSCONFIG_FILE="/path/to/my/sys.config"

3.1.2. 参数名称和值

所有参数名称都区分大小写。每个参数都采用五种类型之一的值:布尔值整数字符串元组属性列表。布尔值可以写成 truefalse

值为 元组属性列表 的参数遵循 Erlang 对样式和命名的要求。

3.1.3. 通过配置文件设置参数

在版本 3.3 中更改:添加了在参数名称中使用 = 的功能

在版本 3.3 中更改:删除了未记录的多行值功能。

设置某些参数的常用方法是编辑 local.ini 文件(位置如上所述)。

例如

; This is a comment
[section]
param = value ; inline comments are allowed

每个配置文件行可能包含 定义、参数 规范、空行(仅包含空格和换行符)或 注释 行。您可以为 参数 设置 内联 注释。

定义了属于 CouchDB 特定子系统的参数组。例如,httpd 节不仅包含 HTTP 服务器参数,还包含其他直接与之交互的参数。

参数 规范包含由 等号 (=) 分隔的两个部分:左侧为参数名称,右侧为参数值。= 前后的空格是可选的,以提高配置的可读性。

从版本 3.3 开始,可以在参数名称中使用 =,但前提是参数和值之间用空格隔开,即等号两侧至少有一个空格。这在 [jwt_keys] 节中可能很有用,因为 base64 编码的密钥可能包含一些 = 字符。

注意

如果您想从 default.ini 中删除某个参数,而不修改该文件,您可以在 local.ini 中覆盖它,但不要设置任何值

[compactions]
_default =

这可以理解为:“如果之前设置过 _default 参数,则从 compactions 节中删除它”。

分号 (;) 表示注释的开始。此字符之后的所有内容都被 CouchDB 忽略。

编辑配置文件后,应重新启动 CouchDB 以应用任何更改。

3.1.4. 通过 HTTP API 设置参数

或者,可以通过 HTTP API 设置配置参数。此 API 允许在不重启服务器的情况下动态更改 CouchDB 配置

curl -X PUT http://localhost:5984/_node/<name@host>/_config/uuids/algorithm -d '"random"'

旧参数的值将在响应中返回

"sequential"

通过 HTTP API 更改配置时应谨慎,因为这可能会导致 CouchDB 无法访问,例如,通过更改 chttpd/bind_address

curl -X PUT http://localhost:5984/_node/<name@host>/_config/chttpd/bind_address -d '"10.10.0.128"'

如果您输入错误或指定的 IP 地址在您的网络中不可用,CouchDB 将无法访问。解决此问题的唯一方法是远程登录到服务器,更正配置文件并重新启动 CouchDB。为了防止此类意外发生,您可以设置 chttpd/config_whitelist,以允许通过 HTTP API 更新的配置参数。设置此选项后,对非白名单参数的进一步更改必须通过配置文件进行,并且在大多数情况下,还需要在生效之前重启服务器。

3.1.5. 配置本地节点

虽然HTTP API 允许配置集群中的所有节点,但为了方便起见,您可以使用文字字符串 _local 来代替节点名称,以与本地节点的配置进行交互。例如

curl -X PUT http://localhost:5984/_node/_local/_config/uuids/algorithm -d '"random"'