引言

Debian系统以其稳定性、安全性和开源特性,成为搭建游戏服务器的理想选择。无论是为朋友提供小型游戏服务器,还是运营大型游戏社区,Debian都能提供可靠的基础设施支持。本文将详细介绍如何在Debian系统上成功安装和配置游戏服务器,分享实用技巧,并提供常见问题的解决方案,帮助您建立一个稳定运行的游戏平台。

一、准备工作

1. 系统要求评估

在开始安装游戏服务器之前,首先需要评估您的硬件资源是否满足需求。不同游戏对服务器的要求差异很大:

  • Minecraft服务器:最低要求1GB RAM,推荐2-4GB;CPU至少2核心
  • Counter-Strike: Global Offensive:最低要求2GB RAM,推荐4-8GB;CPU至少4核心
  • Valheim服务器:最低要求2GB RAM,推荐4-8GB;CPU至少4核心
  • ARK: Survival Evolved:最低要求4GB RAM,推荐8GB+;CPU至少4核心

2. 系统更新与基础配置

确保您的Debian系统是最新的,并安装必要的软件包:

# 更新系统包列表 sudo apt update # 升级已安装的包 sudo apt upgrade -y # 安装基础工具 sudo apt install -y wget curl screen git unzip htop vim # 安装构建工具(某些游戏服务器需要) sudo apt install -y build-essential 

3. 创建专用用户账户

出于安全考虑,建议为游戏服务器创建专用的用户账户,避免使用root账户运行服务器:

# 创建新用户(以minecraft为例) sudo adduser minecraft # 为新用户添加sudo权限(可选) sudo usermod -aG sudo minecraft # 切换到新用户 su - minecraft 

4. 配置防火墙

Debian默认使用UFW(Uncomplicated Firewall)作为防火墙工具。配置防火墙以允许游戏服务器所需的端口:

# 安装UFW sudo apt install ufw -y # 默认拒绝所有传入连接 sudo ufw default deny incoming # 允许SSH连接(非常重要,否则可能无法远程访问服务器) sudo ufw allow ssh # 允许游戏服务器端口(以Minecraft为例,默认端口25565) sudo ufw allow 25565/tcp # 启用防火墙 sudo ufw enable 

二、安装不同类型的游戏服务器

1. Minecraft服务器

Minecraft是最流行的沙盒游戏之一,搭建其服务器相对简单。

安装Java运行环境

Minecraft服务器需要Java运行环境:

# 安装OpenJDK 17(Minecraft 1.17+推荐) sudo apt install openjdk-17-jre-headless -y # 验证Java安装 java -version 

下载并安装Minecraft服务器

# 创建服务器目录 mkdir ~/minecraft_server cd ~/minecraft_server # 下载Minecraft服务器JAR文件(以1.19.2版本为例) wget https://launcher.mojang.com/v1/objects/c8f83c5655308435b3dcf03c06d9fe8740a77469/server.jar # 首次运行服务器以生成配置文件 java -Xms1G -Xmx2G -jar server.jar nogui # 编辑生成的eula.txt文件,接受EULA echo "eula=true" > eula.txt 

配置Minecraft服务器

编辑server.properties文件以自定义服务器设置:

vim server.properties 

常用配置项说明:

# 服务器基本设置 server-name=My Minecraft Server motd=Welcome to my Minecraft Server! max-players=20 difficulty=normal gamemode=survival # 性能优化 view-distance=10 simulation-distance=6 network-compression-threshold=512 max-tick-time=60000 # 世界设置 spawn-protection=16 pvp=true allow-flight=false 

创建启动脚本

创建一个启动脚本以简化服务器管理:

vim start.sh 

添加以下内容:

#!/bin/bash # 设置Java参数 JAVA_OPTS="-Xms2G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1" # 启动服务器 java $JAVA_OPTS -jar server.jar nogui 

使脚本可执行:

chmod +x start.sh 

使用Screen管理服务器

Screen是一个终端多路复用器,允许您在后台运行服务器:

# 安装Screen(如果尚未安装) sudo apt install screen -y # 创建新的Screen会话 screen -S minecraft # 在Screen会话中启动服务器 ./start.sh # 从Screen会话中分离(按Ctrl+A,然后按D) # 重新连接到Screen会话 screen -r minecraft 

2. Counter-Strike: Global Offensive (CS:GO)服务器

CS:GO是流行的多人第一人称射击游戏,其服务器需要SteamCMD工具进行安装。

安装SteamCMD

# 安装依赖库 sudo apt install lib32gcc1 lib32stdc++6 lib32z1 -y # 创建SteamCMD目录 mkdir ~/steamcmd cd ~/steamcmd # 下载SteamCMD wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz # 解压SteamCMD tar -xvzf steamcmd_linux.tar.gz # 运行SteamCMD进行更新 ./steamcmd.sh 

