在线设置

Evennia 的开发可以在没有互联网连接的情况下进行,除了获取更新。不过,在某个时候,你可能希望让你的游戏在线可见,无论是为了向公众开放,还是为了让其他开发者或测试者访问。

通过互联网连接到 Evennia

从外部访问你的 Evennia 服务器本身并不难。任何问题通常是由于计算机、网络或托管服务的各种安全措施造成的。这些措施通常(并且正确地)会阻止外部访问你计算机上的服务器,除非你另行通知。

我们将从展示如何在本地计算机上托管你的服务器开始。即使你计划稍后在远程主机上托管“真实”游戏,本地设置也是有用的练习。我们将在本文档后面介绍远程托管。

开箱即用,Evennia 使用三个端口进行外部通信。如果你的计算机有防火墙,这些端口应该对进出通信开放(只有这些,Evennia 使用的其他端口仅限于计算机内部使用)。

  • 4000,telnet,用于传统的 MUD 客户端

  • 4001,HTTP,用于网站

  • 4002,websocket,用于 web 客户端

Evennia 默认会接受所有接口(0.0.0.0)的传入连接,因此原则上,任何知道使用哪个端口并拥有你计算机 IP 地址的人都应该能够连接到你的游戏。

  • 确保 Evennia 已安装,并且你已激活 virtualenv。使用 evennia start --log 启动服务器。--log(或 -l)将确保日志回显到终端。

  • 确保你可以通过浏览器连接到 http://localhost:4001,或者,http://127.0.0.1:4001,这两者是相同的。你应该能够访问 Evennia 网站并在 web 客户端中玩游戏。还要检查你是否可以通过 MUD 客户端连接到主机 localhost,端口 4000 或主机 127.0.0.1,端口 4000

  • Google 搜索“我的 IP” 或使用任何在线服务来找出你的“外向 IP”地址。对于我们的目的,假设你的外向 IP 是 203.0.113.0

  • 接下来,通过在浏览器中打开 http://203.0.113.0:4001 来尝试你的外向 IP。如果这有效,那就没问题了!还可以尝试 telnet,服务器设置为 203.0.113.0 和端口 4000。然而,很可能它不会工作。如果是这样,请继续阅读。

  • 如果你的计算机有防火墙,它可能会阻止我们需要的端口(它也可能会完全阻止 telnet)。如果是这样,你需要打开外向端口以进行进出通信。请参阅防火墙软件的手册/说明以了解如何执行此操作。为了测试,你也可以暂时完全关闭防火墙,以查看这是否确实是问题所在。

  • 另一个无法连接的常见问题是你使用的是硬件路由器(如 WiFi 路由器)。路由器位于你的计算机和互联网之间。因此,你通过 Google 找到的 IP 是路由器的 IP,而不是你计算机的 IP。要解决此问题,你需要配置路由器以转发它在端口上接收到的数据到位于你的私有网络中的计算机的 IP 和端口。如何执行此操作取决于路由器的型号;你通常可以使用普通的网页浏览器进行配置。在路由器界面中,查找“端口转发”或“虚拟服务器”。如果这不起作用,请尝试暂时将计算机直接连接到互联网出口(假设你的计算机有相应的端口)。你需要再次检查你的 IP。如果这有效,你就知道问题出在路由器上。

注解

如果你需要重新配置路由器,路由器的互联网端口不必与计算机(和 Evennia)的端口具有相同的编号!例如,你可能希望将 Evennia 的外发端口 4001 连接到外发路由器端口 80——这是 HTTP 请求使用的端口,Web 浏览器会自动查找——如果你这样做,你可以访问 http://203.0.113.0 而无需在末尾添加端口。不过,这会与通过此路由器运行的任何其他 Web 服务冲突。

设置示例

你可以在不更改设置的情况下将 Evennia 连接到互联网。默认设置易于使用,但不一定是最安全的。你可以在你的设置文件中自定义在线状态。要让 Evennia 识别更改的端口设置,你必须进行完整的 evennia reboot,以便同时重启 Portal 而不仅仅是服务器组件。

下面是一个简单的设置示例,主要使用默认值。Evennia 将需要访问五个计算机端口,其中三个(仅)应对外开放。下面我们继续假设我们的服务器地址是 203.0.113.0

