从0开始搭建泰拉瑞亚tModLoader服务器(Linux)

需求

想和小伙伴一起玩泰拉瑞亚,但是毕业之后大家都各奔东西,大家每天能够在线的时间都不确定,所以如果使用 Steam 上 tModLoader 自带的多人游戏搭设服务器会很不方便,正好最近搭建了一个有公网 ip 的 linux 主机,就打算拿来做服务器用。

准备

  1. 一台有公网 ip 的 linux 主机/服务器,我使用的 linux 主机版本为Ubuntu 24.04.2 LTS
    ps:如果是局域网内,则不需要公网 ip

  2. 安装了screen工具,安装指令如下,请读者根据自身操作系统选择指令安装:

    shell 复制代码
    # Debian/Ubuntu 及衍生系统(APT)​
    sudo apt update
    sudo 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

    shell 复制代码
    cd ~
    mkdir Game
    cd Game/
    mkdir tmod
    cd 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 工具下载:

    shell 复制代码
    wget https://github.com/tModLoader/tModLoader/releases/download/v2025.04.3.0/tModLoader.zip
  • 下载完成后,将文件上传到 ~/Game/Tmod 目录下并解压缩:

    shell 复制代码
    # 在执行以下指令前,确保已经将tModLoader.zip上传到 ~/Game/Tmod
    cd ~/Game/tmod/
    mkdir tmodloader
    mv tModLoader.zip tmodloader/
    cd tmodloader/
    unzip tModLoader.zip # 解压
    rm tModLoader.zip # 删除压缩包,可省略但建议
    chmod +x start-tModLoaderServer.sh # 添加可执行权限

2. 首次运行tModLoader,创建世界

  • 使用 -nosteam 选项执行 start-tModLoaderServer.sh,不使用steam服务器

    shell 复制代码
    ./start-tModLoaderServer.sh -nosteam

    ps:首次启动时,会自动下载 dotnet,根据网速限制可能会加载较长时间,但一般不会超过1分钟,如遇卡死可以尝试 Ctrl+C 强制退出,重启服务器。

  • 加载完成后,根据提示创建世界:

    • 输入n创建新世界:

      shell 复制代码
      Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0
      
      n               New World
      d <number>      Delete World
      m               Mods List
      
      Choose World: 
    • 选择世界大小:

      shell 复制代码
      Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0
      
      1	Small		(小)
      2	Medium		(中)
      3	Large		(大)
      
      Choose size: 
    • 选择世界难度:

      shell 复制代码
      Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0
      
      1	Classic		(经典)
      2	Expert		(专家)
      3	Master		(大师)
      4	Journey		(旅行)
      
      Choose difficulty: 
    • 选择邪恶类型

      shell 复制代码
      Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0
      
      1	Random		(随机)
      2	Corrupt		(腐化)
      3	Crimson		(猩红)
      
      Choose world evil: 
    • 设置世界名称,这里输入 Test 为名称作为演示

      shell 复制代码
      Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0
      
      Enter world name: 
    • 设置世界种子(留空为随机种子)

      shell 复制代码
      Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0
      
      Enter Seed (Leave Blank For Random):
    • 完成后回到选择世界界面:

      shell 复制代码
      Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0
      
      1               Test
      n               New World
      d <number>      Delete World
      m               Mods List
      
      Choose World: 

      如果想删除某一世界,(以刚刚创建的Test为例)在此页面输入d 1,随后输入y确认(n取消)。

