虚幻引擎
通过实践学习并在 Edgegap 上部署您的第一个专用服务器。在本指南结束时,您将能在无费用情况下使用 Edgegap 部署一个专用服务器。
使用 Docker Desktop 构建是开始的最快、最简单且最可靠的方法。
✔️ 准备
在开始之前,请确保 创建一个 Edgegap 免费帐户 (无需信用卡)。
在你的开发机器上配置一些必需项:
⚙️ 1. 配置项目
无论您使用的是 Windows、Mac 还是 Linux 机器,您都将 需要为 Linux 运行时构建您的服务器,因为如今大多数云提供商(包括 Edgegap)都运行在 Linux 上。别担心,不需要 Linux 知识。
☑️ 首先 验证您的 Unreal Engine 版本 - 已从您的项目文件中预填默认值。
☑️ 输入 GitHub 用户名和 PAT 来自 虚幻引擎,以便从 GitHub 下载依赖项。
☑️ 禁用 Unreal Engine 版本兼容性检查 用于专用服务器和 设置 IpNetDriver 作为默认驱动或回退驱动 用于复制网络:
确保 输入你的 DefaultServerTarget 在此代码片段末尾!
☑️ 重启 Unreal Engine 以重新加载最新更改。
☑️ 创建一个专用服务器目标脚本 通过复制你的 <PROJECT>Editor.Target.cs 文件到项目根文件夹并将副本重命名为 <PROJECT>Server.Target.cs.
☑️ 在你的服务器目标脚本中替换所有对 单词 Editor 使用 服务器 的引用。
☑️ 启用标准输出服务器日志 通过在你的服务器目标脚本中添加覆盖:
✅ 现在您可以继续下一步。
🔧 2. 构建游戏服务器
现在我们将构建并打包(cook)您的项目,并将其打包成一个可重用的 docker 镜像。
在一支开发团队中工作意味着共享代码。当事情出错时,你最不想听到的是“在我机器上可以运行”。游戏服务器必须能够在任何机器上可靠运行,因为成功的游戏服务器将运行在全球成千上万台服务器上。
为帮助使你的服务器可靠,我们使用 Docker——虚拟化软件,用于确保从操作系统级别到所有服务器代码依赖项在任何情况下、任何位置启动服务器时都完全一致。
☑️ 您可以配置以下选项(或保留默认):
镜像名称 是您选择的唯一标识符,用于在发送前标记您的服务器构建。
通常,这将包含游戏名称,例如 “my-game-server”。
镜像标签 是指向镜像特定版本的标识符。
术语“构建产物”有时用来指代镜像的特定版本。
时间戳是标记的好选项,例如
2024.01.30-16.23.00-UTC(默认)。
☑️ 构建项目 在您对配置满意后点击。一旦完成此步骤,将在本地 Docker 客户端中添加一个包含您的 Linux 游戏服务器可执行文件的新镜像。
✅ 您现在可以继续到下一步。
🧪 3. 在本地测试服务器
让我们尝试在本地(在你的机器上)部署并连接一个游戏客户端,以确保服务器镜像在我们上传和部署之前正常运行(上传和部署可能需要一些时间)。
☑️ 选择您希望在本地运行的镜像标签 (远程镜像将被下载)。可选地,还可以提供更多 docker run 参数 以自定义您的本地测试:
-p 7777:7777/udp- 这是您的本地容器 端口映射,-e ARBITRIUM_PORT_GAMEPORT_INTERNAL=7777是一个 环境变量 模拟真实的 Edgegap 部署,告诉您的游戏服务器用于监听玩家连接的内部端口。
☑️ 一旦您对配置满意,点击 启动本地服务器。完成此步骤将导致 在您的开发机器上启动一个新容器 。
☑️ 现在是将您的 Unreal Engine 编辑器(PIE)游戏客户端连接到本地服务器容器的时候了。使用打开控制台( ~ (波浪号))并使用以下命令连接 open <ip>:<port>:
ip=localhost或127.0.0.1(在大多数情况下等同),端口= Docker GUI 中容器的随机外部端口值。

