当前位置: 首页 > news >正文

DDNet 服务器配置教程 Linux 环境

DDNet 服务器配置教程 Linux 环境

配置之前可以参考一下官方网址给出的内容
官方网址:DDNet官方

环境说明

OS: Debian 11

安装

可以直接从官网下载,也可以使用这个链接:
Linux_DDNet 下载链接
在这里插入图片描述上文中给的链接会因为更新而出现版本落后的情况,读者可以自行去官网下载。

如果你的 Linux 是云主机,可以获取链接,使用以下命令下载:

wget https://ddnet.org/downloads/DDNet-18.7-linux_x86_64.tar.xz

这个链接是与上面官方提供的下载链接一样的,同样可能会版本落后,读者也可以复制官方的链接,以获取最新版本

如果你是一个Linux新手,有些命令则可能会执行错误,应该是你的主机没有对应的命令,你可以在搜索引擎上搜索如何下载这些命令

解压安装

解压,命令行执行:

tar -xf DDNet-18.7-linux_x86_64.tar.xz

解压后得到一个文件夹:
在这里插入图片描述

配置服务器

这是重头戏,因为这个安装包的中并没有自带的配置文件,因此很多适用于windows的教程并不能用于此,但是运行时可以指定配置文件,使用 -f 参数。

首先,进入这个目录:
在这里插入图片描述

有些文件你可能没有(例如serverctl.sh、log),因为这是我后来手动写的…

可以先尝试启动一下服务器:

./DDNet-Server

在这里插入图片描述
以这样的方式启动的服务器只能运行在本地局域网,如果想要让其显示在游戏内列表上,则需要进行额外的配置。

由于这个压缩包并没有官方直接提供的配置文件,我手写了一个:

# 一般选项
# ---------------# 服务器端口(仅端口范围 8303-8310 会在局域网标签中显示,
# 默认为 0,表示自动选择一个空闲端口,范围在 8303-8310 之间)
# sv_port 8303# 服务器名称
sv_name ""# 加入服务器的密码,空字符串表示不需要密码
password ""# 管理员的 rcon (F2) 密码。如果不设置,将生成一个随机密码
# 并显示在服务器窗口中。
sv_rcon_password ""# 版主的 rcon (F2) 密码。如果不设置,则没有密码。
sv_rcon_mod_password ""# 帮助者的 rcon (F2) 密码。如果不设置,则没有密码。
sv_rcon_helper_password ""# 每次地图更换时执行的配置文件
# sv_reset_file "types/novice/flexreset.cfg"# 服务器启动时加载的地图
sv_map "Sunny Side Up"# 是否为测试服务器,并允许使用 rcon cheat。也在服务器类型中指示:
# - "DDraceNetwork" 表示 0(不允许 cheat)
# - "TestDDraceNetwo" 表示 1(允许 cheat)
sv_test_cmds 0# 是否注册服务器(使其公开)
sv_register 0# 高级选项
# ----------------# 服务器日志存储的文件
logfile "DDNet-server-8303.log"# 保存地图记录的文件夹
sv_score_folder "records"# 服务器最大玩家数
sv_max_clients 64# 每个 IP 地址最大玩家数
sv_max_clients_per_ip 4# 比赛模式 - 启用时玩家进入服务器时作为观察者
sv_tournament_mode 0# 玩家是否可以暂停角色并使用 /spec 命令使其消失
sv_pauseable 0# 是否允许玩家使用 /rescue(也可以是 /r)命令将自己传送脱离冻结状态
sv_rescue 1# 两次救援命令之间的时间间隔(单位:秒)
sv_rescue_delay 5# 启用 rcon cheat 后是否显示排名
sv_rank_cheats 0# 服务器定制
# --------------------# 玩家加入时在聊天中显示的欢迎信息
sv_welcome "Welcome on my DDNet server! Running all maps from https://github.com/ddnet/ddnet-maps"# 存放公告的文件(每个公告独占一行)
sv_announcement_filename "announcement.txt"# 下一条公告将在多少分钟后显示(单位:分钟)
sv_announcement_interval 120# 是否按顺序显示公告还是随机显示
sv_announcement_random 1# 玩家加入时显示的每日一条信息(使用 "\n" 来换行)
sv_motd "Testserver with DDraceNetwork Features!\nRunning all maps from https://github.com/ddnet/ddnet-maps"# 是否使用默认的 DDRace 规则
sv_ddrace_rules 1# 自定义规则(最多 10 行)
sv_rules_line1 ""
sv_rules_line2 ""
sv_rules_line3 ""# 每次地图更换后是否重置物理参数
sv_tune_reset 1# 每次地图更换后是否重置 DDRace 参数
sv_ddrace_tune_reset 1# 附加命令权限
# -------------------------------# 你可以通过使用 "access_status" 查看特定认证级别的用户可访问的所有命令
# 格式:access_status [0: admin, 1: moderator, 2: helper, 3: user]
#
# 格式:access_level [command] [0: admin, 1: moderator, 2: helper, 3: user]
# 其中 0 只允许管理员访问,1 允许版主访问,2 允许帮助者访问,3 允许普通用户访问
# 示例:mod_command ban 1# 非默认的命令,版主和帮助者可以访问
access_level left 2
access_level right 2
access_level up 2
access_level down 2
access_level super 2
access_level unsuper 2
access_level tele 2
access_level totele 2
access_level totelecp 2
access_level logout 2
access_level ninja 2
access_level grenade 2
access_level shotgun 2
access_level laser 2
access_level weapons 2
access_level unweapons 2
access_level unlaser 2
access_level unshotgun 2
access_level ungrenade 2
access_level unsolo 2
access_level undeep 2
access_level status 2# 仅版主可以使用的命令
access_level ban 1
access_level unban 1
access_level ban_range 1
access_level unban_range 1
access_level unban_all 1
access_level bans 1
access_level bans_save 1
access_level kick 1
access_level force_vote 1
access_level moderate 1# 特殊广播建议
# ----------------------------------------# 向没有 DDNet 客户端的玩家显示广播
sv_client_suggestion "Get DDNet client from DDNet.org to use all features on DDNet!"# 向使用非常旧版本 DDNet 客户端的玩家显示广播
sv_client_suggestion_old "Your DDNet client is old, update it on DDNet.org!"# 向使用已知有机器人程序的客户端玩家显示广播
sv_client_suggestion_bot "Your client has bots and can be remotely controlled!\nPlease use another client like DDNet client from DDNet.org"

你可以手动复制并粘贴到服务器的配置文件中,我个人比较喜欢的风格是保存到一个文件夹中,例如:

mkdir Configs

创建一个存放配置文件的文件夹。

touch myServerconfig.cfg

创建一个配置文件,当然你也可以命名为别的。
在这里插入图片描述

上面是我自己的服务器配置,因为要同时运行多个房间,因此需要多个配置文件,后面的数字则是端口。

创建好之后将配置文件复制进去即可。

配置文件的一些必要说明

在配置文件中,有几个必须要知道的问题:

  • sv_port: 这个参数是服务器的端口设置最好自己设置,最大是65535,官方默认是8303到8310
  • sv_map: 这个参数是服务器启动时默认地图的设置,一定要自己设置。地图的路径在 data/maps 中填写时不需要填写绝对路径,需要填写 maps 开始的相对路径,并且不需要后缀
  • sv_test_cmds: 很多人开了服务器之后发现自己的模式永远都是TestDDR这是因为你的这个参数没有改为0,但是改为0之后,即是你是admin也无法作弊
  • sv_register: 这个参数 最重要 !!! 关乎到你是否能在游戏列表找到你的服务器!默认参数为 0 即 “ipv4,ipv6” 但是有时候你的电脑并不能同时支持这两种注册方式,因此你可以尝试换成单独的ipv4 或者 ipv6直接修改即可,注意加上英文的冒号
  • sv_max_clients_per_ip: 这个参数不能为1!! 这样的话就不能开分身了