安装CS:GO服务器

在SteamCMD中输入以下命令:

# 匿名登录Steam login anonymous # 设置安装目录 force_install_dir ~/csgo_server # 安装CS:GO服务器 app_update 740 validate # 退出SteamCMD quit 

配置CS:GO服务器

创建服务器配置文件:

mkdir ~/csgo_server/csgo/cfg vim ~/csgo_server/csgo/cfg/server.cfg 

添加基本配置:

// 服务器名称 hostname "My CS:GO Server" // 密码设置(可选) sv_password "" // 游戏设置 mp_roundtime 5 mp_roundtime_defuse 5 mp_freezetime 5 mp_maxrounds 30 mp_timelimit 0 mp_limitteams 2 mp_autoteambalance 1 // 购买时间 mp_buytime 45 // 起始金钱 mp_startmoney 800 // 玩家设置 mp_friendlyfire 0 mp_tkpunish 1 mp_spawnprotectiontime 5 // 机器人设置 bot_difficulty 1 bot_quota 0 bot_quota_mode fill // 网络设置 sv_minrate 80000 sv_maxrate 128000 sv_minupdaterate 20 sv_maxupdaterate 128 sv_mincmdrate 20 sv_maxcmdrate 128 sv_client_cmdrate_difference 20 sv_client_min_interp_ratio 1 sv_client_max_interp_ratio 2 sv_unlag 1 sv_maxunlag 0.5 sv_lagcompensationforceresume 1 sv_allowupload 1 sv_allowdownload 1 sv_downloadurl "http://your-fast-download-server.com/csgo/" // 记录设置 log on sv_log_onefile 0 sv_logfile 1 sv_logbans 1 sv_logecho 1 

创建启动脚本

创建CS:GO服务器启动脚本:

vim ~/csgo_server/start.sh 

添加以下内容:

#!/bin/bash # 设置服务器参数 SCREEN_NAME="csgo_server" GAME_PATH="/home/username/csgo_server" IP="0.0.0.0" PORT="27015" TICKRATE="128" GAME_TYPE="0" GAME_MODE="1" MAPGROUP="mg_active" MAP="de_dust2" MAXPLAYERS="20" # 使用Screen启动服务器 screen -dmS $SCREEN_NAME $GAME_PATH/srcds_run -game csgo -console -usercon +ip $IP -port $PORT -tickrate $TICKRATE +game_type $GAME_TYPE +game_mode $GAME_MODE +mapgroup $MAPGROUP +map $MAP +maxplayers $MAXPLAYERS echo "CS:GO服务器已在后台启动,使用 'screen -r $SCREEN_NAME' 连接" 

使脚本可执行:

chmod +x ~/csgo_server/start.sh 

3. Valheim服务器

Valheim是一款流行的生存探索游戏,其服务器安装相对简单。

安装Valheim服务器

# 创建服务器目录 mkdir ~/valheim_server cd ~/valheim_server # 下载Valheim服务器安装脚本 wget https://raw.githubusercontent.com/Nimdy/Dedicated_Valheim_Server_Script/main/valheim_server_installer.sh # 使脚本可执行 chmod +x valheim_server_installer.sh # 运行安装脚本 ./valheim_server_installer.sh 

安装脚本会自动安装SteamCMD并下载Valheim服务器文件。

配置Valheim服务器

编辑服务器配置文件:

vim ~/valheim_server/valheim_server.txt 

添加以下内容:

[Public] name=My Valheim Server description=Welcome to my Valheim server! password=yourpassword port=2456 world=dedicated public=1 

创建启动脚本

vim ~/valheim_server/start.sh 

添加以下内容:

#!/bin/bash export DOORSTOP_ENABLE=TRUE export DOORSTOP_INVOKE_DLL_PATH=./BepInEx/core/BepInEx.Preloader.dll export LD_LIBRARY_PATH=./linux64:$LD_LIBRARY_PATH cd /home/username/valheim_server # 使用Screen启动服务器 screen -dmS valheim_server ./valheim_server.x86_64 -name "My Valheim Server" -port 2456 -world "dedicated" -password "yourpassword" -public 1 echo "Valheim服务器已在后台启动,使用 'screen -r valheim_server' 连接" 

使脚本可执行:

chmod +x ~/valheim_server/start.sh 

三、服务器性能优化

1. 系统级优化

内核参数调整

编辑/etc/sysctl.conf文件以优化网络和内存性能:

sudo vim /etc/sysctl.conf 

添加或修改以下参数:

# 网络优化 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.ipv4.tcp_congestion_control = bbr net.core.default_qdisc = fq # 文件描述符限制 fs.file-max = 100000 

应用更改:

sudo sysctl -p 

增加文件描述符限制