# 在 mygame/server/conf/settings.py 中

SERVERNAME = "MyGame"

# 对互联网开放:4000, 4001, 4002
# 对互联网关闭(内部使用):4005, 4006
TELNET_PORTS = [4000]
WEBSOCKET_CLIENT_PORT = 4002
WEBSERVER_PORTS = [(4001, 4005)]
AMP_PORT = 4006

# 这需要设置为你的网站地址,以便 django 不会在尝试登录到 Web 门户时收到 CSRF 错误
CSRF_TRUSTED_ORIGINS = ['https://mymudgame.com']

# 可选 - 限制接口访问的安全措施
# (在你知道没有它们也能正常工作之前,不要设置这些)
TELNET_INTERFACES = ['203.0.113.0']
WEBSOCKET_CLIENT_INTERFACE = '203.0.113.0'
ALLOWED_HOSTS = [".mymudgame.com"]

# 如果你想在维护期间锁定服务器,请取消注释。
# LOCKDOWN_MODE = True

继续阅读以了解各个设置的说明。

Telnet

# 必需的。更改为你在主机上允许使用的任何外发 Telnet 端口。
TELNET_PORTS = [4000]
# 可选的安全措施。限制我们应该接受的 Telnet 接口。应设置为你的外向 IP 地址。默认是 `0.0.0.0`,接受所有接口。
TELNET_INTERFACES = ['0.0.0.0']

TELNET_* 设置是启动传统基础游戏的最重要设置。你可以使用的 IP 地址取决于你的服务器托管解决方案(请参阅下一节)。某些主机将限制你可以使用的端口,因此请确保检查。

Web 服务器

# 必需的。这是一个元组列表(外发端口,内部端口)。只有外发端口应该对世界开放!
# 如果你想在计算机上运行 Evennia 作为唯一的 Web 服务器(如果可用),请将外发端口设置为 80。
WEBSERVER_PORTS = [(4001, 4005)]
# 可选的安全措施。将其更改为你的服务器可以访问的 IP(通常与 TELNET_INTERFACES 相同)
WEBSERVER_INTERFACES = ['0.0.0.0']
# 可选的安全措施。防止中间人攻击。当你运行生产服务器时,将其更改为服务器的 IP 地址或 URL。
ALLOWED_HOSTS = ['*']

Web 服务器始终以两个端口同时配置。外发端口(默认情况下为 4001)是外部连接可以使用的端口。如果你不希望用户在连接时指定端口,则应将其设置为 80——但这仅在你没有在计算机上运行任何其他 Web 服务器时有效。

内部端口(默认情况下为 4005)由 Evennia 内部用于在服务器和 Portal 之间进行通信。它不应对外部世界开放。除非默认内部端口与其他程序冲突,否则通常只需更改外发端口。

Web 客户端

# 必需的。将其更改为服务器的主要 IP 地址。
WEBSOCKET_CLIENT_INTERFACE = '0.0.0.0'
# 可选,仅在使用代理或类似工具时需要。更改为客户端可以访问服务器的 IP 或地址。然后需要 ws:// 部分。如果没有给出,客户端将使用其主机位置。
WEBSOCKET_CLIENT_URL = ""
# 必需的。更改为 Websocket 客户端可以用来访问服务器的空闲端口。这将由 Web 客户端自动附加到 WEBSOCKET_CLIENT_URL。
WEBSOCKET_CLIENT_PORT = 4002

基于 Websocket 的 Web 客户端需要能够回调到服务器,这些设置必须更改以便找到要查找的位置。如果找不到服务器,你将在浏览器的控制台(浏览器的开发工具中)收到警告,并且客户端将改为使用基于 AJAX 的客户端,这往往较慢。

其他端口

# 可选的公共接口。仅允许 SSL 连接(默认关闭)。
SSL_PORTS = [4003]
SSL_INTERFACES = ['0.0.0.0']
# 可选的公共接口。仅在允许 SSH 连接时(默认关闭)。
SSH_PORTS = [4004]
SSH_INTERFACES = ['0.0.0.0']
# 必需的私有接口。只有在与主机上的其他服务发生冲突时才应更改此设置。不应对外部世界开放。
AMP_PORT = 4006

