Files
BlueRoseNote/03-UnrealEngine/流程管理与部署/UnrealHorde/Unreal Horde 相关笔记.md

160 lines
10 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Unreal Horde
date: 2024-06-28 10:58:10
excerpt:
tags:
rating: ⭐
---
# 前言
- 官方文档UE5.5
- https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-in-unreal-engine?application_version=5.5
- Horde README.md https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Programs/Horde/README.md
- [**Deploying Horde**](https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Programs/Horde/Docs/Deployment.md)
- - 有关 Horde 的架构和组件的信息,以及部署它们的最佳实践。
**受众:** IT、系统管理员、打算修改 Horde 的程序员。
- [**Configuring and Operating Horde**](https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Programs/Horde/Docs/Config.md)
- - 描述如何设置和管理 Horde。
**受众:**构建/开发运营团队、管理员。
- [**Horde Internals**](https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Programs/Horde/Docs/Internals.md)
- - 描述如何构建和修改 Horde 及其架构。
**受众:**希望扩展 Horde 的开发人员。
- 视频
- [Horde and Unreal Build Accelerator: Operating at Epic Scale](https://youtu.be/ZUlwqNbYWBQ?si=DgFvrvepK67v-iTi)
## 下载地址
- 官方下载地址
- 服务端:https://github.com/EpicGames/UnrealEngine/releases/download/5.5.0-release/UnrealHordeServer.msi
- 也可以从Horde服务器下载地址
- http://10.219.103.35:13340/tools
# 大致步骤
1. 使用docker部署服务。
2. 服务器配置。
1. 默认端口Http 13340、Http 2 13342。
1. 默认情况下Horde配置为使用端口5000通过未加密的HTTP提供数据。在默认情况下代理通过端口5002使用未加密的HTTP/2上的gRPC与Horde服务器通信。这些设置在服务器启动时显示在控制台上。
2. [相关配置](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-orientation-for-unreal-engine?application_version=5.5)
- [服务器配置](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-settings-for-unreal-engine?application_version=5.5#%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E7%BD%AE)将配置该服务器与其他服务器的通信,定义静态参数等。它由与该服务器一同部署的 `Server.json` 文件驱动。
- [完整配置参数清单](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-settings-for-unreal-engine?application_version=5.5#%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E7%BD%AE)
- [全局配置](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-schema-for-unreal-engine?application_version=5.5#globals)在部署后控制所有面向用户的元素,该配置存于名为 `Globals.json` 的文件中。设置好部署参数后,大多数配置都在此处完成。
3. [验证相关配置](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-authentication-tutorial-for-unreal-engine?application_version=5.5)
1. [[#OIDC身份验证]]
3. 代理机配置。详见 http://10.219.103.35:13340/docs/Landing.md
1. 配置文件位置:安装目录\Agent\Defaults\agent.json
2.
# 部署笔记
## Epic Games的Horde部署
Epic Games内部部署的Horde托管在AWS上包括以下部分
- Amazon Load Balancer用于SSL的终止和路由
- 2个Linux容器服务于由Amazon ECS管理的操作面板每个配置0.25 vCPU、0.5GB RAM
- 10个Horde Server实例使用'Server' [runmode](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-settings-for-unreal-engine?application_version=5.5#runmode-enum)配置在由Amazon ECS托管的Linux容器上运行每个配备4 vCPU、16GB RAM
- 这些实例负责处理面向用户的轻量级请求。
- 2个Horde Server实例使用'Worker' [runmode](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-settings-for-unreal-engine?application_version=5.5#runmode-enum)配置在由Amazon ECS托管的Linux容器上运行每个配备4 vCPU、16GB RAM
- 这些实例负责处理更繁重的计划任务例如复制Perforce元数据、读取和更新配置状态以及启动计划作业。
- Amazon DocumentDB与MongoDB兼容
- Amazon ElastiCache与Redis兼容
- 数百个EC2实例运行包含Horde代理的AMI。
- 约100台机器本地托管用于提供对移动设备、主机以及非托管平台例如Mac设备的访问。
## 部署流程
- [Horde服务器](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-server-for-unreal-engine?application_version=5.5)
### Windows
相关服务安装都集成在安装包里。
### Docker(Linux)
要下载镜像首先从你的账号设置页面的开发者部分创建一个GitHub个人访问令牌PAT然后将其作为密码传递给
```shell
docker login ghcr.io
```
***注意这里需要用Token不然容易登录失败,Token需要开启Package Read 权限***
```c++
# Github
docker login ghcr.io -u 378100977@qq.com -p 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
```
下载镜像:
```shell
docker pull ghcr.io/epicgames/horde-server:latest
```
请注意在这种形式下外部MongoDB和Redis实例必须通过配置文件或环境变量来配置详见下文
只要每台服务器都指向同一个MongoDB和Redis实例则在负载均衡器后面运行多个Horde服务器就无需进行显式配置。
在Linux系统上使用Docker容器是[Epic的首选Horde运行方式](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-deployment-for-unreal-engine?application_version=5.5)。
### Docker ComposeLinux
[Docker Compose](https://docs.docker.com/compose/)通过提供一组预配置的Docker容器简化了基于Docker的安装设置这些容器中包含MongoDB和Redis的实例。
这种方法与MSI安装程序类似适用于测试Horde或在小规模环境中进行部署。要访问预构建镜像请参阅上文Docker小节。必要的Docker Compose配置可以在 `Engine/Source/Programs/Horde.Server/docker-compose.yml` 文件中找到。 https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Programs/Horde/HordeServer/docker-compose.yml
在同一目录下,可以使用以下命令启动容器:
```shell
docker compose up
```
如需更多指导请参阅YAML文件中的注释。
## Https配置流程
要通过HTTPS协议提供数据请在[Server.json](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-settings-for-unreal-engine?application_version=5.5#%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E7%BD%AE)中设置 `HttpsPort` 属性。
通过在同一文件中设置默认证书,为[Kestrel](https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-8.0)NET Core web服务器配置证书。
跨平台:
```json
"Kestrel": {
"Certificates": {
"Default": {
"Path": "C:\\cert\\test.pfx",
"Password": "my-password"
}
}
}
```
## 验证配置流程
如果你现在没有与OIDC兼容的身份提供商Horde将提供自有身份提供商 - 本指南将介绍该提供商。
### 先决条件
- Horde服务器安装参阅[Horde安装教程](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-installation-tutorial-for-unreal-engine?application_version=5.5))。
- 具有有效证书,并且在你的服务器上启用[HTTPS支持](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-server-for-unreal-engine?application_version=5.5#https)。
### 步骤
1. 在你的[server.json](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-orientation-for-unreal-engine?application_version=5.5)文件中将 `AuthMode` 属性设置为 `Horde` ,然后重新启动服务器。
2. 第一次启动服务器时,系统会提示你输入管理员密码。
3. 登录后, `服务器Server` 菜单中会有一个 `账户Accounts` 菜单项。从此处,你可以管理允许登录到服务器的用户,以及他们拥有的[声明](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-glossary-for-unreal-engine?application_version=5.5#%E6%8E%88%E6%9D%83)。Horde的账户系统会将 `http://epicgames.com/ue/horde/group` 声明用于用户所属组,并且操作面板将建议并自动填写在部署的配置文件中找到的组。
服务器的 `default.globals.json` 文件中定义了两个标准组,默认情况下包含于标准 `globals.json` 文件中:`查看` 和 `运行` 。
```cpp
"acl": {
"entries": [
{
"claim": {
"type": "http://epicgames.com/ue/horde/group",
"value": "View"
},
"profiles": [
"default-read"
]
},
{
"claim": {
"type": "http://epicgames.com/ue/horde/group",
"value": "Run"
},
"profiles": [
"default-run"
]
}
]
}
```
`default-read` 和 `default-run` 配置文件在代码( `AclConfig.cs` )中定义。你可以在每个[AclConfig](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-schema-for-unreal-engine?application_version=5.5#aclconfig)对象的 `profiles` 元素中定义自己的配置文件。
### OIDC身份验证
要配置外部OIDC提供程序需要在[Server.json](https://dev.epicgames.com/documentation/zh-cn/unreal-engine/horde-settings-for-unreal-engine?application_version=5.5#%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E7%BD%AE)中进行以下设置:
- `AuthMethod` :将其设置为`OpenIdConnect` 。
- `OidcAuthority` OIDC授权的URL。你可以在浏览器中访问 `{{Url}}/.well-known/openid-configuration` 检查此处指定的URL是否正确该地址应返回OIDC发现文档。
- `OidcClientId` 向OIDC提供程序标识应用程序Horde。它由OIDC提供程序生成。
- `OidcClientSecret` OIDC提供程序提供的一个机密值用于识别请求授权的应用程序。
此外,还可以指定以下设置:
- `OidcRequestedScopes` 指定向OIDC提供程序请求的权限范围。权限范围决定了Horde向OIDC提供程序请求的访问权限以及将返回的且可用于在Horde ACL中进行检查的声明。这些值的含义取决于你的OIDC 提供程序配置。
- `OidcClaimNameMapping` :指定在尝试显示用户真实姓名时按偏好顺序检查的声明的列表。
- `OidcClaimEmailMapping` :指定在尝试显示用户邮件地址时按偏好顺序检查的声明的列表。
- `OidcClaimHordePerforceUserMapping` 指定在尝试确定用户的Perforce用户名时按偏好顺序检查的声明的列表。