编辑/etc/security/limits.conf文件:

sudo vim /etc/security/limits.conf 

添加以下内容:

# 增加文件描述符限制 * soft nofile 100000 * hard nofile 100000 

2. 游戏服务器特定优化

Minecraft服务器优化

  1. 使用Paper服务器:Paper是Spigot的高性能分支,提供了更好的性能和更多的优化选项。
# 下载Paper服务器 cd ~/minecraft_server wget https://papermc.io/api/v2/projects/paper/versions/1.19.2/builds/196/downloads/paper-1.19.2-196.jar # 重命名下载的文件 mv paper-1.19.2-196.jar paper.jar # 使用Paper启动服务器 java -Xms2G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -jar paper.jar nogui 
  1. 安装优化插件:如ClearLag、LagAssist等,可以帮助减少服务器延迟和卡顿。

  2. 调整视距:在server.properties中降低view-distancesimulation-distance可以显著提高性能:

view-distance=8 simulation-distance=6 

CS:GO服务器优化

  1. 提高Tickrate:Tickrate是服务器每秒更新游戏状态的次数,较高的Tickrate提供更流畅的游戏体验,但也需要更多的CPU资源。

在启动脚本中设置较高的Tickrate:

TICKRATE="128" 
  1. 优化网络设置:在server.cfg中调整网络参数:
sv_minrate 80000 sv_maxrate 128000 sv_minupdaterate 20 sv_maxupdaterate 128 sv_mincmdrate 20 sv_maxcmdrate 128 
  1. 使用插件扩展功能:如SourceMod和MetaMod可以提供额外的功能和管理工具。

Valheim服务器优化

  1. 使用BepInEx和优化插件:BepInEx是Valheim的插件框架,可以安装各种优化插件。

  2. 调整服务器保存频率:通过修改start.sh脚本中的参数,可以调整世界保存的频率:

-export -saveinterval 300 
  1. 限制玩家数量:根据服务器硬件能力,适当限制玩家数量。

3. 监控与资源管理

安装监控工具

# 安装htop(交互式进程查看器) sudo apt install htop -y # 安装iotop(磁盘I/O监控) sudo apt install iotop -y # 安装nethogs(网络带宽监控) sudo apt install nethogs -y 

创建监控脚本

创建一个简单的监控脚本,定期记录系统资源使用情况:

vim ~/monitor.sh 

添加以下内容:

#!/bin/bash # 监控脚本目录 MONITOR_DIR="/home/username/monitor" mkdir -p $MONITOR_DIR # 获取当前时间戳 TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S") # 记录CPU使用率 CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *([0-9.]*)%* id.*/1/" | awk '{print 100 - $1}') echo "$TIMESTAMP - CPU Usage: $CPU_USAGE%" >> $MONITOR_DIR/cpu.log # 记录内存使用情况 MEMORY_INFO=$(free -m | awk 'NR==2{printf "%.2f%% (%.2fMB/%.2fMB)", $3*100/$2, $3, $2}') echo "$TIMESTAMP - Memory Usage: $MEMORY_INFO" >> $MONITOR_DIR/memory.log # 记录磁盘使用情况 DISK_INFO=$(df -h | awk '$NF=="/"{printf "%s (%.2f%%)", $3, $5}') echo "$TIMESTAMP - Disk Usage: $DISK_INFO" >> $MONITOR_DIR/disk.log # 记录网络连接数 CONNECTIONS=$(netstat -an | grep ESTABLISHED | wc -l) echo "$TIMESTAMP - Established Connections: $CONNECTIONS" >> $MONITOR_DIR/network.log 

使脚本可执行并设置定期执行:

chmod +x ~/monitor.sh # 编辑crontab crontab -e 

添加以下行以每5分钟运行一次监控脚本:

*/5 * * * * /home/username/monitor.sh 

四、安全与维护

1. 安全加固

定期更新系统

设置自动安全更新:

# 安装unattended-upgrades sudo apt install unattended-upgrades -y # 配置自动更新 sudo dpkg-reconfigure -plow unattended-upgrades 

编辑/etc/apt/apt.conf.d/50unattended-upgrades文件,可以自定义更新设置:

Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}"; "${distro_id}:${distro_codename}-security"; // "${distro_id}:${distro_codename}-updates"; // "${distro_id}:${distro_codename}-proposed"; // "${distro_id}:${distro_codename}-backports"; }; 

配置Fail2Ban防止暴力破解

# 安装Fail2Ban sudo apt install fail2ban -y # 创建本地配置文件 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # 编辑配置文件 sudo vim /etc/fail2ban/jail.local 

配置SSH保护:

