Redis
# 要求
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_CA
、REDIS_TLS_KEY
和REDIS_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)定期轮换其根证书,这可能需要系统管理员手动更新证书才能使应用程序保持运行。
# Redis 高可用性
为了确保 Redis 的高可用性,我们建议使用至少 3 个节点(必须为奇数个节点)的集群模式下的 Redis,并使用 主从模型,这意味着服务器数量增加到 6 个。在此配置中,每个节点应至少具有 2 个内核和 2 GB 内存。
请注意,当使用 Redis 集群时,您必须使用正确的配置运行应用程序,如 此处 所述。