☑️ 一旦你确认可以连接到本地服务器容器并且能够顺利游玩,你可以删除该容器 🗑️ 以释放机器上的资源供其他程序使用。
✅ 您现在可以继续到下一步。
☁️ 4. 发布到 Edgegap
现在是将你的服务器上线部署的时候了!既然你的镜像可以成功承载玩家,我们就可以将其上传到 Edgegap 并开始在全球任意地点运行。在本指南中,我们将使用 Edgegap 的容器注册表 (镜像存储)。
☑️ 选择一个应用名称 用于在 Edgegap 上标记和分组相似的镜像。
☑️ 选择您希望发布的镜像标签 和 上传镜像。完成此步骤将把您的服务器镜像上传到 Edgegap Registry,并在您的网页浏览器中创建一个新的 应用版本 。 确保在提示时创建您的 端口映射 , 使用默认值.
✅ 您现在可以继续到下一步。
🚀 5. 部署到云端
这是本指南的最后一步,完成后您将在 Edgegap 云上部署一个服务器,来自世界任何地方的玩家都可以连接到该服务器。
☑️ 选择一个应用程序和版本 从上一步部署。
☑️ 一旦准备就绪,点击 部署到云端,等待达到 部署。完成此步骤将会 新的部署正在启动 在你的 Edgegap 帐户上。
☑️ 验证控制台输出中没有新的错误。同时确保你的 部署 没有显示任何错误,并且你的 部署 未显示 100% 资源利用率(vCPU 或内存),否则新的玩家连接可能会被拒绝,或你的服务器陷入重启循环。请参阅下面的故障排除步骤以解决任何问题。
☑️ 现在我们将进行最终测试并 将您的 Unreal Engine 编辑器连接到您的云部署。获取您的 部署的主机 以替代服务器 IP,并获取部署的 外部端口,在游戏客户端中打开 Unreal 控制台(波浪号 ~)并输入 open {host}:{port} .