AMP_PORT 是必需的,因为这是链接 Evennia 的服务器和 Portal组件的内部端口。其他端口是加密端口,可能对自定义协议有用,但否则不使用。

锁定模式

当你测试并检查配置时,你可能不希望玩家进入。同样,如果你正在对在线游戏进行维护,你可能希望将其下线一段时间,以便在不冒险让人们连接的情况下解决最终问题。为此,请使用 evennia stop 停止服务器,并将 LOCKDOWN_MODE = True 添加到你的设置文件中。当你再次启动服务器时,你的游戏将只能从 localhost 访问。

在 Evennia 游戏目录中注册

一旦你的游戏上线,你应该确保在 Evennia 游戏索引中注册它。注册索引将帮助人们找到你的服务器,为你的游戏引起兴趣,并且还显示 Evennia 正在被使用。即使你刚刚开始开发,也可以这样做——如果你没有提供任何 telnet/web 地址,它将显示为_尚未公开_,只是一个预告。如果是这样,请选择_预 alpha_作为开发状态。

要注册,请进入你的游戏目录,运行

evennia connections

并按照说明进行操作。有关更多详细信息,请参阅游戏索引页面

SSL 和 HTTPS

SSL 对于 Web 客户端非常有用。如果用户在公共场所,SSL 将保护他们在 Web 客户端上的凭据和游戏过程,并且你的 Websocket 也可以切换为 WSS 以获得相同的好处。SSL 证书过去每年需要花费金钱,但现在有一个项目可以免费颁发证书,并提供辅助设置以使整个过程更轻松。

可能与 SSL 代理结合使用的选项:

# 请参阅上面的锁定模式部分。
# 对于在公共接口上连接到 localhost 上的 Evennia 的代理很有用。
LOCKDOWN_MODE = True

# 让客户端在通过 https 连接到端口 4001 后通过 wss 进行通信。
# 否则,当浏览器尝试从安全网页创建不安全的 Websocket 时,你可能会收到 DOMException 错误。
WEBSOCKET_CLIENT_URL = "wss://fqdn:4002"

Let’s Encrypt

Let’s Encrypt 是一个证书颁发机构,提供免费的证书来使用 HTTPS 保护网站。要开始使用 Let’s Encrypt 为你的 Web 服务器颁发证书,请参阅以下链接:

此外,在 Freenode 上访问 #letsencrypt 频道以获得社区的帮助。作为额外的资源,Let’s Encrypt 拥有一个非常活跃的社区论坛

一个关于如何设置 Let’s Encrypt 的博客

上述所有文档中唯一缺少的过程是如何通过验证。这是 Let’s Encrypt 验证你是否控制域名(不一定是所有权,这是域名验证 (DV))的方式。这可以通过在 Web 服务器上配置某个路径或通过 DNS 中的 TXT 记录来完成。你想要做的是个人偏好,但也可以基于你的托管选择。在受控/cPanel 环境中,你很可能需要使用 DNS 验证。

相关的 SSL 代理设置信息

从你自己的计算机托管 Evennia

我们上面展示的是迄今为止最简单且可能最便宜的选项:在你自己的家用计算机上运行 Evennia。此外,由于 Evennia 是其自己的 Web 服务器,你无需安装任何额外的东西即可拥有一个网站。

优点

  • 免费(除了互联网费用和电费)。

  • 完全控制服务器和硬件(它就在那儿!)。

  • 易于设置。

  • 适合快速设置——例如,短暂地向合作者展示结果。

缺点

  • 你需要一个良好的互联网连接,最好没有任何上传/下载限制/费用。

  • 如果你想以这种方式运行完整的游戏,你的计算机需要始终保持开机状态。可能会有噪音,并且如前所述,电费必须考虑在内。

  • 没有支持或安全性——如果你的房子着火了,你的游戏也会被烧毁。此外,你自己负责定期备份。

  • 如果你不知道如何打开防火墙或路由器中的端口,可能不那么容易。

  • 家用 IP 通常是动态分配的,因此为了永久在线,你需要设置 DNS 以始终重新指向正确的位置(见下文)。- 你个人负责你的互联网连接的任何使用/滥用——虽然不太可能(但不是不可能),如果运行服务器以某种方式导致网络上的其他客户出现问题,违反了 ISP 的服务条款(许多 ISP 坚持让你升级到商业级连接)或你成为版权所有者采取法律行动的对象,你可能会发现你的主要互联网连接因此而被终止。

