如何在Linux上搭建Terraria 游戏服务器?

Terraria是一款二维沙盒游戏,类似于Minecraft(我的世界),允许玩家在开放的世界中探索,构建和战斗。2015年,Terraria开发者宣布支持Linux,这意味着玩家可以托管他们自己独立的Terraria服务器。

本文概述了为自己和其他人运行Terraria服务器所需的步骤。这些步骤与使用systemd的任何Linux发行版兼容。这包括最新版本的CentOS/redhat,Debian和Ubuntu,Arch Linux和Fedora。

由于Terraria的系统要求,需要具有至少两个CPU内核和足够的内存的Linode。因此,我们建议您在遵循本指南时使用我们的4GB或更高计划。如果您的Linode不符合Terraria的最低要求,则该过程将间歇性地崩溃。

准备工作

  1. 熟悉我们的入门指南并完成设置Linode主机名和时区的步骤。
  2. 本指南将sudo尽可能使用。完成“ 确保服务器安全”指南的各个部分,以创建标准用户帐户,加强SSH访问并删除不必要的网络服务。请勿按照“ 保护你的服务器指南”中的“ 配置防火墙”部分进行操作 - 我们将在下一节中为Terraria服务器配置防火墙。
  3. 更新操作系统的软件包。

为Terraria 配置防火墙

注意Terraria仅支持IPv4,不支持IPv6。

Firewalld

Firewalld是CentOS 7+和Fedora中的默认iptables控制器。有关更多信息,请参阅我们的使用firewalld指南

  1. 设置firewalld开机自启,并启动它: sudo systemctl enable firewalld && sudo systemctl start firewalld 你应该使用默认公共区域。如下: sudo firewall-cmd --get-active-zones
  2. 为Terraria创建一个firewalld服务配置文件: 编辑文件:/etc/firewalld/services/terraria.xml,内容如下: <?xml version="1.0" encoding="utf-8"?> <service> <short>Terraria</short> <description>Open TCP port 7777 for incoming Terraria client connections.</description> <port protocol="tcp" port="7777"/> </service> 启用firewalld服务,重新加载firewalld并验证是否正在使用Terraria服务: sudo firewall-cmd --zone=public --permanent --add-service=terraria sudo firewall-cmd --reload sudo firewall-cmd --zone=public --permanent --list-services 最后一个命令的输出应类似于如下: dhcpv6-client ssh terraria

UFW

UFW(Uncomplicated Firewall)是一个与Ubuntu打包在一起的iptables控制器,但默认情况下它并没有安装在Debian中。

  1. 如果需要安装UFW: sudo apt install ufw #centos可以用 sudo yum install ufw
  2. 为Terraria添加SSH和规则。在启用UFW之前添加规则非常重要。如果不这样做,您将终止SSH会话,并需要使用Lish访问您的Linode : sudo ufw allow ssh sudo ufw allow 7777/tcp
  3. 添加规则后,启用UFW。接下来,删除IPv6的Terraria规则,因为它不需要: sudo ufw enable sudo ufw delete 4 注意: 此步骤中的第二个命令sudo ufw delete 4引用UFW规则集中的第四个规则。如果需要为不同的服务配置其他规则,请根据需要进行调整。以防万一,你可以用 sudo ufw status看你的UFW规则集。

iptables

要在不使用控制器的情况下手动配置iptables,请参阅我们的iptables指南以获取常规规则集。

  1. 您还需要为Terraria添加以下规则: sudo iptables -A INPUT -p tcp --dport 7777 -j ACCEPT
  2. 验证: sudo iptables -vL

