guideRedis

# 要求

CKEditor 协作服务器使用的 Redis 数据库需要满足 数据库要求 文章中提出的软件和硬件要求。

# 支持的 Redis 选项

最低支持的 Redis 版本为 3.2.6。

支持的 Redis 模式

  • Redis 单实例
  • Redis 集群

# 连接到 Redis

要连接到 Redis,至少需要设置 REDIS_HOST。支持域名、IPv4 和 IPv6。

REDIS_HOST                               - required (for Redis single instance connection)
REDIS_PORT                               - optional (default: 6379)
REDIS_DB                                 - optional (default: 1)
REDIS_PASSWORD                           - optional
REDIS_USER                               - optional
REDIS_IP_FAMILY                          - optional (required only when using an IPv6 domain as `REDIS_HOST`)

如果您使用的是仅支持 IPv6 的数据库,并且想要通过其域名引用该数据库,则需要手动选择 IP 版本。

为此,您需要将 REDIS_IP_FAMILY 环境变量设置为 6
这将强制 CKEditor 协作服务器本地部署使用 IPv6 连接。

# 连接到 Redis 集群

要设置与 Redis 集群的连接,需要将节点作为 REDIS_CLUSTER_NODES 变量提供。

REDIS_CLUSTER_NODES        - required (for Redis Cluster connection)
REDIS_IP_FAMILY            - optional (required only when using an IPv6 domain in `REDIS_CLUSTER_NODES`)

REDIS_CLUSTER_NODES 需要包含节点列表,格式为:

"IP:PORT:[optional PASSWORD],IP:PORT:[optional PASSWORD]"

要了解连接字符串格式,请查看以下示例

# IPv4
REDIS_CLUSTER_NODES: "192.168.0.5:7000,192.168.0.5:7001,192.168.0.5:7002"

# IPv4 with a password
REDIS_CLUSTER_NODES: "192.168.0.5:7000:password1,192.168.0.5:7001:password2,192.168.0.5:7002:password3"

# IPv6
REDIS_CLUSTER_NODES: "[0:0:0:0:0:0:0:1]:7000,[0:0:0:0:0:0:0:1]:7001,[0:0:0:0:0:0:0:1]:7002"

# IPv6 with a password
REDIS_CLUSTER_NODES: "[0:0:0:0:0:0:0:1]:7000:password1,[0:0:0:0:0:0:0:1]:7001:password2,[0:0:0:0:0:0:0:1]:7002:password3"

# Domain name
REDIS_CLUSTER_NODES: "example.redis.server.com:7000,example.redis.server.com:7001,example.redis.server.com:7002"

# Domain name with IPv6 support
REDIS_IP_FAMILY: 6
REDIS_CLUSTER_NODES: "example.ipv6.redis.server.com:7000,example.ipv6.redis.server.com:7001,example.ipv6.redis.server.com:7002"

# Domain name with a password
REDIS_CLUSTER_NODES: "example.redis.server.com:7000:password1,example.redis.server.com:7001:password2,example.redis.server.com:7002:password3"

# TLS 连接和证书

  • 如果您的 Redis 服务器配置为需要 SSL 连接,您可以使用 REDIS_TLS_CAREDIS_TLS_KEYREDIS_TLS_CERT 将证书传递给 Redis 客户端。
  • 如果您使用的是在 AWS ElastiCache 上托管的 Redis 实例,并且启用了“传输中加密”,则需要将 REDIS_TLS_ENABLE 环境变量设置为 true。无需传递 TLS 证书即可建立加密连接。
  • 如果您连接到启用了 TLS 的 AWS ElastiCache 集群,还需要将 REDIS_DISABLE_DNS_LOOKUP 设置为 true
REDIS_TLS_CA                             - optional
REDIS_TLS_KEY                            - optional
REDIS_TLS_CERT                           - optional
REDIS_TLS_ENABLE                         - optional (default: false)
REDIS_DISABLE_DNS_LOOKUP                 - optional (default: false)

您可以通过两种方式提供证书

# 将证书作为文件传递

要将证书作为文件传递,您需要提供其路径,该路径在应用程序容器内部可用。

REDIS_TLS_CA: /var/cs/tls/ca.crt
REDIS_TLS_CERT: /var/cs/tls/redis.crt
REDIS_TLS_KEY: /var/cs/tls/redis.key

这可能需要配置卷,以使使用的文件在提供给 REDIS_TLS_* 变量的路径下可用。

# 将证书作为文本传递

提供所需证书的另一种方式是将其作为文本提供。

REDIS_TLS_CA: "-----BEGIN CERTIFICATE-----\nMIIEBjCCAu6gAwIBAgIJAMc0ZzaSUK51MA0GCSqGSIb3DQEBCwUAMIGPMQswCQYD\nVQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n............\nzPW4CXXvhLmE02TA9/ZeCw3KkHIwicNuEfa=\n-----END CERTIFICATE-----"
REDIS_TLS_CERT: |
  -----BEGIN CERTIFICATE-----
  MIIEBjCCAu6gAwIBAgIJAMc0ZzaSUK51MA0GCSqGSIb3DQEBCwUAMIGPMQswCQYD
  ...rest_of_certificate_content
  zPW4CXXvhLmE02TA9/ZeCw3KkHIwicNuEfa=
  -----END CERTIFICATE-----
REDIS_TLS_KEY: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVCakNDQXU2Z0F3SUJBZ0lKQU1jMFoKelBXNENYWHZoTG1FMDJUQTkvWmVDdzNLa0hJd2ljTnVFZmE9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=

DATABASE_SSL_CERT 可以以三种格式提供

  • 作为单行,其中换行符应由换行符 (\n) 表示。
  • 使用文字块标量字符 (|) 的原始证书格式。
  • 作为 Base64 编码字符串。这可以解决云托管平台对换行符编码相关的问题。

# 连接到 Redis Enterprise Cloud

Redis Enterprise Cloud 要求用户使用 Redis 数据库索引 0。默认情况下,协作服务器本地部署使用 Redis 数据库索引 1。因此,您可能会遇到 ERR DB index is out of range 错误。

要修复此问题,请使用环境变量更改数据库索引

REDIS_DB: 0

# 根证书轮换

各种云提供商(例如 Azure、AWS)定期轮换其根证书,这可能需要系统管理员手动更新证书才能使应用程序保持运行。

请阅读 Azure 文档中有关此情况的详细文章

# Redis 高可用性

为了确保 Redis 的高可用性,我们建议使用至少 3 个节点(必须为奇数个节点)的集群模式下的 Redis,并使用 主从模型,这意味着服务器数量增加到 6 个。在此配置中,每个节点应至少具有 2 个内核和 2 GB 内存。

请注意,当使用 Redis 集群时,您必须使用正确的配置运行应用程序,如 此处 所述。

# 下一步