环境
Debian11
安装docker
apt update
apt install docker
部署镜像
拉取镜像
docker pull ryshe/terraria
运行容器
创建一个世界
docker run -it -p 7777:7777 --rm -v $HOME/terraria/world:/root/.local/share/Terraria/Worlds ryshe/terraria:latest
这里的 $HOME
指的是你当前所在目录。也可以指定一个想要存放游戏文件的目录。
比如我的目录是/var/lib/docker/volumes/terraria/_data
所以我的命令是
docker run -it -p 7777:7777 --rm -v /var/lib/docker/volumes/terraria/_data/terraria/world:/root/.local/share/Terraria/Worlds ryshe/terraria:latest
执行后会出现服务器的界面
接下来根据提示,创建一个世界。
创建完了。
这个时候先可以退出ssh。
配置Tshock强制开荒
在刚才的$HOME/terraria/world
目录下,找到配置文件config.json
和sscconfig.json
这是tshock的配置文件,可以参考下面我的配置文件进行更改。
对于config.json
。
{
"Settings": {
"ServerPassword": "", // 服务器密码
"ServerPort": 7777, // 服务器端口
"MaxSlots": 8, // 最大玩家槽位
"ReservedSlots": 20, // 预留槽位
"ServerName": "", // 服务器名称
"UseServerName": false, // 使用服务器名称
"LogPath": "tshock/logs", // 日志路径
"DebugLogs": false, // 调试日志
"DisableLoginBeforeJoin": false, // 加入前禁止登录
"IgnoreChestStacksOnLoad": false, // 加载时忽略储物箱叠放
"WorldTileProvider": "default",
"AutoSave": true, // 自动保存
"AnnounceSave": true, // 保存时公告
"ShowBackupAutosaveMessages": true, // 显示备份和自动保存信息
"BackupInterval": 10, // 备份间隔
"BackupKeepFor": 240, // 保留备份时间
"SaveWorldOnCrash": true, // 崩溃时保存世界
"SaveWorldOnLastPlayerExit": true, // 最后一个玩家退出时保存世界
"InvasionMultiplier": 1, // 入侵倍增器
"DefaultMaximumSpawns": 5, // 默认最大生成数量
"DefaultSpawnRate": 600, // 默认生成速率
"InfiniteInvasion": false, // 无限入侵
"PvPMode": "normal", // PvP模式
"SpawnProtection": false, // 出生点保护
"SpawnProtectionRadius": 10, // 出生点保护半径
"RangeChecks": true, // 范围检查
"HardcoreOnly": false, // 仅极限模式
"MediumcoreOnly": false, // 仅中核模式
"SoftcoreOnly": false, // 仅软核模式
"DisableBuild": false, // 禁止建筑
"DisableHardmode": false, // 禁止极限模式
"DisableDungeonGuardian": false, // 禁止地牢守卫者
"DisableClownBombs": false, // 禁止小丑炸弹
"DisableSnowBalls": false, // 禁止雪球
"DisableTombstones": false, // 禁止墓碑
"DisablePrimeBombs": false, // 禁止机械首领炸弹
"ForceTime": "normal", // 强制时间
"DisableInvisPvP": false, // 禁止隐形PvP
"MaxRangeForDisabled": 10, // 禁用的最大范围
"RegionProtectChests": false, // 区域保护储物箱
"RegionProtectGemLocks": false, // 区域保护宝石锁
"IgnoreProjUpdate": false, // 忽略投射物更新
"IgnoreProjKill": false, // 忽略投射物击杀
"AllowCutTilesAndBreakables": false,
"AllowIce": false, // 允许冰
"AllowCrimsonCreep": true, // 允许猩红蔓延
"AllowCorruptionCreep": true, // 允许腐化蔓延
"AllowHallowCreep": true, // 允许神圣蔓延
"StatueSpawn200": 3,
"StatueSpawn600": 6,
"StatueSpawnWorld": 10,
"PreventBannedItemSpawn": true, // 防止被封禁物品生成
"PreventDeadModification": true, // 防止死亡修改
"PreventInvalidPlaceStyle": true, // 防止无效的放置样式
"ForceXmas": false, // 强制圣诞节
"ForceHalloween": false, // 强制万圣节
"AllowAllowedGroupsToSpawnBannedItems": false, // 允许有权限的组生成被封禁物品
"RespawnSeconds": 15, // 重生时间(秒)
"RespawnBossSeconds": 10, // Boss战重生时间(秒)
"AnonymousBossInvasions": true, // 匿名Boss入侵
"MaxHP": 500, // 最大生命值
"MaxMP": 200, // 最大魔力值
"BombExplosionRadius": 5, // 炸弹爆炸半径
"GiveItemsDirectly": false, // 直接给予物品
"DefaultRegistrationGroupName": "default", // 默认注册组名称
"DefaultGuestGroupName": "guest", // 默认访客组名称
"RememberLeavePos": true, // 记住离开位置
"MaximumLoginAttempts": 10, // 最大登录尝试次数
"KickOnMediumcoreDeath": false, // 中核模式死亡踢出
"MediumcoreKickReason": "死亡导致踢出", // 中核模式踢出原因
"BanOnMediumcoreDeath": false, // 中核模式死亡封禁
"MediumcoreBanReason": "死亡导致封禁", // 中核模式封禁原因
"DisableDefaultIPBan": false, // 禁用默认IP封禁
"EnableWhitelist": false, // 启用白名单
"WhitelistKickReason": "您不在白名单中。", // 白名单踢出原因
"ServerFullReason": "服务器已满", // 服务器已满原因
"ServerFullNoReservedReason": "服务器已满。没有预留槽位。", // 服务器已满没有预留槽位原因
"KickOnHardcoreDeath": false, // 极限模式死亡踢出
"HardcoreKickReason": "死亡导致踢出", // 极限模式踢出原因
"BanOnHardcoreDeath": false, // 极限模式死亡封禁
"HardcoreBanReason": "死亡导致封禁", // 极限模式封禁原因
"KickProxyUsers": true, // 踢出代理用户
"RequireLogin": true, // 需要登录
"AllowLoginAnyUsername": true, // 允许任何用户名登录
"AllowRegisterAnyUsername": true, // 允许注册任何用户名
"MinimumPasswordLength": 4, // 最小密码长度
"BCryptWorkFactor": 7, // BCrypt工作因子
"DisableUUIDLogin": false, // 禁用UUID登录
"KickEmptyUUID": false, // 踢出空UUID
"TilePaintThreshold": 15, // 瓷砖绘制阈值
"KickOnTilePaintThresholdBroken": false, // 瓷砖绘制阈值破坏踢出
"MaxDamage": 51175, // 最大伤害
"MaxProjDamage": 51175, // 最大投射物伤害
"KickOnDamageThresholdBroken": false, // 伤害阈值破坏踢出
"TileKillThreshold": 1060, // 瓷砖击杀阈值
"KickOnTileKillThresholdBroken": false, // 瓷砖击杀阈值破坏踢出
"TilePlaceThreshold": 1032, // 瓷砖放置阈值
"KickOnTilePlaceThresholdBroken": false, // 瓷砖放置阈值破坏踢出
"TileLiquidThreshold": 1050, // 瓷砖液体阈值
"KickOnTileLiquidThresholdBroken": false, // 瓷砖液体阈值破坏踢出
"ProjIgnoreShrapnel": true, // 投射物忽略破片
"ProjectileThreshold": 1050, // 投射物阈值
"KickOnProjectileThresholdBroken": false, // 投射物阈值破坏踢出
"HealOtherThreshold": 1050, // 治愈他人阈值
"KickOnHealOtherThresholdBroken": false, // 治愈他人阈值破坏踢出
"SuppressPermissionFailureNotices": false, // 抑制权限失败通知
"DisableModifiedZenith": false, // 禁用修改过的巅峰
"DisableCustomDeathMessages": true, // 禁用自定义死亡消息
"CommandSpecifier": "/", // 命令指示符
"CommandSilentSpecifier": ".", // 静默命令指示符
"DisableSpewLogs": true, // 禁用喷射日志
"DisableSecondUpdateLogs": false, // 禁用第二次更新日志
"SuperAdminChatRGB": [
255,
255,
255
],
"SuperAdminChatPrefix": "(超级管理员) ",
"SuperAdminChatSuffix": "", // 超级管理员聊天前缀和后缀
"EnableGeoIP": false, // 启用地理IP
"DisplayIPToAdmins": false, // 向管理员显示IP
"ChatFormat": "{1}{2}{3}: {4}", // 聊天格式
"ChatAboveHeadsFormat": "{2}", // 头顶聊天格式
"EnableChatAboveHeads": false, // 启用头顶聊天
"BroadcastRGB": [
127,
255,
212
],
"StorageType": "sqlite", // 存储类型
"SqliteDBPath": "tshock.sqlite", // SQLite数据库路径
"MySqlHost": "localhost:3306", // MySQL主机
"MySqlDbName": "", // MySQL数据库名称
"MySqlUsername": "", // MySQL用户名
"MySqlPassword": "", // MySQL密码
"UseSqlLogs": false, // 使用SQL日志
"RevertToTextLogsOnSqlFailures": 10, // SQL失败后返回文本日志
"RestApiEnabled": false, // 启用REST API
"RestApiPort": 7878, // REST API端口
"LogRest": false, // 记录REST请求
"EnableTokenEndpointAuthentication": false, // 启用令牌端点身份验证
"RESTMaximumRequestsPerInterval": 5, // 每个间隔的最大REST请求
"RESTRequestBucketDecreaseIntervalMinutes": 1, // REST请求桶减少间隔(分钟)
"ApplicationRestTokens": {} // 应用REST令牌
}
}
对于sscconfig.json
。
{
"Settings": {
"Enabled": true, // 强制开荒启用
"ServerSideCharacterSave": 15, // 服务器端角色保存
"LogonDiscardThreshold": 250, // 登录丢弃阈值
"StartingHealth": 100, // 初始生命值
"StartingMana": 20, // 初始法力值
"StartingInventory": [ // 初始物品清单
{
"netID": -15, // 物品ID
"prefix": 0, // 前缀
"stack": 1 // 堆叠数量
},
{
"netID": -13, // 物品ID
"prefix": 0, // 前缀
"stack": 1 // 堆叠数量
},
{
"netID": -16, // 物品ID
"prefix": 0, // 前缀
"stack": 1 // 堆叠数量
}
],
"WarnPlayersAboutBypassPermission": true // 警告玩家绕过权限
}
}
启动服务器
docker run -it --rm -p 7777:7777 -v $HOME/terraria/world:/root/.local/share/Terraria/Worlds --name terraria ryshe/terraria:latest
对于我来说是
docker run -it --rm -p 7777:7777 -v /var/lib/docker/volumes/terraria/_data/terraria/world:/root/.local/share/Terraria/Worlds --name terraria ryshe/terraria:latest
选择你作为服务器的世界。根据提示,开启泰拉瑞亚服务器。
现在来到服务器后台了。
管理(此部分较为简陋)
在服务器后台,先给default组加权限。(default组是登录后玩家默认所在的组。)
/group addperm default * !tshock.ignore.ssc
然后可以在服务端开账号。
/user add name passwd default
name是你的名字,也是你的账号。passwd是你的密码。default是你所在组。
管理后关闭移除容器。
后台运行
配置权限后, 将terraria后台运行
docker run -d -p 7777:7777 -v $HOME/terraria/world:/root/.local/share/Terraria/Worlds --name terraria -e WORLD_FILENAME=your.wld ryshe/terraria:latest
对于我来说,是
docker run -d -p 7777:7777 -v /var/lib/docker/volumes/terraria/_data/terraria/world:/root/.local/share/Terraria/Worlds --name terraria -e WORLD_FILENAME=tuguige.wld ryshe/terraria:latest
注册登录
打开游戏,连接你的泰拉瑞亚服务器。如果是搭建在本地。ip是 localhost
端口 7777
如果搭建在服务器,ip是你的服务器ip,端口7777,记得给服务器放行7777端口。
创建一个角色,角色名就是你的账号。
连接上服务器时,打开聊天栏,输/help
获得帮助。
如果没有账号,先注册一个 ,输/register passwd
passwd是你的密码。你的账号是用户名。
然后再/login passwd
。
完成。
后记
对管理部分的参考。