1. 项目概述:为什么要在CentOS上搭建带瑟银灾厄的泰拉瑞亚服务器?
如果你是一个泰拉瑞亚的深度玩家,尤其是对瑟银(Thorium)和灾厄(Calamity)这类大型内容扩展模组(Mod)情有独钟,那么本地联机或者使用一些简易的第三方服务器工具可能很快就会遇到瓶颈。延迟高、人数限制、模组管理混乱、存档不稳定……这些问题会严重破坏你和朋友们的游戏体验。这时候,拥有一台专属的、24小时在线的私有服务器就成了终极解决方案。
而选择CentOS作为服务器的操作系统,是经过深思熟虑的。CentOS以其极致的稳定性、出色的安全性和近乎为零的授权成本,在服务器领域有着“社区版企业系统”的美誉。虽然CentOS Stream的发布改变了其更新模式,但对于我们这种游戏服务应用来说,其核心的稳定性和RHEL兼容性依然是最佳选择之一。相较于Windows Server,它在资源占用上更“轻量”,能将更多的CPU和内存资源留给游戏服务端本身;相较于Ubuntu等发行版,其保守的软件更新策略意味着更少的意外崩溃和兼容性问题,这对于需要长期稳定运行的服务器至关重要。
这个项目的核心,就是在纯净的CentOS系统上,从零开始部署一个支持tModLoader的泰拉瑞亚服务端,并成功加载瑟银与灾厄这两个大型模组,最终构建一个稳定、可定制、高性能的专属模组游戏世界。整个过程涉及Linux系统操作、服务端配置、模组管理以及网络调试等多个环节,我会把每一步的原理、踩过的坑和优化技巧都详细拆解出来。
2. 核心需求解析与方案选型
在动手之前,我们必须明确我们要构建的到底是什么,以及为什么选择这套技术栈。
2.1 核心组件拆解
- 泰拉瑞亚服务端 (Terraria Server):这是官方提供的、无图形界面的游戏逻辑核心。它负责处理所有游戏世界的运算,如怪物生成、物品刷新、玩家交互、物理计算等。我们最终运行的就是这个程序。
- tModLoader:这是泰拉瑞亚的模组加载器,也是一个独立的游戏版本。几乎所有大型模组都依赖于它。我们的服务端必须是tModLoader版本,而不是原版。这意味着我们需要获取并运行的是
tModLoader-server程序。 - 瑟银模组 (Thorium Mod)与灾厄模组 (Calamity Mod):这是两个超大型的内容扩展模组,添加了数以千计的新物品、生物、Boss、地形和游戏机制。它们文件体积大,对服务器性能有一定要求,并且模组间的兼容性、加载顺序需要特别注意。
- CentOS 操作系统:我们选择的服务器基石。它将承担运行服务端、提供网络服务、管理进程和文件系统的职责。
2.2 为什么是这套组合?
- 稳定性优先:游戏服务器,尤其是模组服务器,最怕的就是无缘无故崩溃或存档损坏。CentOS 的系统服务管理(systemd)和防火墙(firewalld)配置清晰,软件源稳定,为长时间稳定运行提供了坚实基础。
- 资源效率:在同等硬件条件下,Linux服务端通常比Windows服务端表现出更低的内存占用和更平滑的CPU使用率,这意味着你可以用更低的配置支持更多的玩家,或者为游戏世界加载更多的模组。
- 自动化与可维护性:通过编写 systemd 服务单元文件,我们可以实现服务器进程的自动启动、守护(崩溃后自动重启)和状态监控。配合 cron 定时任务,还可以实现自动备份存档,这些在 Linux 上都是非常成熟和方便的操作。
- 成本与掌控力:使用云服务商的 CentOS 镜像通常没有额外的操作系统授权费用。通过命令行操作,你对服务器有完全的掌控力,可以进行深度的性能调优和问题排查。
注意:灾厄模组以其高难度和大量改动著称,对服务器性能(特别是单核性能)的要求比原版或瑟银模组更高。如果你的服务器硬件配置较低(例如单核性能弱的VPS),在游戏后期或多人同时进行高强度战斗时可能会感到卡顿。选择云服务器时,CPU的主频和单核性能是一个关键考量点。
3. 环境准备与系统初始化
假设你已经拥有一台安装了 CentOS 7.9 或 CentOS Stream 8/9 的服务器(物理机或云服务器)。我们从最干净的初始状态开始。
3.1 系统更新与基础工具安装
首先,通过SSH连接到你的服务器。第一步永远是更新系统并安装必要的工具。
# 1. 更新系统到最新状态 sudo yum update -y # 2. 安装常用的基础工具,如解压工具、编译工具、进程查看工具等 sudo yum install -y wget curl tar unzip screen htop ncdu tmuxyum update -y:-y参数表示对所有询问自动回答“是”,避免交互式操作,适合脚本化部署。- 工具说明:
wget/curl:用于从网络下载文件。tar/unzip:用于解压下载的服务端和模组包。screen/tmux:终端复用器。这是极其重要的工具。它允许你在断开SSH连接后,让服务端进程继续在后台运行。否则,你关闭SSH窗口,游戏服务器就跟着关闭了。htop:一个强大的交互式进程查看器,比top更直观,方便你监控服务器资源(CPU、内存)使用情况。ncdu:磁盘使用情况分析器,可以快速找出哪个目录或文件占用了大量空间,在管理模组和存档时非常有用。
3.2 创建专用用户与目录
不建议直接使用root用户来运行游戏服务端,这存在安全风险。我们应该创建一个专用的、权限受限的用户。
# 1. 创建一个名为 `terraria` 的系统用户,并指定其家目录为 /opt/terraria sudo useradd -m -d /opt/terraria -s /bin/bash terraria # 2. 切换到该用户 sudo su - terraria现在,你的终端提示符应该从root@...变成了terraria@...。我们后续的所有操作,除非特别说明,都在这个用户下进行。/opt/terraria将成为我们所有服务器文件的家。
3.3 配置系统防火墙
泰拉瑞亚服务端默认使用7777端口(TCP)。如果你的服务器开启了防火墙(firewalld或iptables),必须放行此端口。
# 如果你使用的是 firewalld(CentOS 7/8 默认) sudo firewall-cmd --permanent --add-port=7777/tcp sudo firewall-cmd --reload # 检查端口是否开放 sudo firewall-cmd --list-ports | grep 7777--permanent:使规则永久生效,重启防火墙后依然存在。--reload:重载防火墙配置,使新规则立即生效。
如果你的云服务器提供商(如阿里云、腾讯云、AWS)有额外的安全组(Security Group)或网络ACL设置,请务必在其控制台也添加一条规则,允许入方向的 TCP 7777 端口。
4. 获取与部署服务端及模组
这是最核心的一步,我们将获取 tModLoader 服务端和所需的模组文件。
4.1 下载 tModLoader 服务端
tModLoader 的官方发布在 GitHub 上。我们需要找到适用于 Linux 的服务端版本。
# 确保当前在 /opt/terraria 目录下 cd /opt/terraria # 从 tModLoader 的 GitHub Releases 页面下载最新稳定版的 Linux 服务端 # 请访问 https://github.com/tModLoader/tModLoader/releases 查看最新版本号,替换下面的链接 # 例如,假设最新版本是 v2023.11.5 wget https://github.com/tModLoader/tModLoader/releases/download/v2023.11.5/tModLoader-Linux-v2023.11.5.tar.gz # 解压下载的压缩包 tar -xzf tModLoader-Linux-v2023.11.5.tar.gz # 解压后会得到一个名为 `tModLoader-Linux-v2023.11.5` 的目录,为了便于管理,我们可以重命名它 mv tModLoader-Linux-v2023.11.5 tmodserver cd tmodserver现在,/opt/terraria/tmodserver目录下应该包含了tModLoaderServer(主程序)、dotnet运行时依赖、lib库文件等。
4.2 首次运行与生成配置文件
在安装模组前,我们需要先启动一次服务端,让它生成必要的目录结构和默认配置文件。
# 使用 screen 创建一个新的会话,命名为 tmod screen -S tmod # 在 screen 会话中启动服务端 ./tModLoaderServer # 此时,程序会提示你选择语言、世界大小、难度等。如果你是第一次运行,需要先创建一个新世界。 # 按照屏幕提示操作即可。这个过程可能会比较慢,因为要生成整个世界。 # 创建完成后,输入 `exit` 命令退出服务器。 # 退出 screen 会话的快捷键是 Ctrl+A,然后按 D(Detach)。这样服务器进程就在后台运行了。 # 如果你想回到这个会话,使用 `screen -r tmod`。首次运行后,会在tmodserver目录下生成几个关键目录:
Worlds/:存放你的世界存档文件(.wld)。Mods/:存放模组文件(.tmod)。serverconfig.txt:服务器的主要配置文件。
现在,先按Ctrl+A, D分离 screen 会话,让服务器在后台运行一会儿,或者直接按Ctrl+C停止它。我们接下来配置模组。
4.3 安装瑟银与灾厄模组
模组文件需要从官方模组浏览器或像https://mirror.sgkoi.dev/这样的镜像站下载。由于服务器没有图形界面,我们需要手动下载.tmod文件。
# 回到 tmodserver 目录 cd /opt/terraria/tmodserver # 进入 Mods 目录 cd Mods # 下载瑟银模组 (请检查最新版本号) wget https://mirror.sgkoi.dev/Get/ThoriumMod.tmod # 下载灾厄模组 (请检查最新版本号) wget https://mirror.sgkoi.dev/Get/CalamityMod.tmod # 灾厄模组有音乐包,如果需要也一并下载(体积较大) wget https://mirror.sgkoi.dev/Get/CalamityModMusic.tmod实操心得:模组版本必须与 tModLoader 版本兼容。通常,tModLoader 更新后,主流模组会很快跟进。如果遇到服务器启动时报模组加载错误,首先检查模组版本是否过旧。你可以通过
https://mirror.sgkoi.dev/查看所有模组及其版本。
4.4 启用模组并生成模组配置
模组文件放入Mods文件夹后,还需要在游戏内或通过配置启用。对于无头服务器,我们需要编辑一个配置文件。
# 首先,确保服务器已完全关闭。 # 然后,编辑 enabled.json 文件。这个文件可能不存在,第一次需要创建。 cd /opt/terraria/tmodserver/Mods nano enabled.json在enabled.json文件中,你需要列出所有要启用的模组内部名称(不是文件名)。格式如下:
{ "Enabled": [ "ThoriumMod", "CalamityMod", "CalamityModMusic", "ModLoader" ] }"ModLoader"是 tModLoader 自身的核心模组,必须启用。- 模组名称必须精确匹配。你可以通过查看
.tmod文件的属性,或者运行一次服务器,它会在日志中列出所有发现的模组及其内部名。
保存并退出编辑器(在 nano 中是Ctrl+X,然后按Y确认,再按回车)。
5. 服务器深度配置与自动化管理
一个可维护的服务器离不开精细的配置和自动化。
5.1 详解 serverconfig.txt 配置
让我们深入配置serverconfig.txt,这个文件决定了服务器的核心行为。
cd /opt/terraria/tmodserver nano serverconfig.txt以下是一些关键参数的解析与建议设置:
# 服务器端口 port=7777 # 服务器密码,留空则无密码。建议设置一个强密码,避免陌生人加入。 password=你的强密码 # 世界文件路径,相对于 tModLoaderServer 程序的位置,或绝对路径。 world=/opt/terraria/tmodserver/Worlds/你的世界名.wld # 同时在线玩家最大数量。根据服务器性能设置,4核8G的机器设置20-30人问题不大。 maxplayers=10 # 服务器语言 language=zh-Hans # 是否自动创建世界。如果指定 world 路径的世界不存在,则自动创建。 autocreate=2 # 1为小,2为中,3为大世界 # 世界难度。0=经典,1=专家,2=大师,3=旅途。模组服常玩专家或大师。 difficulty=1 # 禁止使用的游戏内物品ID,用逗号分隔。可以用来禁用一些破坏平衡的BUG物品或模组物品。 banlist=example_item1,example_item2 # 安全设置:是否只允许白名单玩家加入。 secure=0 # 0=关闭,1=开启。开启后需配合 whitelist.txt 使用。 # 是否启用NPC闲逛(NPCs don‘t wander at night)。0=禁用,1=启用。 npcstream=0 # 优先级设置。设置服务器进程的优先级,可能有助于提高性能。 priority=1注意事项:
world路径一定要写对。autocreate和difficulty只在世界文件不存在时生效。一旦世界创建,这些属性就固定了,需要手动修改世界文件或新建世界才能更改。
5.2 创建 Systemd 服务单元(实现开机自启与守护)
使用screen是临时的,更专业的方式是配置systemd服务。这样服务器可以随系统启动,崩溃后自动重启,并且方便地用systemctl命令管理。
# 切换到 root 用户或使用 sudo exit # 退出 terraria 用户,回到有 sudo 权限的用户 sudo nano /etc/systemd/system/terraria-tmod.service将以下内容粘贴到文件中,请根据你的实际路径修改WorkingDirectory和ExecStart:
[Unit] Description=Terraria tModLoader Server After=network.target [Service] Type=simple User=terraria Group=terraria WorkingDirectory=/opt/terraria/tmodserver ExecStart=/opt/terraria/tmodserver/tModLoaderServer -config /opt/terraria/tmodserver/serverconfig.txt Restart=on-failure RestartSec=10 StandardOutput=journal StandardError=journal # 可选:限制资源使用,防止服务器占用过多资源导致系统不稳定 # CPUQuota=200% # 最多使用2个核心的100% # MemoryMax=4G # 最大内存使用4GB [Install] WantedBy=multi-user.targetUser/Group:指定以terraria用户运行,提升安全性。WorkingDirectory:服务启动时的工作目录,确保程序能找到相对路径下的文件(如Mods/,Worlds/)。ExecStart:启动命令。这里我们通过-config参数指定配置文件,这样启动时就不会有交互式提问,完全自动化。Restart=on-failure和RestartSec=10:这是守护功能的关键。当服务器进程异常退出(崩溃)时,systemd 会在10秒后自动重新启动它。StandardOutput=journal:将日志输出到 systemd 的日志系统,方便用journalctl命令查看。
保存退出后,启用并启动这个服务:
# 重新加载 systemd 配置 sudo systemctl daemon-reload # 设置开机自启 sudo systemctl enable terraria-tmod.service # 立即启动服务 sudo systemctl start terraria-tmod.service # 查看服务状态和日志 sudo systemctl status terraria-tmod.service sudo journalctl -u terraria-tmod.service -f # -f 表示实时跟踪日志现在,你的泰拉瑞亚服务器已经作为一个系统服务在运行了,即使服务器重启,它也会自动启动。
5.3 配置定时自动备份
世界存档是服务器最宝贵的资产。定时备份至关重要。
# 切换到 terraria 用户 sudo su - terraria # 创建备份脚本 cd /opt/terraria nano backup_world.sh备份脚本内容:
#!/bin/bash BACKUP_DIR="/opt/terraria/backups" WORLD_DIR="/opt/terraria/tmodserver/Worlds" DATE=$(date +%Y%m%d_%H%M%S) # 创建备份目录(如果不存在) mkdir -p $BACKUP_DIR # 停止服务器(通过systemd),确保存档文件不被写入 sudo systemctl stop terraria-tmod.service sleep 5 # 等待几秒确保进程完全停止 # 打包世界文件和重要配置文件 tar -czf $BACKUP_DIR/world_backup_$DATE.tar.gz -C $WORLD_DIR . # 也可以把 serverconfig.txt, enabled.json 等一起备份 tar -czf $BACKUP_DIR/config_backup_$DATE.tar.gz -C /opt/terraria/tmodserver serverconfig.txt enabled.json # 启动服务器 sudo systemctl start terraria-tmod.service # 删除超过7天的旧备份(可选) find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete echo "Backup completed at $DATE"给脚本添加执行权限,并添加到 crontab 定时任务:
chmod +x backup_world.sh # 编辑当前用户的crontab crontab -e在末尾添加一行,表示每天凌晨3点执行备份:
0 3 * * * /opt/terraria/backup_world.sh >> /opt/terraria/backup.log 2>&1这样,每天凌晨3点,服务器会自动停止服务、备份存档、然后重启服务,并将日志记录到backup.log文件中。
6. 高级调优、问题排查与玩家管理
服务器上线后,维护和优化才是长期的工作。
6.1 性能监控与调优建议
监控工具:
htop:实时查看CPU、内存使用情况。重点关注tModLoaderServer进程的占用。ncdu /opt/terraria:分析磁盘空间,看是否是模组或日志文件占用了过多空间。journalctl -u terraria-tmod.service --since “1 hour ago”:查看最近一小时的服务器日志,关注有无错误或警告。
性能调优点:
- JIT 编译:.NET 程序首次运行或加载新区域时会有JIT编译开销,可能导致瞬间卡顿。运行一段时间后,热点代码被编译成本地代码,性能会趋于稳定。
- 世界大小与玩家数量:超大型世界和过多玩家会显著增加内存和CPU负担。根据硬件合理设置。
- 模组数量:除了瑟银和灾厄,每增加一个模组,都会增加内存消耗和加载时间。务必精挑细选。
- 系统参数:对于内存较大的服务器,可以尝试调整 .NET 的垃圾回收策略,但这是高级话题,需要谨慎操作。通常 tModLoader 的默认设置已足够好。
6.2 常见问题与排查实录
这里记录几个我搭建过程中实际遇到的问题和解决方法。
问题1:服务器启动失败,提示 “Failed to load mod CalamityMod” 或类似错误。
- 排查:首先检查日志
journalctl -u terraria-tmod.service。错误信息通常会指明原因。 - 可能原因及解决:
- 模组版本不兼容:这是最常见的原因。确保 tModLoader 版本与瑟银、灾厄模组版本匹配。去模组发布页面查看支持的版本号。
- 模组文件损坏:重新下载
.tmod文件。 - 依赖缺失:某些模组需要其他模组作为前置。灾厄和瑟银通常没有复杂的外部依赖,但如果你装了其他小模组,需要注意。错误信息会提示缺少哪个模组。
enabled.json格式错误:检查JSON格式是否正确,模组名是否拼写正确。
问题2:玩家连接时卡在“发现服务器”或“连接被重置”。
- 排查:
- 检查防火墙:确认服务器本机防火墙和云服务商安全组都开放了7777/TCP端口。可以用
sudo ss -tlnp | grep 7777查看端口是否在监听。 - 检查服务器IP:确保玩家连接的是服务器的公网IP,而不是内网IP。
- 检查服务器状态:服务是否真的在运行?
sudo systemctl status terraria-tmod.service。 - 检查密码:如果设置了密码,玩家输入是否正确?可以在
serverconfig.txt中临时注释掉password行进行测试。
- 检查防火墙:确认服务器本机防火墙和云服务商安全组都开放了7777/TCP端口。可以用
问题3:游戏过程中服务器突然变卡,TPS(每秒刻数)下降。
- 排查:使用
htop查看是否是CPU或内存占用过高。 - 可能原因:
- 世界事件:灾厄模组的某些Boss战或事件(如“硫磺海事件”)会产生大量实体和特效,极其消耗性能。
- 液体或沙子/泥沙更新:大规模的地形改造(尤其是涉及大量液体流动或沙块下落)会导致服务器计算量激增。
- 红石/电路:虽然泰拉瑞亚原版电路简单,但一些模组添加了复杂的机械,大量同时运行的电路会拖慢游戏。
- 临时解决:可以尝试在游戏内输入
//lagcheck(如果安装了相关管理模组)或手动重启服务器。长期来看,需要提醒玩家避免在服务器核心区域进行超大规模的工程。
问题4:存档文件(.wld)损坏。
- 预防:这就是我们设置定时自动备份的原因。确保备份脚本正常工作。
- 尝试修复:tModLoader 服务端在启动加载世界时,有时会尝试自动修复轻微损坏。如果失败,只能用备份文件覆盖恢复。
6.3 玩家管理与命令
作为服主,你需要掌握一些基本的服务器管理命令。这些命令需要在服务端的控制台输入(如果你用screen附着到会话)或者通过systemctl管理服务。
服务管理:
sudo systemctl stop terraria-tmod.service # 停止服务器 sudo systemctl start terraria-tmod.service # 启动服务器 sudo systemctl restart terraria-tmod.service # 重启服务器 sudo systemctl status terraria-tmod.service # 查看状态游戏内管理命令(需要在服务器控制台输入):
help:查看所有可用命令。off或exit:安全关闭服务器(会保存世界)。比直接Ctrl+C或kill进程更安全。save:手动立即保存世界。kick <玩家名>:踢出玩家。ban <玩家名>:封禁玩家。password <新密码>:更改服务器密码。maxplayers <数量>:动态修改最大玩家数。
实操心得:对于模组服,强烈建议安装一个服务器管理模组,如
TShock的 tModLoader 兼容版(如果可用),或者Server Side Characters等。它们提供了更强大的Web控制面板、权限管理、领地保护、物品禁止等功能,能极大减轻日常管理负担。但安装前务必确认其与当前 tModLoader 版本的兼容性。
搭建并维护一个模组服务器就像经营一个小型虚拟世界,从系统部署、服务配置到日常运维、问题排查,每一步都需要耐心和细致。当看到朋友们在你的服务器里畅玩,一起挑战灾厄模组那些变态的Boss时,所有的折腾都值了。最关键的,定期备份,定期备份,定期备份。