安装和配置Terraria

  1. 切换到目录/opt下,并下载Terraria tarball。你可以查看Terraria的网站以获取当前版本。右键单击并复制要使用的链接,用curlwget下载即可。我们将在本文中以版本1.3.4.4为例: cd /opt && sudo curl -O http://terraria.org/server/terraria-server-1344.zip 注意: 在安装Terraria之前,请确保你下载的版本与将要连接的版本相同。
  2. 你可以用unzip来解压缩.zip文件。如果你安装了unzip,本步骤请跳过 Debian / Ubuntu下安装unzip: sudo apt install unzip CentOS下安装unzip: sudo yum install unzip
  3. 提取存档并设置必要的权限: sudo unzip terraria-server-1344.zip #解压 sudo mv /opt/Dedicated\ Server/Linux /opt/terraria #移动到/opt/terraria目录 sudo rm -rf Dedicated\ Server/ sudo chown -R root:root /opt/terraria #递归设置目录所有者和所属组 sudo chmod +x /opt/terraria/TerrariaServer.bin.x86_64 #增加执行权限权限
  4. 在离散用户下运行守护进程是一种很好的做法。创建一个terraria运行游戏服务器的用户: sudo useradd -r -m -d /srv/terraria terraria #创建一个用户并指定其家目录
  5. Terraria有一个服务器配置文件,你可以使用:自动创建世界服务器密码难度和其他选项等选项进行编辑。创建默认文件的副本(重点:这是个非常好的习惯),以便在遇到问题时还原到某些内容: sudo mv /opt/terraria/serverconfig.txt /opt/terraria/serverconfig.txt.bak 为自己创建一个新的服务器配置文件。下面的选项将MyWorld在游戏服务器启动时自动创建和提供。请注意,你需要更改MyWorld为你选择的世界名称。 修改文件:/opt/terraria/serverconfig.txt world=/srv/terraria/Worlds/MyWorld.wld #指定.wld目录 autocreate=1 #设置为自动创建 worldname=MyWorld #设置worldname的名字 worldpath=/srv/terraria/Worlds #指定路径

管理Terraria服务

屏幕

Terraria运行交互式控制台作为其服务器进程的一部分。尽管有用,但在服务管理器下运行游戏服务器时,访问此控制台可能具有挑 可以通过在屏幕会话中运行Terraria来解决此问题,该会话将使您能够在屏幕内向侦听管理控制台发送任意命令。

使用系统的包管理器安装屏幕:

CentOS的:

sudo yum install screen

于Debian / Ubuntu:

sudo apt install screen

systemd

有一个自动启动,停止和启动Terraria的方法很有用。如果系统意外重启,这一点很重要。

创建以下文件以定义terrariasystemd服务:

编辑文件:/etc/systemd/system/terraria.service

1 2 3 4 5 6 7 8 9 10 11 12

[Unit] Description=server daemon for terraria [Service] Type=forking User=terraria KillMode=none ExecStart=/usr/bin/screen -dmS terraria /bin/bash -c "/opt/terraria/TerrariaServer.bin.x86_64 -config /opt/terraria/serverconfig.txt" ExecStop=/usr/local/bin/terrariad exit [Install] WantedBy=multi-user.target

  • ExecStart指示systemd生成一个包含64位TerrariaServer二进制文件的屏幕会话,该会话启动守护程序。KillMode=none用于确保systemd在有机会正常保存和关闭之前不会过早地终止服务器。
  • ExecStop调用脚本将exit命令发送给Terraria,Terraria告诉服务器确保在关闭之前保存世界。在下一节中,我们将创建一个脚本,该脚本将向运行的Terraria服务器发送必要的命令。

警告此脚本旨在在您重新启动Linode中的操作系统时保存您的世界。它打算保存进度,如果你从Linode管理重新启动你的Linode。如果必须重新启动Linode,请先使用Terraria服务停止sudo systemctl stop terraria。这将保存您的世界,然后您可以从Linode管理器重新启动。

为基本Terraria管理 创建脚本

Terraria管理脚本需要两个主要功能:

  • 附加到正在运行的屏幕会话,它提供了一个有用的管理控制台。
  • 能够将输入广播到屏幕会话中,以便可以运行脚本来保存世界,退出服务器等。
  1. 创建一个terrariad文件,输入以下脚本,然后保存并关闭: 编辑/usr/local/bin/terrariad ,内容如下: #!/usr/bin/env bash send="`printf \"$*\r\"`" attach='script /dev/null -qc "screen -r terraria"' inject="screen -S terraria -X stuff $send" if [ "$1" = "attach" ] ; then cmd="$attach" ; else cmd="$inject" ; fi if [ "`stat -c '%u' /var/run/screen/S-terraria/`" = "$UID" ] then $cmd else su - terraria -c "$cmd" fi
  2. 给脚本加执行权限: sudo chmod +x /usr/local/bin/terrariad

此脚本允许你可以同时:

  • 连接到控制台以进行直接管理,以及
  • 发送控制台命令,如运行saveexit运行时,无需连接(当systemd等服务需要发送服务器命令时很有用)。

注意:在本文的其余部分中,您可能会在运行terrariad命令时遇到“command not found”错误。这可能是由于在运行sudo命令时/usr/local/bin/不在$PATH里,这可能发生在某些Linux发行版中。您可以通过使用完整路径调用脚本来解决此问题。例如,使用sudo /usr/local/bin/terrariad attach,而不是运行sudo terrariad attach。

