For the complete documentation index, see llms.txt. This page is also available as Markdown.

如何运行 Catalyst 节点

有没有好奇过 Decentraland Catalyst 节点是如何工作的?有没有想过自己运行一个节点,却不知道该从哪里开始?你是否正在为 Decentraland 制作内容,并且发现要在生产服务器上完成整个开发和测试周期很困难?

如果你有这样的经历,别担心了。本教程将帮助你规划流程,弄清楚需要做哪些决策,然后一步步指导你启动服务器。另外,万一某些步骤没有按计划进行,文末还有一个故障排查部分,列出了一些最常见的问题以及如何修复。

准备好了吗?开始动手吧。

硬件要求

Decentraland 基金会的服务器部署在 Amazon AWS 上,使用 t2.xlarge 实例。因此,虽然这些服务器是面向公众使用的,但你自己的服务器也许可以使用更小的配置,具体取决于预期用途。

一个 AWS EC2 t2.xlarge 具有以下硬件:

  • 4 个 vCPU。

  • 16 GB RAM

至于文件存储 + 数据库存储,一个容量为 2 TB 的 SSD / HDD 应该绰绰有余。撰写本文时,基金会服务器在所有存储上总共只使用了略高于 1 TB 的空间。

软件前提条件

运行 catalyst-owner 需要以下内容:

  • Linux / MacOS 操作系统

  • Docker / docker-compose

  • Git

  • LiveKit 集群

在开始之前可以考虑的一些选项

  • 你希望你的节点在互联网上公开暴露吗?如果是,你将需要一个可从互联网访问的实例,以及一个用于连接它的公网 URL。

  • 该节点是否将用于场景、可穿戴物品等内容的开发?在这种情况下,硬件规格可以小得多,因为访问它的可能只有一两个人,而不是成百上千的用户。

  • 你想同步所有实体类型吗?如果你是用它来开发场景,那么你可能不需要同步所有内容类型,因为 profile 会占用大量时间、带宽,最重要的是磁盘空间,而且对你的目标也没有帮助。

LiveKit

Catalyst 的 Comms 服务需要一个外部 LiveKit 集群来协调玩家之间的通信。为此,有两个选择:使用 LiveKit Cloud 账户,或者运行你自己的 LiveKit 集群。

建议配置 LiveKit Cloud 账户 它提供一个免费套餐,可管理 100 个用户,或者根据流量付费使用该服务。这个方案更简单,因为它不需要额外预置基础设施,而且服务本身可以管理扩缩容。否则就需要预置一个 LiveKit 集群。LiveKit 的文档写得非常好:

如果你想深入了解支持基于 LiveKit 传输的通信所需的技术细节,请查看 ADR-70 新通信架构.

分步指南

首先要做的是克隆 catalyst-owner GitHub 仓库

完成后,就该为节点配置环境变量,并按需要进行修改了。

现在请使用你喜欢的文本编辑器,对这些文件进行必要的修改。例如,设置 EMAIL 环境变量并填写有效邮箱是必需的,这样你才能收到关于 Certbot 证书过期的更新通知。

还可能需要为 CATALYST_URL 设置你自己的值,尤其是当你的服务器将公开暴露在互联网上时。若在本地机器上使用,默认的 http://localhost 就可以。

Comms 服务

一旦 LiveKit 集群可用,你就需要为 Comms 服务设置特定的 LiveKit 变量,例如:

该 ROOM_PREFIX 变量是可选的,可以配置为标识 Catalyst 创建的 LiveKit 房间。如果有多个 Catalyst 使用同一个 LiveKit 集群,这会很有用。

内容服务器

有一个名为 CONTENT_SERVER_STORAGE 的变量,用于定义内容服务器将使用的本地文件夹来存储数据。其默认值为 CONTENT_SERVER_STORAGE=./storage。你可以更改这个值,将文件存到别处,或者至少确保引用的文件夹存在。你可能需要像这样创建它:

还有另一个有趣的变量 SYNC_IGNORED_ENTITY_TYPES 它允许在同步过程中忽略某些实体类型。如果你要把 Catalyst 服务器用于开发,也许不需要同步所有内容类型。你可以设置环境变量 SYNC_IGNORED_ENTITY_TYPES="profile,store" 这样就只会从 DAO 服务器拉取场景和可穿戴物品。这将节省服务器大量时间、带宽和磁盘存储。

💡 如需更完整的支持环境变量列表,请查看下面的 环境变量 部分。

启动 Catalyst 节点

设置好所有环境变量后,就可以启动节点了。这应该很简单,只需在根目录运行 init.sh 脚本即可。

如果一切顺利,我们现在已经有一个完整运行的 Decentraland 节点。你现在可以打开浏览器并输入该 URL。如果使用默认值,它应该是 http://localhost.

我们可以使用这个 docker 命令查看内容服务器日志:

尽管服务器现在已经运行,但它还没有 100% 准备好投入使用。它需要从其他 DAO 服务器 同步内容,这样它才能为连接到它的用户提供相同的体验。同步可能需要很长时间。在良好的网络连接下,6 小时应该相当常见。所以……是时候喝杯咖啡、打个盹、好好睡一觉,明天再回来看看了。

判断同步是否完成的一种方法,是检查内容状态端点的结果: http://localhost/content/status (请在这里使用你的 URL)。

当 synchronizationState 为 Bootstrapping时,节点将暂时停止接受新的部署。这样可以确保在节点尚未在 DAO 网络中更新到最新状态之前,不会部署任何新实体。一旦状态变为 Syncing,这表示节点已成功追上,并且现在正在持续接收最新更新。这是节点完全正常工作并接受新部署的健康状态。

如果你更偏向使用命令行,你可以在内容服务器 docker 镜像日志中 grep 这个消息: 开始从服务器指针变更同步实体。一旦你看到这段文字,就说明内容服务器已经完全同步并可全面使用。

环境变量

以下是内容服务器所有环境变量及其默认值的完整列表,这些默认值在启动期间会记录到内容服务器日志中:

将你的节点用于生产环境

如果你想运行自己的服务器并帮助扩展网络,首先这非常棒,社区和基金会都非常感谢你这样做。

在这种情况下,你需要通过访问 此链接向 DAO 申请批准以加入网络。你也可以申请 MANA 资助,以覆盖基础设施和管理费用。

重要的是,你的硬件规格应更接近上文“硬件要求”中建议的配置,因为该服务器将被任何进入 Decentraland 的社区成员使用。

API 规格

有关内容、lambdas 和 comms 服务器 API 的更多细节,你可以查看 API 规格.

故障排查/常见问题

在启动服务器时可能会出一些问题。以下列出了一些最常见的问题以及修复方法。

本地 postgres 占用了 5432 端口

如果你在一台用于开发的机器上运行该节点,或者该机器已经在托管其他服务,那么很可能那台机器上已经有一个 postgres 数据库服务器在运行。因此 5432 端口已经被占用了。

最简单的解决方法是停止本地已经运行的 postgres,然后使用以下命令重启 postgres docker 容器: docker start postgres.

如果你了解 docker compose,可以尝试调整 docker-compose.yml 和环境变量,看看是否能让它在其他端口上运行。为了保持这里的内容简单,我们在本教程中不会走这条路。

本地 nginx 占用了 80 端口

80 端口(甚至 443 端口)也可能发生同样的情况。如果你在本地机器上运行 nginx,那么 80/443 端口很可能已经被该服务占用,因此 Catalyst Docker 容器将无法使用它们。

同样,最简单的方法是停止本地 nginx 服务,然后使用以下命令重启 docker 容器: docker start nginx。或者,你需要借助 docker-compose.yml 和 .env 让它在其他端口上运行。

更多参考文档

如果你想更好地了解 Catalyst 服务器做什么、包含哪些服务等,可以查看架构仓库 https://github.com/decentraland/architecture,其中对各部分有详细说明。

如果你想为 Catalyst 服务器代码做贡献,请务必查看 贡献指南 以了解我们的开发流程、如何提出错误修复和改进建议,以及如何构建和测试你的更改。

最后,如果你需要联系团队,可以通过 Discord 或提交 GitHub 问题.

最后更新于