部署到 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中的以下代码块,并为 sink、storage 和 chalice 组件更新 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(例如在 AWS 的情况下使用 efs)PVC,以便容器共享数据。 如果是单节点,我们将使用 hostVolume,这是社区安装的默认设置。
然后,使用命令 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 才能运行。这是强制性的,否则追踪器根本不会开始录制。仪表板也是如此,没有 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 告知我们。我们将很乐意帮助你让它运行起来。