从0开始搭建泰拉瑞亚tModLoader服务器(Linux)_泰拉瑞亚模组服务器指令
需求
想和小伙伴一起玩泰拉瑞亚,但是毕业之后大家都各奔东西,大家每天能够在线的时间都不确定,所以如果使用 Steam 上 tModLoader 自带的多人游戏搭设服务器会很不方便,正好最近搭建了一个有公网 ip 的 linux 主机,就打算拿来做服务器用。
准备
- 一台有公网 ip 的 linux 主机/服务器,我使用的 linux 主机版本为
Ubuntu 24.04.2 LTS
ps:如果是局域网内,则不需要公网 ip - 安装了
screen
工具,安装指令如下,请读者根据自身操作系统选择指令安装:# Debian/Ubuntu 及衍生系统(APT)sudo apt updatesudo apt install screen -y# CentOS/RHEL 7 或更早版本(使用 YUM)sudo yum install epel-release -y # 先启用 EPEL 仓库sudo yum install screen -y# CentOS 8+/RHEL 8+/Fedora(使用 DNF)sudo dnf install screen -y
搭建并启动服务器
1. 下载安装tModLoader
- 在合适的目录下载并安装tModLoader。我根据我的个人习惯,使用的工作目录为
~/Game/Tmod
。cd ~mkdir Gamecd Game/mkdir tmodcd tmod/
- 下载并安装tModLoader,其
github
项目网址为:tModLoader (github),最新版本(截止至2025/06/09为1.4.4-refs/heads/stable Version Update: v2025.04.3.0
)下载地址为:tModLoader (download),不能登录github的朋友可以点击该连接下载tModLoader v1.4.4。如果使用的是无图形界面的Linux服务器,可以尝试使用wget
工具下载:wget https://github.com/tModLoader/tModLoader/releases/download/v2025.04.3.0/tModLoader.zip
- 下载完成后,将文件上传到
~/Game/Tmod
目录下并解压缩:# 在执行以下指令前,确保已经将tModLoader.zip上传到 ~/Game/Tmodcd ~/Game/tmod/mkdir tmodloadermv tModLoader.zip tmodloader/cd tmodloader/unzip tModLoader.zip # 解压rm tModLoader.zip # 删除压缩包,可省略但建议chmod +x start-tModLoaderServer.sh # 添加可执行权限
2. 首次运行tModLoader,创建世界
-
使用
-nosteam
选项执行start-tModLoaderServer.sh
,不使用steam服务器./start-tModLoaderServer.sh -nosteam
ps:首次启动时,会自动下载
dotnet
,根据网速限制可能会加载较长时间,但一般不会超过1分钟,如遇卡死可以尝试Ctrl
+C
强制退出,重启服务器。 -
加载完成后,根据提示创建世界:
- 输入
n
创建新世界:Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0n New Worldd <number> Delete Worldm Mods ListChoose World:
- 选择世界大小:
Terraria Server v1.4.4.9 - tModLoader v2025.4.3.01Small(小)2Medium(中)3Large(大)Choose size:
- 选择世界难度:
Terraria Server v1.4.4.9 - tModLoader v2025.4.3.01Classic(经典)2Expert(专家)3Master(大师)4Journey(旅行)Choose difficulty:
- 选择邪恶类型
Terraria Server v1.4.4.9 - tModLoader v2025.4.3.01Random(随机)2Corrupt(腐化)3Crimson(猩红)Choose world evil:
- 设置世界名称,这里输入
Test
为名称作为演示Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0Enter world name:
- 设置世界种子(留空为随机种子)
Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0Enter Seed (Leave Blank For Random):
- 完成后回到选择世界界面:
Terraria Server v1.4.4.9 - tModLoader v2025.4.3.01 Testn New Worldd <number> Delete Worldm Mods ListChoose World:
如果想删除某一世界,(以刚刚创建的Test为例)在此页面输入
d 1
,随后输入y
确认(n
取消)。
- 输入
3. 选择地图,启动服务器
- 在选择世界界面,根据提示启动服务器
- 输入地图编号选择地图,这里以
Test
为例,输入1
Terraria Server v1.4.4.9 - tModLoader v2025.4.3.01 Testn New Worldd <number> Delete Worldm Mods ListChoose World:
- 输入最大玩家数量(留空为16)
Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0Max players (press enter for 16):
- 输入使用的端口(留空为7777,最大为65535,建议使用较大的数字,防止被占用)
Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0Server port (press enter for 7777):
- 端口转发(
y
自动设置端口转发,n
不设置,我使用frp将端口映射在了公网ip上,此处选择了n
)Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0Automatically forward port? (y/n):
- 设置服务器密码(留空为无密码)
Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0Server password (press enter for none):
- 服务器启动成功,在此界面可以输入服务器控制台指令,输入
help
查看指令列表Running engine preload...Terraria Server v1.4.4.9Listening on port 7777Type \'help\' for a list of commands.Server started
- 输入地图编号选择地图,这里以
4. 默认地图和Mod保存地址
- 地图地址:
~/.local/share/Terraria/tModLoader/Worlds
- Mod地址:
~/.local/share/Terraria/tModLoader/Mods
安装Mod可以通过Steam安装需要的Mod后,将tmod文件上传至上述地址
5. 设置非交互启动服务器(跳过世界选择,端口设置等)
在tModLoader的安装目录~/Game/tmod/tmodloader
下,存在配置文件serverconfig.txt
,打开并编辑:
- 相关配置如下,其他保持默认即可
# Load a world and automatically start the server.world=/home/wyy/.local/share/Terraria/tModLoader/Worlds/Test.wld#Sets the max number of players allowed on a server. Value must be between 1 and 255maxplayers=8#Set the port numberport=7777#Set the server passwordpassword=123456#Sets the server language from its language code. #English = en-US, German = de-DE, Italian = it-IT, French = fr-FR, Spanish = es-ES, Russian = ru-RU, Chinese = zh-Hans, Portuguese = pt-BR, Polish = pl-PL,#英文不好的可以设置为zh-Hanlanguage=en-US
设置开机自动启动
由于我的 linux 主机同时也作为其他服务器使用,并设置了每天4:00重启启动以防止系统卡顿,所以需要设置tModLoader服务器开机自动启动,防止主机重启后有朋友想要登录缺发现服务器未在运行。使用systemd
工具(Linux自带工具,无需安装)实现这一功能。
1. 创建安全退出脚本
- 在
~/Game/tmod
目录下创建安全退出脚本:vim safe-shutdown.sh
文件内容如下,注意
wyy
为我的用户名需要替换为你自己使用的普通用户用户名:#!/bin/bash# 发送服务器通知screen -S tmod -X stuff \"say 服务器将在60秒后安全关闭进行每日维护...$(printf \'\\r\')\"sleep 30screen -S tmod -X stuff \"say 剩余30秒,请做好准备...$(printf \'\\r\')\"sleep 20screen -S tmod -X stuff \"say 正在保存世界数据...$(printf \'\\r\')\"# 执行保存命令screen -S tmod -X stuff \"save$(printf \'\\r\')\"sleep 5# 关闭服务器screen -S tmod -X stuff \"exit$(printf \'\\r\')\"sleep 10# 确认服务器已关闭if pgrep -f \"tModLoaderServer\" > /dev/null; then echo \"服务器进程仍在运行,强制终止...\" pkill -f \"tModLoaderServer\" sleep 2fi# 创建每日备份BACKUP_DIR=\"/home/wyy/Game/tmod/backups\"mkdir -p $BACKUP_DIRTIMESTAMP=$(date +%Y%m%d_%H%M)tar -czf \"$BACKUP_DIR/world_${TIMESTAMP}.tar.gz\" \\ /home/wyy/.local/share/Terraria/tModLoader/Worlds/*.wld \\ /home/wyy/.local/share/Terraria/tModLoader/Worlds/*.twld# 清理旧备份 (保留最近7天)find $BACKUP_DIR -name \"world_*.tar.gz\" -mtime +7 -deleteecho \"$(date): 服务器已安全关闭并创建备份: world_${TIMESTAMP}.tar.gz\" >> /home/wyy/Game/tmod/server.log
- 保存并退出后,为脚本添加可执行权限:
chmod +x safe-shutdown.sh
2. 创建tmod.service
- 在
root
用户下或通过sudo
提取,使用任意文本编辑工具创建文件/etc/systemd/system/tmod.service
,我使用的是vim
# 普通用户sudo vim /etc/systemd/system/tmod.service# 输入密码并回车,注意此处输入密码时不会有任何显示[sudo] wyy 的密码:
文件内容如下,注意
wyy
为我的用户名需要替换为你自己使用的普通用户用户名[Unit]Description=Terraria tModLoader ServerAfter=network.targetWants=network-online.targetStartLimitIntervalSec=0[Service]User=wyyType=forking# 上大节安装的tModLoader的路径WorkingDirectory=/home/wyy/Game/tmod/tmodloader# start-tModLoaderServer.sh启动脚本的路径ExecStart=/usr/bin/screen -dmS tmod /home/wyy/Game/tmod/tmodloader/start-tModLoaderServer.sh -nosteam# 上一小节创建的安全退出脚本的路径ExecStop=/home/wyy/Game/tmod/safe-shutdown.shRestart=on-failureRestartSec=60StandardOutput=syslogStandardError=syslogSyslogIdentifier=terraria-server[Install]WantedBy=multi-user.target
- 更新systemd信息
sudo systemctl daemon-reload
- 开启tmod.service自启服务并启动tModLoader服务器
# 使能tmod.service自启服务sudo systemctl enable tmod# 启动tmod.servicesudo systemctl start tmod
其他相关指令
# 检查tmod.service状态sudo systemctl status tmod# 关闭tModLoader服务器# 注意,执行该操作时,会调用safe-shutdown.sh,根据该脚本需要执行1分钟,此处出现1分钟停顿为正常现象sudo systemctl stop tmod# 关闭tmod.service自启服务sudo systemctl disable tmod
3. 设置重启前的安全退出 (注意!如果没有服务器重启需求,请忽略该章节!!!)
- 使用
crontab
工具设置周期执行:sudo crontab -e
在末尾添加:
# 注意!这一行为我自己的服务器需求,此处仅做展示# 每天凌晨 4:00 自动重启服务器0 4 * * * /sbin/shutdown -r now# 每天凌晨 3:55 安全关闭泰拉瑞亚服务器55 3 * * * /usr/bin/systemctl stop tmod.service
登录游戏
- 至此,服务器已搭建完成并成功启动,可以通过steam启动tmodloader并通过多人游戏,通过IP加入来加入游戏了。
设置开机自启后,连接到服务器控制台
在以上流程中,我们在tmod.service
中设置了使用screen
启动服务器:使用screen
创建名为tmod
的会话运行tModLoader服务器,随后分离会话,以确保服务器在后台运行。下面我们使用screen连接到控制台
- 显示会话
screen -ls
执行后的结果如下:
There is a screen on:14688.tmod(2025年06月09日 17时11分35秒)(Detached)1 Socket in /run/screen/S-wyy.
- 恢复会话
screen -r tmod
- 分离会话
键盘按下Ctrl
+A
,松开后按下D