测试时请禁用 VPN 以获得更真实的环境并接收 低延迟部署.
☑️ 一旦您确认能够毫无问题地连接到部署并完成测试, 停止您的部署 以释放您帐户中的容量以供下次构建使用。
如果遇到问题, 检查您部署的仪表板日志.
如果您无法找出问题所在,我们会在我们的 社区 Discord 碰到困难?我们在我们的
🙌 恭喜您在 Edgegap 上完成第一次部署!如果您想了解更多,请继续阅读。
不会,我们的平台确保分配的资源不会被其他工作室或共享基础设施上的其他服务器使用。使用 Edgegap,不存在“嘈杂邻居”。
一旦你有了可运行的客户端/服务器设置,确保 保存你的项目副本 (使用像 git 这样的版本控制软件),以便在遇到问题时你始终可以追溯你的步骤。
继续阅读以了解更多与服务器生命周期和可发现性相关的主题。
👉 下一步
停止部署 了解各种方法以 停止部署 端点存储 在比赛结束且玩家离开后。连接您的
以获取您的部署日志,否则日志将被删除!
注入变量
- 由 Edgegap 自动提供, 匹配变量 - 在使用,
匹配器 时由 Edgegap 自动提供,
应用版本变量 - 由您可配置的自定义键值对。
// 服务器代码
剖析服务器 部署, 部署要在 Edgegap 上理解并优化服务器性能问题,请探索 部署 等可用
工具。
您还可以将现有的 Unreal Engine 剖析工具与 Edgegap 一起使用: 在您的 Unreal Engine 服务器中配置跟踪
(内置和自定义事件):
使用将跟踪保存到服务器磁盘,-tracefile 部署 上传到第三方存储并离线分析,
1981或使用
流式传输跟踪数据, 用于内部端口 和 通过 UDP 协议。 和 虚幻引擎.
分析
内存洞察
网络洞察 匹配系统手动启动您的部署、粘贴 URL 和端口并不能满足实时游戏的需求。
阅读有关匹配系统的更多内容
以便自动按需部署,正好在玩家上线时。
优化服务器构建 配置资源分块以将仅客户端资源与服务器资源隔离。 探索
Epic 的资源分块技术和建议
排除仅用于客户端且服务器运行不需要的资源和插件。 了解.
构建时资源和插件排除
审查您的内容烹制(cooking)策略。 考虑 即时烹制(COTF)
以延迟烹制客户端资源并加快服务器构建速度。
实现关卡流式加载以减少运行时内存负载。 如果您的设计使玩家大多聚集在相同地图区域, 关卡流式加载可能将您的服务器内存使用
减少超过 60%,并提升客户端性能!
仅包含服务器运行绝对需要的内容。 在镜像中复制未使用的文件会导致镜像膨胀、上传时间变长、缓存速度变慢以及整体服务器启动变慢。.
**/Packaged/* 考虑使用.
多阶段 Docker 构建(链接)
将大型服务器依赖项分离到单独的镜像以在多阶段构建中重用。Docker 会缓存每一层并在未明确指示上传此部分时重用先前版本并跳过上传,从而节省带宽和等待上传完成的时间。
如果您不确定为什么某个 Dockerfile 命令抛出错误,尝试在本地调试。在问题发生之前创建一个新阶段(添加第二个FROM命令),使用--target指示构建过程在有问题的阶段停止,然后docker exec -it {container} /bin/bash进入容器内的交互终端。之后,您可以在基础镜像中使用 shell 命令进一步调查(例如在 ubuntu 上使用top
)。
自定义服务器镜像
始终确保您使用的是可正常工作的服务器构建。
在假设问题与自定义 Dockerfile 有关之前,请确保您的 Unity 服务器构建可以启动,并且 Unity 中的构建过程没有抛出任何异常或错误。
在上传之前务必先进行本地测试。
在本地测试镜像可以为您节省大量等待上传完成的时间。它也完全免费 ✨ 因为不需要任何 Edgegap 资源。
在本地测试时,请确保正确设置内部端口:
确保掌握基本要点。每个 Dockerfile 都需要一些基本命令:
FROM {image}是您的基础镜像,对于 Unity 项目我们通常使用长期支持的 Linux,但任何基于 Linux 的基础镜像都可以。这些通常是存放在 dockerhub 上的公共镜像。Dockerfile 参考在此处。 Dockerfile 参考在此处.COPY {source} {destination}将您的 Linux 服务器构建从主机复制到镜像内部,以便您稍后可以启动它。 Dockerfile 参考在此处.USER {user}应当跟在 useradd(ubuntu)命令 或等效命令之后,最好不要以root身份运行所有内容,以更安全为宜。 Dockerfile 参考在此处.CMD {command}将是最后一行,很可能会调用一个StartServer.sh或某种启动脚本,以确保在所有设置完成后服务器正确初始化。 Dockerfile 参考在此处.切勿使用
VOLUME- 这样您将无法在 Edgegap 上挂载任何本地存储,请改用我们的端点存储功能并使用 S3 存储桶,参见 端点存储,EXPOSE 7777/UDP不是必需的!这实际上不会使容器外部可用内部服务器端口,它只是对开发者的提示,端口需要被在本地使用以下命令测试时发布:
docker run <image> -p 7777/udp,或在 Edgegap 端口映射.
中映射。 将参数的声明延迟到尽可能晚的时刻。由于服务器构建时间较长,可配置性优于可组合性。
将此方法应用于 Dockerfile 命令以更快地构建和上传。
场景:您需要定义诸如部署阶段、版本、游戏模式、地图、每台服务器的玩家数、备份频率或类似参数。
糟糕的解决方案:为每一种参数组合创建单独的镜像。您会把所有时间都花在重建镜像上,而这种方法带来的好处非常有限。
更好的解决方案——即时替换配置参数:
部署参数——在部署前提供——匹配选择器作为环境变量传入,或由您自定义的会话管理系统在部署时传入环境变量,
版本参数——在某个应用版本的所有部署间共享——部署阶段、制品标签、第三方密钥和端点等;然后
单一镜像——包含并在启动时加载所有配置选项。
切勿在 Edgegap 部署上运行数据库。
Edgegap 部署并不适合长期运行的进程,且可能在长时间运行后被终止而不另行通知。以这种方式运行的数据库(即使是分布式的)可能会被终止并导致不可逆的数据丢失。如果您需要数据库,请考虑第三方 DBaaS。 托管集群 考虑使用我们的
最后更新于
这有帮助吗?