运行Terraria

设置Terraria Server开机自启

启动terraria服务:

现在已经安装了游戏服务器,编写了脚本,并且服务准备就绪,可以使用单个命令启动服务器:

sudo systemctl start terraria

第一次运行服务器时,它将生成之前定义的世界。这需要一段时间,所以在尝试连接之前先给它时间。要观察世界一代的进步,请使用:

sudo terrariad attach

除了启动和停止terraria服务之外,systemd还可以使用之前创建的服务文件在启动时自动启动Terraria。

要在启动时启用该服务:

sudo systemctl enable terraria

如果操作系统因任何原因重新启动,Terraria将在重启时启动。

服务器状态

要检查服务器是否正在运行,请使用以下命令:

sudo systemctl status terraria

输出应类似于:

● terraria.service
Loaded: loaded (/etc/systemd/system/terraria.service; disabled)
Active: active (running) since Tue 2017-03-07 17:37:03 UTC; 7s ago
Process: 31143 ExecStart=/usr/bin/screen -dmS terraria /bin/bash -c /opt/terraria/TerrariaServer.bin.x86_64 -config /opt/terraria/serverconfig.txt (code=exited, status=0/SUCCESS)
Main PID: 31144 (screen)
CGroup: /system.slice/terraria.service
├─31144 /usr/bin/SCREEN -dmS terraria /bin/bash -c /opt/terraria/TerrariaServer.bin.x86_64 -config /opt/terraria/serverconfig.txt
└─31145 /opt/terraria/TerrariaServer.bin.x86_64 -config /opt/terraria/serverconfig.txt

停止服务器

如果你想关闭Terraria,请使用以下命令保存世界并关闭游戏服务器:

sudo systemctl stop terraria

附加到控制台

在运行服务器的过程中,你可能需要连接到控制台来执行踢球员或更改当天消息(MOTD)等操作。terrariad使用脚本进入Terraria服务器控制台:

sudo terrariad attach

键入help以获取命令列表。完成后,使用键盘快捷键CTRL + A,然后使用D从屏幕会话中分离并使其在后台运行。屏幕的更多键盘快捷键可以在屏幕默认键绑定文档中找到

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

本文的版权归 大大刺猬 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何使用CentOS 7上的TICK堆栈监控系统指标

TICK堆栈是来自时间序列数据库InfluxDB的开发人员的产品集合。它由以下组件组成:

33050
来自专栏古时的风筝

Hexo + github 打造个人博客

前两年开始用 wordpress 搭了一个网站,但服务器是在 Linode 上,之所以要放在 Linode 上,要从买的域名说起,因为我买的域名是 fengzh...

37080
来自专栏Vamei实验室

Python应用01 原始Python服务器

之前我的Python教程中有人留言,表示只学Python没有用,必须学会一个框架(比如Django和web.py)才能找到工作。而我的想法是,掌握一个类似于框架...

277100
来自专栏大数据文摘

硬盘数据恢复的神器有哪些?

293150
来自专栏FreeBuf

西部数据NAS设备被曝存在硬编码后门和未授权文件上传高危漏洞

近日,GulfTech公司安全研究员James Bercegay发现,西部数据(Western Digital)旗下多个MyCloud系列网络存储设备(WDMy...

34150
来自专栏GreenLeaves

HTTP传输数据压缩

一、基础 1、HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法。 HTTP采用通用的压缩算法,比如gzip来压缩HTML,Javascr...

47070
来自专栏熊二哥

Maven快速入门

Maven是Java中最为普及的包管理工具,在实际项目中由于依赖的各类jar包非常多,因此概念清晰的处理好各类Jar依赖显得非常重要,接下来通过基础知识,Jar...

62590
来自专栏Java学习网

Web服务器的工作原理

Web服务器的工作原理 Web服务器工作原理概述 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它们是怎样处理来...

436100
来自专栏轻扬小栈

linux 百度客户端 非图形界面 小结

20950
来自专栏LanceToBigData

IDEA将项目上传至码云/GitHub托管

前言   好久都没有写博客了,由于博主之前一直都在上班处于加班的阶段,所以根本就没有时间去学习。现在请假回到学校写论文,有时间来学习了。   所以会不断的进行博...

50770

扫码关注云+社区

领取腾讯云代金券