将你自己的机器设置为服务器

本页的第一部分描述了如何执行此操作并允许用户连接到你的计算机/路由器的 IP 地址。

使用这样的特定 IP 地址的一个复杂之处在于你的家庭 IP 可能不会保持不变。许多 ISP(互联网服务提供商)为你分配了一个动态 IP,可能随时更改。当这种情况发生时,你告诉人们访问的 IP 将毫无价值。此外,那长长的一串数字不太好看,对吧?很难记住,不容易用于营销你的游戏。你需要的是将其别名为更合理的域名——一个别名,即使在 IP 更改时也会跟随你。

  1. 要设置域名别名,我们建议从 FreeDNS 开始获取一个免费域名。一旦你在那里注册(免费),你就可以访问成千上万的域名,这些域名是人们“捐赠”给你的,以便你可以为自己的子域使用。例如,strangled.net 是可用域之一。因此,将我们的 IP 地址绑定到 strangled.net,使用子域 evennia,这意味着可以从此将人们引导到 http://evennia.strangled.net:4001 满足他们的游戏需求——更容易记住!

  2. 那么,如何让这个新的、漂亮的域名在我们的 IP 更改时也跟随我们呢?为此,我们需要在计算机上设置一个小程序。它会在我们的 ISP 决定更改我们的 IP 时检查并告诉 FreeDNS。有许多替代方案可以从 FreeDNS 的主页找到,其中一个适用于多个平台的是 inadyn。从他们的页面获取它,或者在 Linux 中通过类似 apt-get install inadyn 的方式获取。

  3. 接下来,你登录到 FreeDNS 的帐户并转到 Dynamic 页面。你应该有一个子域列表。点击 Direct URL 链接,你会看到一个文本消息页面。忽略它,查看页面的 URL。它应该以许多随机字母结尾。问号后的所有内容都是你唯一的“哈希”。复制此字符串。

  4. 现在,你可以使用以下命令启动 inadyn(Linux):

    inadyn --dyndns_system default@freedns.afraid.org -a <my.domain>,<hash> &

其中 <my.domain> 将是 evennia.strangled.net<hash> 是我们从 FreeDNS 复制的数字字符串。& 表示我们在后台运行(可能在其他操作系统中无效)。inadyn 将从此以后每 60 秒检查一次更改。你应该将 inadyn 命令字符串放在启动脚本中,以便在计算机启动时启动。

在远程服务器上托管 Evennia

你通常的“网络酒店”可能不足以运行 Evennia。网络酒店通常针对非常特定的用途——提供网页,最多带有一些动态内容。他们在主页上提到的“Python 脚本”通常仅用于由他们的 Web 服务器启动的 CGI 类脚本。即使他们允许你访问 shell(以便你可以安装 Evennia 的依赖项),资源使用可能会受到严格限制。运行像 Evennia 这样的完整游戏服务器可能会被拒绝或完全不可能。如果你不确定,请联系你的网络酒店,询问他们关于你运行第三方服务器的政策,这些服务器将希望打开自定义端口。

你可能需要寻找的选项是shell 帐户服务VPS云服务。“Shell 帐户”服务意味着你可以在服务器上获得一个 shell 帐户,并且可以像普通用户一样登录。相比之下,VPS(虚拟专用服务器)服务通常意味着你可以获得 root 访问权限,但在虚拟机中。还有类型的服务,允许启动多个虚拟机并为你使用的资源付费。

优点

  • Shell 帐户/VPS/云提供比普通网络酒店更多的灵活性——这是从家中远程登录共享计算机的能力。

  • 通常运行 Linux 版本,易于安装 Evennia。

  • 支持。你不需要维护服务器硬件。如果你的房子着火了,至少你的游戏仍然在线。许多服务保证一定的正常运行时间,并定期为你进行备份。请确保检查,有些提供较低的价格以换取你自己对数据/备份负全责。

  • 通常提供固定的域名,因此无需处理 IP 地址。

  • 可能具有轻松部署 docker 版本的 Evennia 和/或你的游戏的能力。