3. 选择地图,启动服务器

  • 在选择世界界面,根据提示启动服务器
    • 输入地图编号选择地图,这里以Test 为例,输入1

      shell 复制代码
      Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0
      
      1               Test
      n               New World
      d <number>      Delete World
      m               Mods List
      
      Choose World: 
    • 输入最大玩家数量(留空为16)

      shell 复制代码
      Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0
      
      Max players (press enter for 16): 
    • 输入使用的端口(留空为7777,最大为65535,建议使用较大的数字,防止被占用)

      shell 复制代码
      Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0
      
      Server port (press enter for 7777): 
    • 端口转发(y自动设置端口转发,n不设置,我使用frp将端口映射在了公网ip上,此处选择了n

      shell 复制代码
      Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0
      
      Automatically forward port? (y/n): 
    • 设置服务器密码(留空为无密码)

      shell 复制代码
      Terraria Server v1.4.4.9 - tModLoader v2025.4.3.0
      
      Server password (press enter for none): 
    • 服务器启动成功,在此界面可以输入服务器控制台指令,输入help查看指令列表

      shell 复制代码
      Running engine preload...
      Terraria Server v1.4.4.9
      
      Listening on port 7777
      Type '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,打开并编辑:

  • 相关配置如下,其他保持默认即可

    shell 复制代码
    # 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 255
    maxplayers=8
    #Set the port number
    port=7777
    #Set the server password
    password=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-Han
    language=en-US

设置开机自动启动

由于我的 linux 主机同时也作为其他服务器使用,并设置了每天4:00重启启动以防止系统卡顿,所以需要设置tModLoader服务器开机自动启动,防止主机重启后有朋友想要登录缺发现服务器未在运行。使用systemd工具(Linux自带工具,无需安装)实现这一功能。

1. 创建安全退出脚本

  • ~/Game/tmod目录下创建安全退出脚本:

    shell 复制代码
    vim safe-shutdown.sh

    文件内容如下,注意wyy为我的用户名需要替换为你自己使用的普通用户用户名

    bash 复制代码
    #!/bin/bash
    
    # 发送服务器通知
    screen -S tmod -X stuff "say 服务器将在60秒后安全关闭进行每日维护...$(printf '\r')"
    sleep 30
    screen -S tmod -X stuff "say 剩余30秒,请做好准备...$(printf '\r')"
    sleep 20
    screen -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 2
    fi
    
    # 创建每日备份
    BACKUP_DIR="/home/wyy/Game/tmod/backups"
    mkdir -p $BACKUP_DIR
    TIMESTAMP=$(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 -delete
    
    echo "$(date): 服务器已安全关闭并创建备份: world_${TIMESTAMP}.tar.gz" >> /home/wyy/Game/tmod/server.log
  • 保存并退出后,为脚本添加可执行权限:

    shell 复制代码
    chmod +x safe-shutdown.sh

2. 创建tmod.service

  • root用户下或通过sudo提取,使用任意文本编辑工具创建文件/etc/systemd/system/tmod.service,我使用的是vim

    shell 复制代码
    # 普通用户
    sudo vim /etc/systemd/system/tmod.service
    # 输入密码并回车,注意此处输入密码时不会有任何显示
    [sudo] wyy 的密码: 

    文件内容如下,注意wyy为我的用户名需要替换为你自己使用的普通用户用户名

    shell 复制代码
    [Unit]
    Description=Terraria tModLoader Server
    After=network.target
    Wants=network-online.target
    StartLimitIntervalSec=0
    
    [Service]
    User=wyy
    Type=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.sh
    Restart=on-failure
    RestartSec=60
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=terraria-server
    
    [Install]
    WantedBy=multi-user.target
  • 更新systemd信息

    shell 复制代码
    sudo systemctl daemon-reload
  • 开启tmod.service自启服务并启动tModLoader服务器

    shell 复制代码
    # 使能tmod.service自启服务
    sudo systemctl enable tmod
    # 启动tmod.service
    sudo systemctl start tmod

    其他相关指令

    shell 复制代码
    # 检查tmod.service状态
    sudo systemctl status tmod
    # 关闭tModLoader服务器
    # 注意,执行该操作时,会调用safe-shutdown.sh,根据该脚本需要执行1分钟,此处出现1分钟停顿为正常现象
    sudo systemctl stop tmod
    # 关闭tmod.service自启服务
    sudo systemctl disable tmod

3. 设置重启前的安全退出 (注意!如果没有服务器重启需求,请忽略该章节!!!)

  • 使用crontab工具设置周期执行:

    shell 复制代码
    sudo crontab -e

    在末尾添加:

    shell 复制代码
    # 注意!这一行为我自己的服务器需求,此处仅做展示
    # 每天凌晨 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连接到控制台

  • 显示会话

    shell 复制代码
    screen -ls

    执行后的结果如下:

    shell 复制代码
    There is a screen on:
    	14688.tmod	(2025年06月09日 17时11分35秒)	(Detached)
    1 Socket in /run/screen/S-wyy.
  • 恢复会话

    shell 复制代码
    screen -r tmod
  • 分离会话
    键盘按下Ctrl+A,松开后按下D

相关推荐
祢真伟大2 小时前
dmagent-2026监控服务器代理部署
运维·服务器
零K沁雪2 小时前
Linux 内核中网络地址快速打印符
linux·内核
十年编程老舅3 小时前
窥探内核心脏:深入解析 proc 虚拟文件系统
linux·服务器·数据库·c++·linux内核·文件系统·读写锁
魔士于安3 小时前
unity 低多边形 动物 带场景 有氛围感
游戏·unity·游戏引擎·贴图
江公望3 小时前
Linux kernel completion(完成量)10分钟讲清楚
linux
运维行者_3 小时前
通过 OpManager 集成 Firewall Analyzer 插件,释放统一网络管理与安全的强大能力
大数据·运维·服务器·网络·数据库·安全
腾讯蓝鲸智云3 小时前
【运维自动化-节点管理】节点管理有哪些插件?如何安装插件?
运维·服务器·自动化·云计算·sass·paas
Sakuyu434683 小时前
sed和awk
linux
重生之我是Java开发战士3 小时前
【动态规划】路径问题:不同路径,珠宝的最高价值,下降路径最小和,最小路径和,地下城游戏
算法·游戏·动态规划