~ /writing / 02-tml-panel-tmodloader-deploy

# 从零开一个 tModLoader 服务器:tml-panel 一键面板指北

tModLoader · 2026-07-04 · 11 min read

朋友想联机打泰拉瑞亚的模组(tModLoader),我给他们开了个专用服。开着开着发现痛点全在运维上:装 tModLoader 本体要跟 GitHub / Steam 斗智斗勇,装工坊模组得手抄一串数字 ID 还得自己补前置依赖,本体一更新客户端就连不进来,改配置得 SSH 进去手撸 serverconfig.txt……

索性把这套自用的管理面板剥出来开源了:tml-panel —— 仓库 KoishiVI2035/tml-panel(MIT)。一个网页面板搞定:一键装 tModLoader、一键开服、工坊搜模组自动补前置、本体一键升级带失败回滚、世界自动备份、可视化改配置、网页里发游戏命令。界面中英双语。

这篇是纯部署手记,照着抄能跑起来。

它能干什么

先说清楚定位,省得你装完发现不是要的东西:

前置条件

Node 不用你操心——部署脚本在系统没有合适 Node 时会自动下一份隔离版塞进项目目录,不污染系统。

一键部署面板

# 最小系统先补齐 git/curl(RHEL 系换成 dnf install -y git curl)
apt update && apt install -y git curl

git clone https://github.com/KoishiVI2035/tml-panel.git
cd tml-panel
sudo bash deploy/install.sh          # 国际网络
# 国内服务器加 --cn:Node/npm 走国内镜像,面板区域设为 cn(下载自动走加速源)
sudo bash deploy/install.sh --cn

脚本会自动:装隔离版 Node → 装依赖 → 构建前端 → 生成 systemd 单元并启动面板。跑完你会看到一段输出,记下这两样

看到 部署完成 (服务状态: active) 就代表面板装好了。 下面是我在一台干净 Ubuntu 上 --cninstall.sh 的真实输出(末尾 systemctl is-active 返回 active/api/state 返回 200,就是活的):

install.sh --cn 的真实输出:构建完成 → 部署完成(服务 active) → 打印访问地址与 setup token

首次进面板

面板默认只监听 127.0.0.1,这是刻意的安全设计——它以 root 跑、能读写服务器文件,绝不能裸奔在公网。从你自己电脑访问云服务器时,用 SSH 端口转发把它”隧道”过来:

# 在你自己的电脑上执行
ssh -L 8765:127.0.0.1:8765 root@<你的服务器IP>
# 保持这个 ssh 连着,然后本机浏览器打开:
#   http://127.0.0.1:8765

打开后:输入 setup token → 设一个管理员密码(≥8 位)→ 进面板。

首次设置管理员密码:需要输入安装脚本打印的一次性 setup token

一键安装 tModLoader 服务端

第一次进面板、检测到还没装 tModLoader,会直接进安装向导。填几个参数:

安装向导:填世界/难度/端口/密码,勾选 steamcmd 与自动启动,点一键安装

🚀 一键安装,向导会跑一条流水线:环境检查 → 建目录 → 从 GitHub 下载 tModLoader 本体 → 解压 → 生成 serverconfig.txt → 注册 systemd 服务 → 装 steamcmd → 首次启动。全程有进度条。

8 个步骤全部打 ✅、右上角出现「✅ 完成」、底部冒出「进入面板」按钮,就代表 tModLoader 装好、服务器也起来了:

安装向导完成:8 步全绿,末步"首次启动"显示服务器已就绪、端口已监听

装完向导消失,进入正式面板。这时服务器已经在跑了。

让玩家进得来

服务器在监听 7777,但云厂商的安全组 / 防火墙默认不放行。去控制台把游戏端口(默认 7777/TCP)放行,玩家就能用你的公网 IP + 端口在游戏里「加入 IP」进服了。

日常怎么用

进了面板,功能都在顶部几个 tab 里。先看一眼管理台——状态、资源/在线监控、本体升级、世界备份、游戏控制台和实时日志都在这一屏:

管理台:运行状态、监控、本体一键升级、世界备份、控制台与实时日志

具体每个 tab:

可视化配置:世界、难度、端口、密码、模组启用全在一页,不用手撸 serverconfig.txt

添加模组:站内搜工坊、订阅自动补前置、检查更新一键更新,没 Key 也能粘链接或上传 .tmod

国内服务器:—cn 模式

大陆机器直连 GitHub 下 tModLoader 基本是龟速甚至断流。部署时加 --cn,或给面板设 PANEL_REGION=cn,下载会优先走国内 GitHub 加速镜像(gh-proxy 等),Steam API 也会自动降级兼容。

改配置:用 drop-in,别直接改主单元

面板的各种环境变量(数据目录 TMOD_DIR、绑定地址、镜像等)通过 systemd 覆盖来配。systemctl edit 写 drop-in,这样重跑安装脚本升级面板时你的配置不会被覆盖掉:

sudo systemctl edit tml-panel

在打开的编辑器里写(示例):

[Service]
Environment=TMOD_DIR=/data/tmod
Environment=TML_GH_PROXY=https://your-mirror

保存后 sudo systemctl restart tml-panel 生效。常用变量:PANEL_BIND / PANEL_PORT / PANEL_REGION / PANEL_SERVICE / TMOD_DIR / STEAMCMD / TML_GH_PROXY / WORLD_BACKUP_KEEP,完整表在仓库 README。

安全须知(务必看)

默认说明
监听地址127.0.0.1远程管理走 VPN 或 TLS 反代,别绑 0.0.0.0
运行身份root装服务 / 管进程需要;面板密码等同 root,设强密码
首次设密需 setup token防”端口先可达、密码后设置”期间被人抢注管理员
文件管理限制在 TMOD_DIR默认 jail,含符号链接越狱防护

常见问题

首次启动一直转 / 健康检查超时? 首启要下 .NET + 建世界,弱网下可能超 10 分钟。去「管理」页看实时日志确认在推进就行,不用管。

大陆机器 GitHub 下载失败?--cn 部署,或设 PANEL_REGION=cn;还不行就自建镜像设 TML_GH_PROXY

升级面板自己?

cd tml-panel && git pull && sudo bash deploy/install.sh   # --cn 记得带上

幂等的,会重新构建并重启面板,你写在 drop-in 里的配置不受影响。

结尾

代码在 github.com/KoishiVI2035/tml-panel,MIT 随便用。目前的边界是:单实例、裸机 systemd、x86_64;Docker 和多实例还在 roadmap 上。发布前跑了一轮对抗式代码审查修了一批坑,装服 / 升级链路我自己在用,算稳。有问题欢迎去仓库开 issue。

祝开服顺利,模组愉快 🌳

comments — $ leave a signal
cd ~ —— 回到 subterranean