缺点

  • 可能相当昂贵(比网络酒店更贵)。请注意,Evennia 通常至少需要 100MB RAM,对于大型生产游戏可能需要更多。

  • Linux 版本可能对不习惯 ssh/PuTTy 和 Linux 命令行的用户感到陌生。

  • 你可能与许多人共享服务器,因此你并不完全负责。如果服务器人员决定关闭服务器进行维护,你别无选择,只能坐等(但希望会提前通知你)。

在远程服务器上安装 Evennia

首先,如果你熟悉服务器基础设施,请考虑使用 Docker 将你的游戏部署到远程服务器;这可能会简化安装和部署。不过,如果你对 Docker 镜像完全陌生,可能会有点困惑。

如果不使用 Docker,并假设你知道如何通过 ssh/PuTTy 连接到你的帐户,你应该能够按照快速启动指南中的说明进行操作。你只需要预先安装 Python 和 GIT;这些应该在任何服务器上都可用(如果没有,你应该可以轻松要求安装)。在 VPS 或云服务上,你可以根据需要自行安装它们。

如果 virtualenv 不可用且无法获取,你可以从 virtualenv pypi 下载它(它只是一个单一文件)。使用 virtualenv,你可以在不需要进一步 root 访问的情况下安装所有内容。端口可能是一个问题,因此请确保知道哪些端口可供使用,并相应地重新配置 Evennia。

托管选项和建议

要找到商业解决方案,请在网络上搜索你所在地区的“shell 访问”、“VPS”或“云服务”。你可能会在 Low End Box 上找到“低成本” VPS 托管的有用优惠。相关的 Low End Talk 论坛可以用于健康检查提供“价值”托管的许多小型企业,并偶尔提供技术建议。

有各种各样的服务可用。以下是一些由 Evennia 用户提供的国际建议:

托管名称

类型

最低价格

评论

silvren.com

Shell 帐户

免费(用于 MU*)

私人爱好提供者,因此不要假设有备份或期望立即支持。要申请帐户,请使用 MUD 客户端连接到 rostdev.mushpark.com,端口 4201,并询问“Jarin”。

Digital Ocean

VPS

$4/月

如果你使用推荐链接 https://m.do.co/c/8f64fec2670c,可以获得 $50 的信用额度 - 如果你这样做,一旦你使用足够长的时间支付了 $25,我们将获得推荐奖金以帮助 Evennia 开发。

Amazon Web services

~$5/月 / 按需

前 12 个月免费层。全球范围内可用的区域。

Amazon Lightsail

$5/月

第一个月免费。AWS 的“固定成本”产品。

Azure App Services

免费

为爱好者提供有限区域的免费层。

Huawei Cloud

按需

类似于亚马逊。12 个月免费层,区域有限。

Heficed

VPS & 云

$5/月

多个区域。1GB 内存服务器的最低价格为 $5/月。

Scaleway

€3/月 / 按需

基于欧盟(巴黎,阿姆斯特丹)。最小选项提供 2GB RAM。

Prgmr

VPS

$5/月

预付一年可免费使用 1 个月。你可能希望对此选项有一些服务器经验,因为他们没有很多支持。

Akami (formerly Linode)

VPS

$5/月 / 按需

多个区域。最小选项($5/月)提供 1GB RAM。还提供云服务。

Genesis MUD hosting

Shell 帐户

$8/月

专用 MUD 主机,内存提供非常有限。可能运行非常旧的 Python 版本。Evennia 至少需要“豪华”套餐(50MB RAM),对于生产游戏可能需要更高。虽然有时在 MUD 上下文中提到此主机,但不推荐用于 Evennia。

请帮助我们扩展此列表。

Cloud9

如果你有兴趣在在线开发环境 Cloud9 中运行 Evennia,你可以通过他们的正常在线设置使用 Evennia Linux 安装说明启动它。你唯一需要做的额外事情是更新 mygame/server/conf/settings.py 并添加 WEBSERVER_PORTS = [(8080, 4001)]。这将允许你访问 Web 服务器并像往常一样进行其他操作。

请注意,截至 2017 年 12 月,Cloud9 已由亚马逊重新发布为其 AWS 云服务产品中的一项服务。新客户有资格获得 1 年的 AWS“免费层”,可能提供足够的资源来免费运行 Cloud9 开发环境。https://aws.amazon.com/cloud9/