[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600 

重启Fail2Ban服务:

sudo systemctl restart fail2ban sudo systemctl enable fail2ban 

限制游戏服务器访问

如果只希望特定玩家访问服务器,可以使用防火墙限制IP访问:

# 允许特定IP访问游戏服务器端口(以Minecraft为例) sudo ufw allow from 192.168.1.100 to any port 25565 sudo ufw allow from 203.0.113.5 to any port 25565 # 拒绝所有其他IP访问游戏服务器端口 sudo ufw deny 25565 

2. 备份与恢复

创建备份脚本

创建一个自动备份游戏服务器数据的脚本:

vim ~/backup.sh 

添加以下内容(以Minecraft为例):

#!/bin/bash # 配置 SERVER_DIR="/home/username/minecraft_server" BACKUP_DIR="/home/username/backups" MAX_BACKUPS=7 DATE=$(date +"%Y-%m-%d_%H-%M-%S") # 创建备份目录 mkdir -p $BACKUP_DIR # 进入服务器目录 cd $SERVER_DIR # 如果服务器正在运行,通知玩家并保存世界 if screen -list | grep -q "minecraft"; then screen -S minecraft -X stuff "say 服务器将在30秒后备份,请做好准备...n" sleep 25 screen -S minecraft -X stuff "say 服务器正在保存世界...n" screen -S minecraft -X stuff "save-alln" sleep 5 fi # 创建备份 tar -czf $BACKUP_DIR/minecraft_backup_$DATE.tar.gz . # 删除旧备份 cd $BACKUP_DIR ls -t minecraft_backup_*.tar.gz | tail -n +$((MAX_BACKUPS + 1)) | xargs rm -f # 如果服务器正在运行,通知玩家备份完成 if screen -list | grep -q "minecraft"; then screen -S minecraft -X stuff "say 服务器备份完成,游戏继续!n" fi echo "备份完成: minecraft_backup_$DATE.tar.gz" 

使脚本可执行并设置定期执行:

chmod +x ~/backup.sh # 编辑crontab crontab -e 

添加以下行以每天凌晨4点运行备份脚本:

0 4 * * * /home/username/backup.sh 

设置远程备份

为了增加数据安全性,可以设置远程备份到另一台服务器或云存储:

# 安装rsync sudo apt install rsync -y # 生成SSH密钥(如果尚未生成) ssh-keygen -t rsa # 将公钥复制到远程服务器 ssh-copy-id user@remote-server.com # 创建远程备份脚本 vim ~/remote_backup.sh 

添加以下内容:

#!/bin/bash # 配置 BACKUP_DIR="/home/username/backups" REMOTE_USER="user" REMOTE_HOST="remote-server.com" REMOTE_DIR="/backups/minecraft" # 获取最新备份 LATEST_BACKUP=$(ls -t $BACKUP_DIR/minecraft_backup_*.tar.gz | head -1) # 同步到远程服务器 rsync -avz --progress $LATEST_BACKUP $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ echo "远程备份完成: $LATEST_BACKUP" 

使脚本可执行:

chmod +x ~/remote_backup.sh 

3. 日志管理

配置日志轮转

游戏服务器可能会生成大量日志文件,使用logrotate可以管理这些日志:

# 创建游戏服务器日志轮转配置文件 sudo vim /etc/logrotate.d/gameserver 

添加以下内容(以Minecraft为例):

/home/username/minecraft_server/logs/*.log { daily missingok rotate 7 compress delaycompress notifempty create 0644 username username postrotate screen -S minecraft -X stuff "say 日志文件已轮转n" endscript } 

设置日志分析

创建一个简单的日志分析脚本,提取重要信息:

vim ~/log_analyzer.sh 

添加以下内容:

#!/bin/bash # 配置 LOG_DIR="/home/username/minecraft_server/logs" ANALYSIS_DIR="/home/username/analysis" TODAY=$(date +"%Y-%m-%d") # 创建分析目录 mkdir -p $ANALYSIS_DIR # 提取今日登录的玩家 cat $LOG_DIR/latest.log | grep "$TODAY" | grep "logged in" | awk '{print $4}' | sort | uniq > $ANALYSIS_DIR/players_$TODAY.log # 提取错误信息 cat $LOG_DIR/latest.log | grep "$TODAY" | grep -i "error|exception|warn" > $ANALYSIS_DIR/errors_$TODAY.log # 提取服务器启动/停止时间 cat $LOG_DIR/latest.log | grep "$TODAY" | grep -E "Starting|Stopping|Done" > $ANALYSIS_DIR/status_$TODAY.log echo "日志分析完成,结果保存在 $ANALYSIS_DIR 目录" 

使脚本可执行并设置定期执行:

chmod +x ~/log_analyzer.sh # 编辑crontab crontab -e 

添加以下行以每天23:50运行日志分析脚本:

50 23 * * * /home/username/log_analyzer.sh 

五、常见问题与解决方案

1. 性能问题

问题:服务器延迟高,玩家卡顿

解决方案

  1. 检查系统资源使用情况
htop 
  1. 优化Java虚拟机参数(针对Minecraft):
# 修改启动脚本中的Java参数 JAVA_OPTS="-Xms2G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1" 
  1. 降低视距和模拟距离(针对Minecraft): 编辑server.properties文件:
view-distance=8 simulation-distance=6 
  1. 使用性能优化插件(针对Minecraft): 如PaperSpigot、Spigot等优化版本的服务器软件。

  2. 检查网络连接

# 测试网络延迟 ping -c 4 google.com # 检查带宽使用情况 nethogs 

问题:服务器内存使用过高

解决方案

  1. 增加虚拟内存
# 创建交换文件 sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 使交换文件永久生效 echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab 
  1. 限制服务器内存使用: 修改启动脚本中的内存参数:
# 限制最大内存使用 java -Xms2G -Xmx4G -jar server.jar nogui 
  1. 优化服务器配置: 减少同时在线玩家数量,降低世界生成复杂度等。

  2. 重启服务器

# 重启服务器以释放内存 sudo reboot 

2. 连接问题

问题:玩家无法连接到服务器

解决方案

  1. 检查服务器状态
# 检查服务器进程是否运行 ps aux | grep java # 检查服务器端口是否监听 netstat -tuln | grep 25565 
  1. 检查防火墙设置
# 检查UFW状态 sudo ufw status # 允许游戏服务器端口 sudo ufw allow 25565/tcp 
  1. 检查端口转发(如果服务器在NAT后面): 在路由器上设置端口转发,将外部端口转发到服务器的内部IP和端口。

  2. 验证服务器配置: 检查服务器配置文件中的IP和端口设置是否正确。

问题:连接超时或频繁断开

解决方案

  1. 检查网络稳定性
# 持续ping测试 ping -c 100 google.com # 检查网络丢包 mtr google.com 
  1. 优化网络设置: 编辑/etc/sysctl.conf文件,添加以下内容:
# 网络优化 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.ipv4.tcp_congestion_control = bbr net.core.default_qdisc = fq 

应用更改:

sudo sysctl -p 
  1. 检查服务器资源使用情况
htop 
  1. 调整服务器超时设置: 在服务器配置文件中增加超时时间。

3. 启动问题

问题:服务器启动失败

解决方案

  1. 检查错误日志
# 查看最新日志 tail -f latest.log # 查看系统日志 journalctl -xe 
  1. 检查文件权限
# 确保服务器文件有正确的权限 chmod +x start.sh chown -R username:username /path/to/server 
  1. 检查依赖项: 确保所有必需的库和依赖项已安装:
# 检查Java版本(针对Minecraft) java -version # 检查SteamCMD(针对CS:GO等) ~/steamcmd/steamcmd.sh +version 
  1. 检查磁盘空间
# 检查磁盘使用情况 df -h 

问题:服务器崩溃或自动关闭

解决方案

  1. 创建自动重启脚本
vim ~/auto_restart.sh 

添加以下内容:

#!/bin/bash # 配置 SCREEN_NAME="minecraft" SERVER_DIR="/home/username/minecraft_server" START_SCRIPT="$SERVER_DIR/start.sh" # 检查服务器是否运行 if ! screen -list | grep -q "$SCREEN_NAME"; then echo "$(date): 服务器未运行,正在启动..." cd $SERVER_DIR screen -dmS $SCREEN_NAME $START_SCRIPT echo "$(date): 服务器已启动" else echo "$(date): 服务器正在运行" fi 

使脚本可执行并设置定期执行:

chmod +x ~/auto_restart.sh # 编辑crontab crontab -e 

添加以下行以每5分钟检查一次服务器状态:

*/5 * * * * /home/username/auto_restart.sh 
  1. 分析崩溃原因: 检查崩溃报告和日志文件,找出导致崩溃的原因。

  2. 更新服务器软件: 确保使用最新版本的服务器软件和插件。

  3. 限制资源使用: 避免服务器因资源耗尽而崩溃。

4. 插件/模组问题

问题:插件或模组不工作

解决方案

  1. 检查兼容性: 确保插件/模组与服务器版本兼容。

  2. 检查安装位置: 确保插件/模组文件放置在正确的目录中。

  3. 检查配置文件: 验证插件/模组的配置文件是否正确设置。

  4. 查看错误日志: 检查服务器日志中与插件/模组相关的错误信息。

  5. 重新安装插件/模组: 有时重新安装可以解决问题。

问题:插件/模组冲突

解决方案

  1. 二分法排查: 禁用一半的插件/模组,测试问题是否仍然存在。如果问题解决,则问题出在另一半中;如果问题仍然存在,则问题出在启用的一半中。重复此过程,直到找出有问题的插件/模组。

  2. 查看依赖关系: 检查插件/模组的依赖关系,确保所有必需的依赖项都已安装。

  3. 查看已知冲突: 查阅插件/模组的文档和论坛,了解已知的冲突问题。

  4. 更新插件/模组: 确保所有插件/模组都是最新版本。

六、高级技巧与最佳实践

1. 使用Docker容器化游戏服务器

Docker可以简化游戏服务器的部署和管理,提供一致的环境和隔离性。

安装Docker

# 更新系统包列表 sudo apt update # 安装依赖 sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - # 添加Docker仓库 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" # 安装Docker sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io -y # 将当前用户添加到docker组 sudo usermod -aG docker $USER # 重新登录以应用组更改 

创建Minecraft服务器Docker容器

创建Dockerfile:

mkdir ~/minecraft-docker cd ~/minecraft-docker vim Dockerfile 

添加以下内容:

FROM openjdk:17-slim # 安装必要工具 RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/* # 创建服务器目录 RUN mkdir -p /minecraft # 设置工作目录 WORKDIR /minecraft # 下载Minecraft服务器 RUN wget -O minecraft_server.jar https://launcher.mojang.com/v1/objects/c8f83c5655308435b3dcf03c06d9fe8740a77469/server.jar # 创建eula.txt RUN echo "eula=true" > eula.txt # 创建server.properties RUN echo "motd=Docker Minecraft Servernmax-players=20ndifficulty=normalngamemode=survivialnview-distance=10" > server.properties # 暴露端口 EXPOSE 25565 # 启动服务器 CMD ["java", "-Xms2G", "-Xmx4G", "-jar", "minecraft_server.jar", "nogui"] 

构建并运行容器:

# 构建镜像 docker build -t minecraft-server . # 运行容器 docker run -d -p 25565:25565 --name minecraft-server minecraft-server # 查看容器日志 docker logs minecraft-server 

使用Docker Compose管理多个游戏服务器

创建docker-compose.yml文件:

vim ~/docker-compose.yml 

添加以下内容:

version: '3' services: minecraft: image: itzg/minecraft-server container_name: minecraft ports: - "25565:25565" environment: EULA: "TRUE" MOTD: "Docker Minecraft Server" MAX_PLAYERS: 20 DIFFICULTY: normal GAMEMODE: survival VIEW_DISTANCE: 10 MEMORY: "4G" volumes: - ./minecraft-data:/data restart: unless-stopped csgo: image: cm2network/csgo container_name: csgo ports: - "27015:27015/tcp" - "27015:27015/udp" environment: - SERVER_HOSTNAME=CS:GO Server - SERVER_PASSWORD=password - RCON_PASSWORD=rcon_password - TICKRATE=128 - MAXPLAYERS=20 - MAP=de_dust2 - MAPGROUP=mg_active - GAME_TYPE=0 - GAME_MODE=1 volumes: - ./csgo-data:/home/steam/csgo-dedicated restart: unless-stopped 

启动服务:

# 启动所有服务 docker-compose up -d # 查看服务状态 docker-compose ps # 查看服务日志 docker-compose logs -f minecraft 

2. 设置Web管理界面

使用Web界面可以更方便地管理游戏服务器,无需通过命令行操作。

安装LinuxGSM

LinuxGSM是一个强大的游戏服务器管理工具,支持多种游戏服务器。

# 安装依赖 sudo dpkg --add-architecture i386 sudo apt update sudo apt install mailutils postfix curl wget file bzip2 gzip unzip bsdmainutils python3 util-linux ca-certificates binutils bc jq tmux lib32gcc1 libstdc++6 lib32stdc++6 steamcmd lib32z1 -y # 下载LinuxGSM wget -O linuxgsm.sh https://linuxgsm.sh && chmod +x linuxgsm.sh && bash linuxgsm.sh mcserver # 安装游戏服务器 ./mcserver install 

安装Pterodactyl面板

Pterodactyl是一个现代化的游戏服务器管理面板,支持多用户和多服务器。

  1. 安装依赖
# 安装依赖 sudo apt update sudo apt install -y software-properties-common curl # 添加PHP仓库 sudo add-apt-repository -y ppa:ondrej/php # 安装PHP和扩展 sudo apt update sudo apt install -y php8.1 php8.1-{cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip} # 安装Nginx sudo apt install -y nginx # 安装MySQL sudo apt install -y mysql-server # 安装其他依赖 sudo apt install -y redis-server supervisor 
  1. 创建数据库
# 登录MySQL sudo mysql # 创建数据库和用户 CREATE DATABASE pterodactyl; CREATE USER 'pterodactyl'@'localhost' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON pterodactyl.* TO 'pterodactyl'@'localhost' WITH GRANT OPTION; EXIT; 
  1. 安装Pterodactyl面板
# 创建目录 mkdir -p /var/www/pterodactyl cd /var/www/pterodactyl # 下载Pterodactyl curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz tar -xzvf panel.tar.gz chmod -R 755 storage/* bootstrap/cache/ # 安装Composer curl -sS https://getcomposer.org/installer | php php composer.phar install --no-dev --optimize-autoloader # 配置环境 cp .env.example .env php artisan key:generate --force # 编辑环境文件 vim .env 

设置数据库连接信息:

APP_URL=http://your-domain.com DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=pterodactyl DB_USERNAME=pterodactyl DB_PASSWORD=your_password 

继续安装:

# 填充数据库 php artisan migrate --seed --force # 创建用户账户 php artisan p:user:make # 设置权限 chown -R www-data:www-data /var/www/pterodactyl 
  1. 配置Nginx: 创建Nginx配置文件:
vim /etc/nginx/sites-available/pterodactyl.conf 

添加以下内容:

server { listen 80; server_name your-domain.com; root /var/www/pterodactyl/public; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param PHP_VALUE "upload_max_filesize = 100M n post_max_size=100M"; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param HTTP_PROXY ""; fastcgi_intercept_errors off; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; } location ~ /.ht { deny all; } } 