其他的参数和功能可以自行探索。

更多的配置参见: 设置和指令

运行服务器

最后运行服务器即可,需要制定配置文件的位置:

./DDNet-Server -f ./Configs/myServerconfig_8303.cfg

如果你想要让你的服务器一直运行,在终端关闭后也能继续运行,可以使用nohup 命令:

nohup ./DDNet-Server -f ./Configs/myServerconfig_8303.cfg

运行后的结果如下:
在这里插入图片描述在这里插入图片描述

额外的说明(如果你有相关的服务器开发知识)

下面的这些内容是给业内人士看的,对于业余的同学,上面的内容已经够用了!!

日志文件的说明

在配置文件中有两个参数:

  • logfile : 存储服务器日志,具体的路径在~/.local/share/ddnet
  • sv_score_folder : 存储地图数据,路径与上一条相同。

脚本

我额外为服务器的管理写了一个脚本,具有管理和查看服务器进程的功能(目前并不完善),供使用:

#!/bin/bash# var:LOG_DIR="./log"
CONFIG_DIR="./Configs"# function:check_log() {temp_var=8302if [ ! -d "$LOG_DIR" ]; thenmkdir -p "./log"fifor i in $(seq 1 8); doport=$((temp_var + i))log_file="$LOG_DIR/DDNet-server-$port.log"if [[ -f "$log_file" ]]; thenecho "$log_file exists."else echo "$log_file not exists, creating..."touch "$log_file"if [[ -f "$log_file" ]]; thenecho "create done."else echo "Failed to create "$log_file", please resolve manually"exit 1fifidone
}start_server() {temp_var=8302echo "Start server engine..."echo "Total: $1"for i in $(seq 1 $1); doport=$((temp_var + i))echo "running $port ..."log_file="$LOG_DIR/DDNet-server-$port.log"nohup ./DDNet-Server -f "$CONFIG_DIR/myServerconfig_$port.cfg" >> "$log_file" 2>&1 &echo "Server started on port $port with config myServerconfig_$port.cfg"doneunset temp_var
}start_server_logview() {temp_var=8302echo "Start server engine..."echo "Total: $1"for i in $(seq 1 $1); doport=$((temp_var + i))echo "running $port ..."log_file="$LOG_DIR/DDNet-server-$port.log"nohup ./DDNet-Server -f "$CONFIG_DIR/myServerconfig_$port.cfg" | tee -a "$log_file" > /dev/null 2>&1 &echo "Server started on port $port with config myServerconfig_$port.cfg [log view modle]"done
}clear_all_log() {temp_var=8302echo "Start clear..."echo "Total: 8"for i in $(seq 1 8); doport=$((temp_var + i))echo "clearing $port log ..."log_file="$LOG_DIR/DDNet-server-$port.log": > "$log_file"done
}read_target_log() {log_file="$LOG_DIR/DDNet-server-$1.log"cat "$log_file" | less
}# main:
while [[ $# -gt 0 ]]; docase "$1" in-clear_log)if [ -z "$2" ]; thenecho "Error: A value must follow \"-clearlog\""exit 1else if [ $2 -gt 8310 ] || [ $2 -lt 8303 ]; thenecho "Error: The value after \"-clearlog\" must be between in 8303 and 8310 "exit 1elseDDNET_LOG_CLEAR_TAR=$2shift 2fifishift 2;;-clear_all_log)CLEAR_ALL_LOG_FLAG=trueshift;;-check_log)check_logshift;;-help)HELP_FLAG=trueshift;;-log_view)LOGVIEW_FLAG=trueshift;;-nums)if [ -z "$2" ]; thenecho "Error: A value must follow \"-nums\""exit 1else if [ $2 -gt 8 ] || [ $2 -lt 1 ]; thenecho "Error: The value after \"-nums\" must be between 1 and 8 "exit 1elseDDNET_SERVER_NUM=$2shift 2fifi;;-pslist)PSLIST_FLAG=trueshift;;-read_log)if [ -z "$2" ]; thenecho "Error: A value must follow \"-read_log\""exit 1else if [ $2 -gt 8310 ] || [ $2 -lt 8303 ]; thenecho "Error: The value after \"read_log\" must be between 8303 and 8310"exit 1else READ_LOG_TAR=$2shift 2fifi;;-run)RUN_FLAG=trueshift;;-stop_all)STOPALL_FLAG=trueshift;;*)echo "Error: Invalid parameters."exit 1esac
doneif [[ "$HELP_FLAG" == true ]]; thenecho "help:"echo "  -clear_log [target_ID]          清除指定日志 (ID 范围在 8303 - 8310)"echo "  -clear_all_log                  清除所有日志"echo "  -check_log                      检查日志完整性"echo "  -help                           输出帮助信息"echo "  -log_view                       启动时将日志输出在终端的同时保存"echo "  -nums [nums]                    启动服务器的数量"echo "  -pslist                         列出当前正在运行的所有服务器信息"echo "  -read_log [target_ID]           查看指定的服务器日志"echo "  -run                            运行,必须配合 \"-nums\"  选项使用"echo "  -stop_all                       停止所有服务器"
fiif [[ "$PSLIST_FLAG" == true ]]; thenps aux | grep 'DDNet-Server' | less
fiif [[ "$STOPALL_FLAG" == true ]]; thenpkill -f "./DDNet-Server"
fiif [[ "$CLEAR_ALL_LOG_FLAG" == true ]]; thenclear_all_log
fiif [ -n "$READ_LOG_TAR" ]; thenread_target_log $READ_LOG_TAR
fiif [ -n "$DDNET_LOG_CLEAR_TAR" ]; then: > "$LOG_DIR/DDNet-Server-$DDNET_LOG_CLEAR_TAR.log"
fiif [ "$RUN_FLAG" == true ]; thencheck_logif [ -n "$DDNET_SERVER_NUM" ]; thenif [[ "$LOGVIEW_FLAG" == true ]]; thenstart_server_logview $DDNET_SERVER_NUMelsestart_server $DDNET_SERVER_NUMfielse echo "Error: Options \"-run\" and \"-nums\" must be present at the same time."exit 1fi
fi

脚本功能还不够完善,仍在开发中!!!

http://www.lryc.cn/news/487269.html

相关文章:

  • Vue 2 —监视器实现动态切换表单属性值
  • Qt_day10_程序打包(完结)
  • golang通用后台管理系统09(系统操作日志记录)
  • 如何确保爬取的数据准确性和完整性?
  • 【java】JDK安装
  • 科技改变工作方式:群晖NAS安装内网穿透实现个性化办公office文档分享(1)
  • 基于Java Springboot甘肃旅游管理系统
  • 03-axios常用的请求方法、axios错误处理
  • 《天体》游戏配置要求介绍
  • 【企业级分布式系统】 Kafka集群
  • MySQL 中有哪几种锁?
  • kafka中节点如何服役和退役
  • HTML5实现剪刀石头布小游戏(附源码)
  • 集群聊天服务器(3)muduo网络库
  • 解决在Ubuntu 20.04中使用PyCharm时无法输入中文的问题
  • 【jvm】HotSpot中方法区的演进
  • Win10/11 安装使用 Neo4j Community Edition
  • Ubuntu 22.04 上快速搭建 Samba 文件共享服务器
  • JQuery 基础知识学习(详尽版)2024.11.17
  • Spring Validation参数校验
  • 高斯数据库Postgresql死锁和锁表解决方法
  • 【设计模式】模板方法模式 在java中的应用
  • PVE纵览-安装系统卡“Loading Driver”的快速解决方案
  • Lua资料
  • 【C语言】值传递和地址传递
  • PyTorch 中使用自动求导计算梯度
  • Oracle Instant Client 23.5安装配置完整教程
  • 【jvm】方法区的理解
  • ES-针对某个字段去重后-获取某个字段值的所有值
  • 百度 2025届秋招提前批 文心一言大模型算法工程师