部署到 Kubernetes
OpenReplay 的部署基于 Helm Charts,因此它与 Kubernetes 完全兼容。我们打包了 OpenReplay 所需的 PostgreSQL 和 Redis。以下是具体操作方法。
在 Kubernetes 上部署 OpenReplay 需要:
- Kubernetes v1.18+
- helm 3.10+
- 具有用户 id 1001 读写权限的 RWX PVC(用于共享组件,如果集群有多个节点)。请确保在
/var/lib/openreplay/vars.yaml中将hostPath替换为所创建的 pvc 名称。
# In case of multiple nodes in the kubernetes cluster,
# You'll have to create an RWX PVC for shared components.
# If it's a single node, we'll use hostVolume, which is the default for the community/oss edition.
pvcRWXName: "hostPath"
OpenReplay 还需要 2 vCPUs, 8 GB of RAM, 50 GB of storage 才能正常运行,否则 OpenReplay 后端服务根本无法启动。这些配置足以应对中等流量,但如果你预期会有高流量,则应在此基础上进行扩展。
该部署已在以下平台上测试通过:
- 本地单节点 Kube 集群
- Google Kubernetes Engine (GKE)
- Amazon Elastic Kubernetes Service (EKS)
- Microsoft Azure Kubernetes Service (AKS)
- Scaleway Elements Kubernetes (Kapsule)
部署 OpenReplay
Section titled 部署 OpenReplay连接到你的集群并克隆 OpenReplay 仓库:
git clone https://github.com/openreplay/openreplay.git
cd openreplay/scripts/helmcharts
如果 Kubernetes 集群中有多个节点, 你需要创建一个 RWX PVC(例如在 AWS 的情况下使用 efs),以便容器共享数据。 如果是单节点,我们将使用 hostVolume,这是 community 安装的默认值。
然后,使用命令 vim vars.yaml 打开 vars.yaml 文件,并替换:
domainName:这是 OpenReplay 可访问的地址(即 openreplay.mycompany.com)postgresqlPassword:Postgres 密码(设置一个或生成一个随机密码)accessKey:对象存储服务所需(使用随机生成的字符串)secretKey:对象存储服务所需(使用随机生成的字符串)jwt_secret:API 所需(使用随机生成的字符串)
确保你已安装 helm,然后设置 OpenReplay:
cd openreplay/scripts/helmcharts
helm upgrade --install databases ./databases -n db --create-namespace --wait -f ./vars.yaml --atomic
helm upgrade --install openreplay ./openreplay -n app --create-namespace --wait -f ./vars.yaml --atomic
配置 TLS/SSL
Section titled 配置 TLS/SSLOpenReplay 处理敏感的用户数据,因此需要 HTTPS 才能运行。这是强制要求,否则 tracker 根本不会开始录制。仪表盘也是如此,没有 HTTPS 你将无法回放用户会话。
如果你的 Kubernetes 集群在云端(如 EKS、AKS 或 GKE),那么处理 SSL 最简单的方法就是设置一个云负载均衡器,并将你的集群运行在它后面。另一个选择是生成或使用你自己的 SSL 证书,并将你的子域名(即 openreplay.mycompany.com)指向你的集群。以下是关于这两个选项的更多内容。
设置云负载均衡器(选项 1)
Section titled 设置云负载均衡器(选项 1)在云负载均衡器后面运行 OpenReplay 的主要好处之一是由云服务提供商管理证书。以下是有关如何创建的分步指南:
- AWS - Elastic Load Balancing
- Google - Cloud Load Balancing
- Azure - Load Balancer
- Digital Ocean - 配置 TLS/SSL
然后确保你的集群预置了 LoadBalancer 服务类型,以便来自云负载均衡器的流量可以被定向到 OpenReplay 后端。现在,前往你的 DNS 服务提供商,创建一条使用集群公网 IP 指向集群的 A Record。
最后,通过取消注释 /var/lib/openreplay/vars.yaml 中 ingress-nginx 部分下方的以下行来启用 use-forwarded-headers:
ingress-nginx: &ingress-nginx
controller:
config:
use-forwarded-headers: true
现在一切就绪,OpenReplay 应该可以通过你的子域名访问。你可以访问 /signup 页面(即 openreplay.mycompany.com/signup)来创建账户。
提供/生成你的 SSL 证书(选项 2)
Section titled 提供/生成你的 SSL 证书(选项 2)作为创建负载均衡器的替代方案,你可以提供(或生成)你自己的 SSL 证书。
-
首先,前往你的 DNS 服务提供商并添加一条
A Record。使用你在安装步骤中之前提供的域名,并使用集群的公网 IP 将其指向集群。 -
如果你要提供自己的证书,请使用以下命令创建一个 SSL secret:
kubectl create secret tls openreplay-ssl -n app --key="private_key_file.pem" --cert="certificate.crt"。
注意: 如果你没有证书,请使用 Let’s Encrypt 为你的子域名(安装期间提供的那个)生成一个可自动续期的证书。只需连接到 OpenReplay 实例,运行
cd /var/lib/openreplay/openreplay/scripts/helmcharts && bash certmanager.sh并按照步骤操作即可。
- 如果你希望启用 http 到 https 的重定向(推荐),请取消注释
/var/lib/openreplay/vars.yaml中ingress-nginx部分下方的以下代码块:
ingress-nginx: &ingress-nginx
controller:
config:
ssl-redirect: true
force-ssl-redirect: true
值得一提的是,我们的 ingress-nginx 默认在端口 80|443 上运行,但如有需要,可以在 vars.yaml 中轻松更改:
ingress-nginx: &ingress-nginx
controller:
service:
ports:
http: 80
https: 443
- 最后,重新安装 OpenReplay NGINX:
openreplay -R
现在一切就绪,OpenReplay 应该可以通过你的子域名访问。你可以访问 /signup 页面(即 openreplay.mycompany.com/signup)来创建账户。
如果你在自己的平台上遇到问题,请通过 Slack 或 Github Issue 告诉我们。我们很乐意帮助你让它运行起来。