启用配置:

# 启用站点 sudo ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/ # 测试配置 sudo nginx -t # 重启Nginx sudo systemctl restart nginx 
  1. 设置计划任务
# 编辑crontab crontab -e 

添加以下行:

* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1 

3. 使用监控工具

安装Zabbix监控

Zabbix是一个强大的企业级监控解决方案,可以监控游戏服务器的各种指标。

  1. 安装Zabbix服务器
# 安装Zabbix仓库 wget https://repo.zabbix.com/zabbix/6.0/debian/pool/main/z/zabbix-release/zabbix-release_6.0-4+debian11_all.deb dpkg -i zabbix-release_6.0-4+debian11_all.deb # 更新系统包列表 apt update # 安装Zabbix服务器、前端和代理 apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent # 创建初始数据库 mysql -uroot -p 

在MySQL中执行:

create database zabbix character set utf8mb4 collate utf8mb4_bin; create user zabbix@localhost identified by 'password'; grant all privileges on zabbix.* to zabbix@localhost; set global log_bin_trust_function_creators = 1; quit; 

继续安装:

# 导入初始架构和数据 zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix # 禁用log_bin_trust_function_creators mysql -uroot -p 

在MySQL中执行:

set global log_bin_trust_function_creators = 0; quit; 

继续安装:

# 配置Zabbix服务器 vim /etc/zabbix/zabbix_server.conf 

设置数据库密码:

DBPassword=password 

继续安装:

# 启动Zabbix服务器和代理 systemctl restart zabbix-server zabbix-agent apache2 systemctl enable zabbix-server zabbix-agent apache2 
  1. 配置Zabbix前端: 访问http://your-server-ip/zabbix,按照向导完成前端配置。

  2. 添加游戏服务器监控: 创建自定义监控项和触发器,监控游戏服务器的CPU、内存、网络使用情况以及特定游戏指标。

使用Prometheus和Grafana监控

Prometheus是一个开源的监控和告警系统,Grafana是一个可视化工具,两者结合可以创建强大的监控仪表板。

  1. 安装Prometheus
# 创建用户和目录 useradd --no-create-home --shell /bin/false prometheus mkdir /etc/prometheus mkdir /var/lib/prometheus chown prometheus:prometheus /etc/prometheus chown prometheus:prometheus /var/lib/prometheus # 下载Prometheus wget https://github.com/prometheus/prometheus/releases/download/v2.36.2/prometheus-2.36.2.linux-amd64.tar.gz tar -xvf prometheus-2.36.2.linux-amd64.tar.gz # 复制二进制文件 cp prometheus-2.36.2.linux-amd64/prometheus /usr/local/bin/ cp prometheus-2.36.2.linux-amd64/promtool /usr/local/bin/ chown prometheus:prometheus /usr/local/bin/prometheus chown prometheus:prometheus /usr/local/bin/promtool # 复制配置文件 cp -r prometheus-2.36.2.linux-amd64/consoles /etc/prometheus cp -r prometheus-2.36.2.linux-amd64/console_libraries /etc/prometheus chown -R prometheus:prometheus /etc/prometheus/consoles chown -R prometheus:prometheus /etc/prometheus/console_libraries # 创建配置文件 vim /etc/prometheus/prometheus.yml 

