泰拉瑞亚灾厄服-Linux-Docker部署文档
泰拉瑞亚灾厄服 Linux Docker 部署文档
基于官方 tModLoader Dedicated Server Utils(方案二)
适用系统:Ubuntu / Debian / CentOS / Arch 等 x86_64 Linux
最后更新:2026-07-13
目录
- 概述
- 环境要求
- 安装 Docker
- 目录结构
- 下载官方文件
- 配置灾厄模组
- 配置 serverconfig.txt
- 配置 docker-compose.yml
- 构建与启动
- 日常运维
- 客户端连接
- 公网联机与防火墙
- 更新与备份
- 故障排查
- 附录:常用 Workshop ID
1. 概述
本文档介绍如何在 Linux 上使用 Docker 部署带 灾厄(Calamity Mod) 的泰拉瑞亚专用服务器。
架构说明
宿主机 Linux
├── /opt/terraria-tml/ # 项目根目录
│ ├── docker-compose.yml
│ ├── Dockerfile
│ └── tModLoader/ # 数据卷(持久化)
│ ├── Mods/
│ ├── Worlds/
│ └── serverconfig.txt
│
└── Docker 容器 (tml)
├── tModLoader 服务端
├── SteamCMD(下载创意工坊模组)
└── 监听端口 7777
重要说明
| 角色 | 说明 |
|---|---|
| Docker 容器 | 仅运行 专用服务器,不能用来玩游戏 |
| 玩家电脑 | 需安装 tModLoader 客户端,并启用与服务器相同的模组 |
| 灾厄模组 | 属于 tModLoader 模组,不能在 vanilla 泰拉瑞亚服务器上运行 |
2. 环境要求
| 项目 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU 架构 | x86_64 (amd64) | x86_64 |
| 内存 | 2 GB | 4~8 GB |
| 磁盘 | 5 GB | 15 GB+ |
| 系统 | Linux 64 位 | Ubuntu 22.04 LTS |
| 网络 | 可访问 GitHub、Steam CDN | 稳定公网 IP(如需外网联机) |
注意:官方暂不支持 ARM 架构(树莓派、部分云 ARM 实例等)。详见 ARM 支持说明。
3. 安装 Docker
Ubuntu / Debian
# 更新包索引
sudo apt update
# 安装依赖
sudo apt install -y ca-certificates curl gnupg
# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 添加 Docker 仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker Engine 和 Compose 插件
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 将当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER
newgrp docker
验证安装
docker --version
docker compose version
预期输出示例:
Docker version 27.x.x
Docker Compose version v2.x.x
4. 目录结构
在部署前,需按官方要求准备好以下目录结构:
/opt/terraria-tml/
├── docker-compose.yml # Docker Compose 配置
├── Dockerfile # 镜像构建文件
└── tModLoader/
├── Mods/
│ ├── install.txt # 创意工坊模组 ID(每行一个)
│ └── enabled.json # 启用的模组内部名称
├── Worlds/ # 世界存档目录
└── serverconfig.txt # 服务器配置(强烈建议)
创建目录:
sudo mkdir -p /opt/terraria-tml/tModLoader/{Mods,Worlds}
sudo chown -R $USER:$USER /opt/terraria-tml
cd /opt/terraria-tml
5. 下载官方文件
从 tModLoader 官方仓库下载 Dockerfile 和 docker-compose.yml:
cd /opt/terraria-tml
curl -fsSL -o Dockerfile \
"https://raw.githubusercontent.com/tModLoader/tModLoader/1.4.4/patches/tModLoader/Terraria/release_extras/DedicatedServerUtils/Dockerfile"
curl -fsSL -o docker-compose.yml \
"https://raw.githubusercontent.com/tModLoader/tModLoader/1.4.4/patches/tModLoader/Terraria/release_extras/DedicatedServerUtils/docker-compose.yml"
官方源文件地址:
6. 配置灾厄模组
模组配置需要两个文件,均放在 tModLoader/Mods/ 目录下。
方式 A(推荐):从客户端导出模组包
在本地电脑的 tModLoader 客户端中操作:
- 启动 tModLoader
- 主菜单 → Workshop → Mod Packs
- 安装并启用所需模组(至少包含灾厄本体和灾厄音乐)
- 点击 Save Enabled as New Pack(将已启用保存为新模组包)
- 点击 Open Pack Folder(打开模组包文件夹)
- 将文件夹内的
Mods/install.txt和Mods/enabled.json复制到服务器的tModLoader/Mods/目录
# 示例:从本地上传(在本地电脑执行)
scp Mods/install.txt Mods/enabled.json user@your-server:/opt/terraria-tml/tModLoader/Mods/
此方式可自动包含所有依赖模组,最不容易出错。
方式 B:手动编写(最小灾厄配置)
install.txt
每行一个 Steam 创意工坊 ID:
cat > /opt/terraria-tml/tModLoader/Mods/install.txt << 'EOF'
2824688072
2824688266
2669644269
2619954303
EOF
| Workshop ID | 模组名称 | 说明 |
|---|---|---|
| 2824688072 | Calamity Mod | 灾厄本体 |
| 2824688266 | Calamity Mod Music | 必需,灾厄官方要求 |
| 2669644269 | Boss Checklist | 可选,Boss 进度清单 |
| 2619954303 | Recipe Browser | 可选,配方浏览器 |
enabled.json
cat > /opt/terraria-tml/tModLoader/Mods/enabled.json << 'EOF'
[
"CalamityMod",
"CalamityModMusic",
"BossChecklist",
"RecipeBrowser"
]
EOF
注意:
enabled.json中使用的是模组内部名称(Internal Name),不是显示名称。
install.txt中的每个 ID 都必须在enabled.json中有对应条目。
7. 配置 serverconfig.txt
serverconfig.txt 放在 tModLoader/ 目录下,用于实现无交互自动启动。
新建世界(首次部署推荐)
cat > /opt/terraria-tml/tModLoader/serverconfig.txt << 'EOF'
# 世界文件路径(容器内路径,必须使用此格式)
world=/tModLoader/Worlds/CalamityWorld.wld
# 世界不存在时自动创建:1=小 2=中 3=大
autocreate=3
# 世界名称
worldname=CalamityWorld
# 世界种子
seed=CalamityServer2026
# 难度:0=普通 1=专家 2=大师 3=旅途
difficulty=2
# 最大玩家数(1~255)
maxplayers=8
# 监听端口
port=7777
# 进服密码(留空则无密码)
password=your_password_here
# 欢迎语
motd=欢迎来到灾厄服务器!
# 语言
language=zh-Hans
# 降低怪物传送跳跃(建议 2~6,值越小越流畅但带宽占用越高)
npcstream=4
# 进程优先级:0=Realtime 1=High 2=AboveNormal 3=Normal
priority=1
EOF
使用已有世界存档
# 1. 将 .wld 和 .twld 文件上传到 Worlds 目录
cp /path/to/your/world.wld /opt/terraria-tml/tModLoader/Worlds/
cp /path/to/your/world.twld /opt/terraria-tml/tModLoader/Worlds/
# 2. 修改 serverconfig.txt
cat > /opt/terraria-tml/tModLoader/serverconfig.txt << 'EOF'
world=/tModLoader/Worlds/your_world.wld
maxplayers=8
port=7777
password=your_password_here
motd=欢迎来到灾厄服务器!
language=zh-Hans
npcstream=4
priority=1
EOF
路径规则:
world=必须使用容器内路径/tModLoader/Worlds/xxx.wld,不能使用宿主机路径。
官方配置参考:serverconfig.txt 示例
8. 配置 docker-compose.yml
编辑 docker-compose.yml,设置正确的 UID/GID(与当前 Linux 用户一致):
# 查看当前用户的 UID 和 GID
id
# 输出示例:uid=1000(user) gid=1000(user) groups=1000(user),...
编辑 compose 文件:
nano /opt/terraria-tml/docker-compose.yml
推荐配置:
version: "3.0"
services:
tml:
container_name: tml
restart: unless-stopped
build:
context: .
args:
UID: 1000 # 改为你的 uid
GID: 1000 # 改为你的 gid
# 可选:锁定特定 tModLoader 版本
# TMLVERSION: v2026.06.2.1
ports:
- 7777:7777
tty: true
stdin_open: true
volumes:
- ./tModLoader:/tModLoader
设置数据目录权限(Linux 必须执行):
# 将 UID/GID 替换为你的实际值
sudo chown -R 1000:1000 /opt/terraria-tml/tModLoader
若权限不正确,容器可能无法写入世界存档和模组文件。
9. 构建与启动
首次构建
cd /opt/terraria-tml
# 构建镜像(首次约 5~15 分钟,需下载 tModLoader)
docker compose build
# 后台启动
docker compose up -d
查看启动日志
docker logs -f tml
启动流程说明
容器启动后会依次执行:
- 从 GitHub 安装 tModLoader 服务端
- 读取
install.txt,通过 SteamCMD 下载创意工坊模组 - 加载
enabled.json中启用的模组 - 按
serverconfig.txt创建或加载世界 - 在端口
7777开始监听
成功标志
日志中出现类似以下内容即表示启动成功:
Loading mods...
Server started
Listening on port 7777
首次启动因需下载灾厄等大型模组,可能需要 10~30 分钟,请耐心等待。
按 Ctrl+C 退出日志查看(不会停止容器)。
10. 日常运维
查看容器状态
docker ps
docker compose ps
查看最近日志
docker logs --tail 100 tml
进入服务器控制台
docker attach tml
| 操作 | 按键 |
|---|---|
| 安全退出(不关闭服务器) | Ctrl+P 松开,再按 Ctrl+Q |
| 退出并关闭服务器 | Ctrl+C |
向服务器发送命令
# 发送聊天消息
docker exec -it tml execute "say 服务器将在 10 分钟后维护"
# 手动保存世界
docker exec -it tml execute "save"
# 踢出玩家
docker exec -it tml execute "kick 玩家名"
# 广播公告
docker exec -it tml execute "say 欢迎新玩家!"
命令必须整体用双引号包裹。
停止 / 启动 / 重启
cd /opt/terraria-tml
# 停止
docker compose stop
# 启动
docker compose start
# 重启
docker compose restart
# 停止并删除容器(数据保留在 tModLoader/ 目录)
docker compose down
设置开机自启
docker-compose.yml 中已配置 restart: unless-stopped,Docker 服务启动后容器会自动运行。
确保 Docker 服务开机自启:
sudo systemctl enable docker
sudo systemctl start docker
11. 客户端连接
客户端准备
- 在 Steam 安装 tModLoader(App ID: 1281930)
- 启动 tModLoader,安装并启用与服务器完全一致的模组
- 建议使用与服务器相同的模组包(见第 6 节方式 A)
连接方式
| 场景 | 地址 |
|---|---|
| 服务器本机测试 | 127.0.0.1:7777 |
| 局域网 | 服务器局域网IP:7777 |
| 公网 | 服务器公网IP:7777 |
连接步骤
- tModLoader 主菜单 → 多人游戏
- 选择 通过 IP 加入
- 输入服务器地址和端口
- 输入
serverconfig.txt中设置的密码
模组一致性
客户端与服务器必须满足:
- 启用的模组列表完全一致
- 模组版本兼容(建议都用 Steam 创意工坊最新版)
- tModLoader 版本相近
若提示 Mod mismatch 或无法加入,请检查客户端模组是否与服务器一致。
12. 公网联机与防火墙
云服务器安全组
在云控制台(阿里云、腾讯云、AWS 等)放行:
| 协议 | 端口 | 方向 |
|---|---|---|
| TCP | 7777 | 入站 |
| UDP | 7777 | 入站 |
UFW(Ubuntu)
sudo ufw allow 7777/tcp
sudo ufw allow 7777/udp
sudo ufw reload
sudo ufw status
firewalld(CentOS / RHEL)
sudo firewall-cmd --permanent --add-port=7777/tcp
sudo firewall-cmd --permanent --add-port=7777/udp
sudo firewall-cmd --reload
家庭宽带端口转发
若服务器在家庭网络内,需在路由器中配置端口转发:
- 外部端口:
7777 - 内部 IP:Linux 服务器的局域网 IP
- 内部端口:
7777 - 协议:TCP + UDP
13. 更新与备份
更新 tModLoader 和模组
cd /opt/terraria-tml
# 可选:重新下载最新 Dockerfile
curl -fsSL -o Dockerfile \
"https://raw.githubusercontent.com/tModLoader/tModLoader/1.4.4/patches/tModLoader/Terraria/release_extras/DedicatedServerUtils/Dockerfile"
# 强制重建镜像
docker compose build --no-cache
# 重新启动
docker compose up -d
容器每次启动也会根据 install.txt 重新下载/更新创意工坊模组。
备份世界和配置
# 创建备份目录
mkdir -p ~/terraria-backups
# 备份(含时间戳)
tar czf ~/terraria-backups/terraria-$(date +%Y%m%d-%H%M%S).tar.gz \
-C /opt/terraria-tml tModLoader/Worlds tModLoader/Mods tModLoader/serverconfig.txt
# 查看备份
ls -lh ~/terraria-backups/
恢复备份
# 停止服务器
cd /opt/terraria-tml && docker compose stop
# 解压恢复
tar xzf ~/terraria-backups/terraria-YYYYMMDD-HHMMSS.tar.gz -C /opt/terraria-tml
# 修复权限
sudo chown -R 1000:1000 /opt/terraria-tml/tModLoader
# 重新启动
docker compose up -d
定时自动备份(可选)
# 编辑 crontab
crontab -e
# 每天凌晨 4 点自动备份
0 4 * * * tar czf /home/user/terraria-backups/terraria-$(date +\%Y\%m\%d).tar.gz -C /opt/terraria-tml tModLoader/Worlds tModLoader/Mods tModLoader/serverconfig.txt
14. 故障排查
构建失败
# 查看详细构建日志
docker compose build --progress=plain 2>&1 | tee build.log
# 检查 Docker 服务
sudo systemctl status docker
docker info
常见原因:无法访问 GitHub 或 Steam CDN → 检查网络、配置代理后重试。
权限错误
日志中出现 Permission denied:
# 确认 UID/GID
id
# 修复权限
sudo chown -R $(id -u):$(id -g) /opt/terraria-tml/tModLoader
模组加载失败
日志示例:
ERROR: CalamityModMusic requires CalamityMod, which is not enabled.
处理:
- 检查
enabled.json是否包含所有必需模组 - 确认
install.txt中有对应 Workshop ID - 优先使用第 6 节方式 A 从客户端导出完整模组包
世界路径错误
错误写法:
world=/opt/terraria-tml/tModLoader/Worlds/xxx.wld
正确写法:
world=/tModLoader/Worlds/xxx.wld
客户端无法连接
| 现象 | 可能原因 | 处理方法 |
|---|---|---|
| 连接超时 | 端口未开放 | 检查防火墙、安全组、端口转发 |
| Mod mismatch | 模组不一致 | 对齐客户端与服务器模组列表 |
| 密码错误 | 密码不匹配 | 核对 serverconfig.txt 中的 password |
| 版本不兼容 | tModLoader 版本差异过大 | 更新客户端或锁定服务器 TMLVERSION |
查看容器内部文件
# 进入容器 shell
docker exec -it tml sh
# 查看模组目录
ls -la /tModLoader/Mods/
# 查看世界目录
ls -la /tModLoader/Worlds/
# 退出
exit
完全重置(保留配置,重装容器)
cd /opt/terraria-tml
docker compose down
docker compose build --no-cache
docker compose up -d
完全清除(删除所有数据)
cd /opt/terraria-tml
docker compose down
sudo rm -rf tModLoader/server tModLoader/steamapps
# 注意:这会删除已下载的模组,Worlds/ 中的世界存档会保留
15. 附录:常用 Workshop ID
| Workshop ID | 内部名称 | 模组名称 |
|---|---|---|
| 2824688072 | CalamityMod | 灾厄 Mod |
| 2824688266 | CalamityModMusic | 灾厄音乐(必需) |
| 2816188633 | CalamityModMusicExtra | 灾厄额外音乐(可选) |
| 2669644269 | BossChecklist | Boss 清单 |
| 2619954303 | RecipeBrowser | 配方浏览器 |
| 2908170107 | MagicStorage | 魔法存储 |
| 2565639705 | AlchemistNPCLite | 炼金术士 NPC |
| 2563309347 | BossHealthBars | Boss 血条 |
在 Steam 创意工坊页面 URL 中可找到任意模组的 ID:
https://steamcommunity.com/sharedfiles/filedetails/?id=2824688072
^^^^^^^^^^
Workshop ID
快速部署命令汇总
以下为从零到运行的完整命令(复制执行前请根据实际情况修改密码和 UID/GID):
# 1. 创建目录
sudo mkdir -p /opt/terraria-tml/tModLoader/{Mods,Worlds}
sudo chown -R $USER:$USER /opt/terraria-tml
cd /opt/terraria-tml
# 2. 下载官方文件
curl -fsSL -o Dockerfile \
"https://raw.githubusercontent.com/tModLoader/tModLoader/1.4.4/patches/tModLoader/Terraria/release_extras/DedicatedServerUtils/Dockerfile"
curl -fsSL -o docker-compose.yml \
"https://raw.githubusercontent.com/tModLoader/tModLoader/1.4.4/patches/tModLoader/Terraria/release_extras/DedicatedServerUtils/docker-compose.yml"
# 3. 写入模组配置(最小灾厄)
cat > tModLoader/Mods/install.txt << 'EOF'
2824688072
2824688266
2669644269
2619954303
EOF
cat > tModLoader/Mods/enabled.json << 'EOF'
[
"CalamityMod",
"CalamityModMusic",
"BossChecklist",
"RecipeBrowser"
]
EOF
# 4. 写入服务器配置
cat > tModLoader/serverconfig.txt << 'EOF'
world=/tModLoader/Worlds/CalamityWorld.wld
autocreate=3
worldname=CalamityWorld
seed=CalamityServer2026
difficulty=2
maxplayers=8
port=7777
password=ChangeMe123
motd=欢迎来到灾厄服务器!
language=zh-Hans
npcstream=4
priority=1
EOF
# 5. 设置权限
sudo chown -R $(id -u):$(id -g) tModLoader
# 6. 构建并启动
docker compose build
docker compose up -d
# 7. 查看日志
docker logs -f tml
参考链接
文档版本:1.0 | 基于 tModLoader 1.4.4 DedicatedServerUtils