添加基本配置:

global: scrape_interval: 15s scrape_configs: - job_name: 'prometheus' scrape_interval: 5s static_configs: - targets: ['localhost:9090'] - job_name: 'node_exporter' static_configs: - targets: ['localhost:9100'] 

创建systemd服务:

vim /etc/systemd/system/prometheus.service 

添加以下内容:

[Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/prometheus/console_libraries [Install] WantedBy=multi-user.target 

启动Prometheus:

systemctl daemon-reload systemctl start prometheus systemctl enable prometheus 
  1. 安装Node Exporter
# 创建用户 useradd --no-create-home --shell /bin/false node_exporter # 下载Node Exporter wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz tar -xvf node_exporter-1.3.1.linux-amd64.tar.gz # 复制二进制文件 cp node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin chown node_exporter:node_exporter /usr/local/bin/node_exporter # 创建systemd服务 vim /etc/systemd/system/node_exporter.service 

添加以下内容:

[Unit] Description=Node Exporter Wants=network-online.target After=network-online.target [Service] User=node_exporter Group=node_exporter Type=simple ExecStart=/usr/local/bin/node_exporter [Install] WantedBy=multi-user.target 

启动Node Exporter:

systemctl daemon-reload systemctl start node_exporter systemctl enable node_exporter 
  1. 安装Grafana
# 安装Grafana仓库 wget -q -O - https://packages.grafana.com/gpg.key | apt-key add - echo "deb https://packages.grafana.com/oss/deb stable main" | tee -a /etc/apt/sources.list.d/grafana.list # 更新系统包列表并安装Grafana apt update apt install grafana # 启动Grafana systemctl start grafana-server systemctl enable grafana-server 
  1. 配置Grafana仪表板: 访问http://your-server-ip:3000,使用默认用户名admin和密码admin登录。

添加Prometheus数据源:

  • 导航到Configuration > Data Sources
  • 点击Add data source
  • 选择Prometheus
  • 设置URL为http://localhost:9090
  • 点击Save & Test

导入预定义仪表板:

  • 导航到Dashboards > Import
  • 输入仪表板ID(如1860用于Node Exporter监控)
  • 点击Load
  • 选择Prometheus数据源
  • 点击Import

七、总结与最佳实践

在Debian系统上成功安装和配置游戏服务器需要系统性的规划和执行。以下是一些关键的最佳实践,可以帮助您建立一个稳定、高效的游戏平台:

1. 系统准备

  • 硬件评估:根据游戏类型和预期玩家数量,确保服务器硬件资源充足。
  • 系统更新:始终保持系统最新,定期应用安全补丁。
  • 专用用户:为游戏服务器创建专用用户账户,避免使用root账户运行服务器。
  • 防火墙配置:正确配置防火墙,只开放必要的端口,并限制访问来源。

2. 服务器安装与配置

  • 选择合适的服务器软件:根据游戏类型选择官方服务器软件或优化版本(如Paper用于Minecraft)。
  • 合理分配资源:根据服务器硬件和游戏需求,合理分配CPU、内存和磁盘资源。
  • 优化配置文件:根据服务器硬件和玩家需求,调整服务器配置文件中的参数。
  • 使用启动脚本:创建启动脚本,简化服务器管理,并包含必要的优化参数。

3. 性能优化

  • 系统级优化:调整内核参数,增加文件描述符限制,优化网络设置。
  • 游戏服务器特定优化:根据游戏类型,应用特定的优化技巧,如调整视距、使用优化插件等。
  • 资源监控:定期监控系统资源使用情况,及时发现和解决性能问题。
  • 定期维护:定期重启服务器,清理临时文件,优化数据库等。

4. 安全与备份

  • 安全加固:配置防火墙,使用Fail2Ban防止暴力破解,定期更新系统。
  • 定期备份:设置自动备份策略,包括游戏数据、配置文件和插件。
  • 远程备份:将备份文件存储在远程位置,以防本地服务器故障。
  • 访问控制:限制服务器访问,只允许授权用户和IP地址访问。

5. 故障排除与维护

  • 日志管理:配置日志轮转,定期分析日志,及时发现和解决问题。
  • 自动重启:设置自动重启脚本,确保服务器在崩溃后能自动恢复。
  • 监控告警:配置监控系统,设置告警阈值,及时响应异常情况。
  • 文档记录:记录服务器配置、维护过程和问题解决方案,便于后续参考。

6. 高级技巧

  • 容器化部署:使用Docker容器化游戏服务器,简化部署和管理。
  • Web管理界面:安装Web管理面板,如Pterodactyl,提供直观的管理界面。
  • 监控工具:使用专业的监控工具,如Zabbix或Prometheus+Grafana,全面监控服务器状态。
  • 自动化运维:使用自动化工具,如Ansible,简化服务器配置和管理。

通过遵循这些最佳实践,您可以在Debian系统上建立一个稳定、高效、安全的游戏服务器,为玩家提供优质的游戏体验。记住,游戏服务器的管理是一个持续的过程,需要定期维护和优化,以适应不断变化的需求和技术环境。