๐ฎ AlmaLinux Game Server Hosting Complete Setup Guide
Ready to create the ultimate gaming server on AlmaLinux? ๐ Whether you want to host Minecraft worlds, run Counter-Strike tournaments, build survival communities, or create your own gaming empire, this comprehensive guide will transform your AlmaLinux system into a high-performance gaming powerhouse! โจ
Game server hosting is incredibly rewarding - youโll build communities, create memorable experiences, and have complete control over your gaming environment! ๐ฏ
๐ค Why Host Game Servers on AlmaLinux?
AlmaLinux provides exceptional advantages for game server hosting! ๐
Essential Benefits:
- โก Superior Performance - Enterprise-grade stability for 24/7 gaming
- ๐ฐ Cost Effective - Host multiple games on one server
- ๐ก๏ธ Rock-Solid Security - Built-in protection against attacks
- ๐ง Complete Control - Customize every aspect of your servers
- ๐ Easy Scaling - Add more servers as your community grows
- ๐ Multiple Game Support - Run different games simultaneously
- ๐ Detailed Monitoring - Track performance and player statistics
- ๐ Automated Management - Scripts for updates and maintenance
- ๐ฏ Low Latency - Optimized network stack for gaming
- ๐ฅ Community Building - Create lasting gaming communities
๐ฏ What You Need Before Starting
Letโs make sure youโre ready for this epic gaming adventure! โ
System Requirements:
- โ AlmaLinux 8 or 9 (fresh installation recommended)
- โ Minimum 8GB RAM (16GB+ for multiple servers)
- โ 100GB+ SSD storage for game files
- โ High-speed internet (100Mbps+ recommended)
- โ Static public IP address
- โ Port forwarding access on router/firewall
- โ Basic server administration knowledge
Hardware Recommendations by Game Type:
- ๐๏ธ Minecraft (10-20 players): 4GB RAM, 4 CPU cores
- ๐ซ Counter-Strike 2 (32 players): 8GB RAM, 6 CPU cores
- ๐ฐ Valheim (10 players): 4GB RAM, 4 CPU cores
- ๐ฆ ARK: Survival (20 players): 12GB RAM, 8 CPU cores
- ๐ค TeamSpeak (100 users): 2GB RAM, 2 CPU cores
What Weโll Set Up:
- โ Multiple game server environments
- โ Automated server management scripts
- โ Performance monitoring and optimization
- โ Security hardening for gaming
- โ Player management and moderation tools
- โ Backup and update automation
๐ Step 1: System Optimization for Gaming
Letโs optimize AlmaLinux for the best gaming performance!
# Update system packages
sudo dnf update -y
# Install essential packages
sudo dnf install -y \
wget \
curl \
unzip \
tar \
screen \
tmux \
htop \
iotop \
net-tools \
firewalld \
java-17-openjdk \
java-17-openjdk-headless \
python3 \
python3-pip \
nodejs \
npm \
git \
rsync \
crontab
Gaming-Specific System Optimizations:
# Optimize kernel parameters for gaming
sudo tee -a /etc/sysctl.conf << 'EOF'
# Gaming server optimizations
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.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
vm.swappiness = 10
kernel.sched_migration_cost_ns = 5000000
EOF
# Apply kernel optimizations
sudo sysctl -p
# Optimize CPU scheduling for real-time gaming
echo 'kernel.sched_rt_runtime_us = 950000' | sudo tee -a /etc/sysctl.conf
Create Gaming User:
# Create dedicated user for game servers
sudo useradd -m -s /bin/bash gameserver
sudo usermod -aG wheel gameserver
# Set up gaming directories
sudo mkdir -p /opt/gameservers/{minecraft,cs2,valheim,ark,teamspeak}
sudo mkdir -p /var/log/gameservers
sudo chown -R gameserver:gameserver /opt/gameservers /var/log/gameservers
# Switch to game server user
sudo su - gameserver
cd /opt/gameservers
๐ง Step 2: Minecraft Server Setup
Minecraft is one of the most popular games to host! Letโs set up a professional server.
# Create Minecraft server directory
mkdir -p /opt/gameservers/minecraft
cd /opt/gameservers/minecraft
# Download Minecraft server (latest version)
wget https://piston-data.mojang.com/v1/objects/84194a2f286ef7c14ed7ce0090dba59902951553/server.jar -O minecraft_server.jar
Configure Minecraft Server:
# Create server.properties configuration
cat > server.properties << 'EOF'
# Minecraft Server Configuration
# Basic Settings
server-port=25565
server-ip=
rcon-port=25575
rcon-password=strong_rcon_password_here
# World Settings
level-name=world
gamemode=survival
difficulty=normal
max-players=20
spawn-protection=16
allow-flight=false
enable-command-block=true
# Performance Settings
view-distance=10
simulation-distance=8
max-tick-time=60000
use-native-transport=true
# Network Settings
online-mode=true
white-list=false
enforce-whitelist=false
enable-rcon=true
broadcast-rcon-to-ops=true
# Chat and MOTD
motd=Welcome to AlmaLinux Minecraft Server!
enable-status=true
broadcast-console-to-ops=true
# Resource Settings
max-world-size=29999984
max-build-height=320
resource-pack=
# PvP and Mechanics
pvp=true
hardcore=false
allow-nether=true
generate-structures=true
EOF
# Accept EULA
echo "eula=true" > eula.txt
# Create startup script with optimized JVM settings
cat > start-minecraft.sh << 'EOF'
#!/bin/bash
# Minecraft Server Startup Script
# JVM Optimization flags for AlmaLinux
JAVA_OPTS="-Xms4G -Xmx8G \
-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"
# Start server
java $JAVA_OPTS -jar minecraft_server.jar nogui
EOF
chmod +x start-minecraft.sh
Create Minecraft Service:
# Create systemd service file
sudo tee /etc/systemd/system/minecraft.service << 'EOF'
[Unit]
Description=Minecraft Server
After=network.target
[Service]
Type=simple
User=gameserver
Group=gameserver
WorkingDirectory=/opt/gameservers/minecraft
ExecStart=/opt/gameservers/minecraft/start-minecraft.sh
Restart=always
RestartSec=10
# Security settings
NoNewPrivileges=true
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
# Enable and start Minecraft server
sudo systemctl enable minecraft
sudo systemctl start minecraft
# Check status
sudo systemctl status minecraft
Minecraft Management Scripts:
# Create server management script
cat > manage-minecraft.sh << 'EOF'
#!/bin/bash
# Minecraft Server Management Script
SERVER_DIR="/opt/gameservers/minecraft"
SERVICE_NAME="minecraft"
case "$1" in
start)
echo "๐ Starting Minecraft server..."
sudo systemctl start $SERVICE_NAME
;;
stop)
echo "โน๏ธ Stopping Minecraft server..."
sudo systemctl stop $SERVICE_NAME
;;
restart)
echo "๐ Restarting Minecraft server..."
sudo systemctl restart $SERVICE_NAME
;;
status)
echo "๐ Minecraft server status:"
sudo systemctl status $SERVICE_NAME
;;
backup)
echo "๐พ Creating backup..."
BACKUP_DIR="/home/gameserver/backups/minecraft-$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
cp -r $SERVER_DIR/world* "$BACKUP_DIR/"
echo "โ
Backup created: $BACKUP_DIR"
;;
update)
echo "โฌ๏ธ Downloading latest Minecraft server..."
cd $SERVER_DIR
sudo systemctl stop $SERVICE_NAME
cp minecraft_server.jar minecraft_server.jar.backup
wget https://piston-data.mojang.com/v1/objects/84194a2f286ef7c14ed7ce0090dba59902951553/server.jar -O minecraft_server.jar
sudo systemctl start $SERVICE_NAME
echo "โ
Server updated!"
;;
console)
echo "๐ฅ๏ธ Connecting to server console (Ctrl+C to exit):"
sudo journalctl -u $SERVICE_NAME -f
;;
*)
echo "Usage: $0 {start|stop|restart|status|backup|update|console}"
echo "Commands:"
echo " start - Start the server"
echo " stop - Stop the server"
echo " restart - Restart the server"
echo " status - Show server status"
echo " backup - Create world backup"
echo " update - Update server jar"
echo " console - View server console"
exit 1
;;
esac
EOF
chmod +x manage-minecraft.sh
๐ Step 3: Counter-Strike 2 Server Setup
Letโs set up a high-performance CS2 server for competitive gaming!
# Install SteamCMD for CS2 server
cd /opt/gameservers/cs2
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
# Create CS2 server installation script
cat > install-cs2.sh << 'EOF'
#!/bin/bash
# Counter-Strike 2 Server Installation
echo "๐ฅ Installing Counter-Strike 2 server..."
# Create server directory
mkdir -p /opt/gameservers/cs2/server
# Install/Update CS2 server via SteamCMD
/opt/gameservers/cs2/steamcmd.sh +force_install_dir /opt/gameservers/cs2/server +login anonymous +app_update 730 +quit
echo "โ
CS2 server installation completed!"
EOF
chmod +x install-cs2.sh
./install-cs2.sh
Configure CS2 Server:
# Create server configuration
mkdir -p /opt/gameservers/cs2/server/game/csgo/cfg
cat > /opt/gameservers/cs2/server/game/csgo/cfg/server.cfg << 'EOF'
// Counter-Strike 2 Server Configuration
// Server Identity
hostname "AlmaLinux CS2 Server"
sv_password ""
rcon_password "strong_rcon_password_here"
// Game Settings
mp_teamcasual_timeout 120
mp_c4timer 35
mp_freezetime 12
mp_roundtime 2
mp_maxrounds 16
mp_restartgame 1
// Network Settings
sv_mincmdrate 64
sv_minrate 196608
sv_maxrate 786432
fps_max 400
sv_maxupdaterate 128
sv_minupdaterate 64
// Security
sv_cheats 0
sv_pure 1
sv_consistency 1
// Logging
log on
sv_logbans 1
sv_logecho 1
sv_logfile 1
sv_log_onefile 0
// Communication
sv_alltalk 0
sv_voiceenable 1
sv_voicecodec vaudio_celt
EOF
# Create startup script
cat > start-cs2.sh << 'EOF'
#!/bin/bash
# CS2 Server Startup Script
SERVER_DIR="/opt/gameservers/cs2/server"
GAME_DIR="$SERVER_DIR/game/bin/linuxsteamrt64"
cd "$GAME_DIR"
# Launch CS2 server
./cs2 -dedicated \
-console \
-usercon \
-port 27015 \
+game_type 0 \
+game_mode 1 \
+mapgroup mg_active \
+map de_dust2 \
+sv_setsteamaccount "YOUR_STEAM_TOKEN_HERE" \
-maxplayers_override 32
EOF
chmod +x start-cs2.sh
CS2 Service Setup:
# Create systemd service
sudo tee /etc/systemd/system/cs2.service << 'EOF'
[Unit]
Description=Counter-Strike 2 Server
After=network.target
[Service]
Type=simple
User=gameserver
Group=gameserver
WorkingDirectory=/opt/gameservers/cs2
ExecStart=/opt/gameservers/cs2/start-cs2.sh
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
# Note: You need to get a Steam Game Server Token from:
# https://steamcommunity.com/dev/managegameservers
echo "โ ๏ธ Remember to get your Steam Game Server Token!"
echo "๐ Visit: https://steamcommunity.com/dev/managegameservers"
โ Step 4: Valheim Server Setup
Valheim is perfect for survival gaming communities! Letโs set it up.
# Create Valheim server directory
mkdir -p /opt/gameservers/valheim
cd /opt/gameservers/valheim
# Install Valheim server
cat > install-valheim.sh << 'EOF'
#!/bin/bash
# Valheim Server Installation
echo "๐ฐ Installing Valheim server..."
# Install via SteamCMD
/opt/gameservers/cs2/steamcmd.sh +force_install_dir /opt/gameservers/valheim/server +login anonymous +app_update 896660 +quit
echo "โ
Valheim server installed!"
EOF
chmod +x install-valheim.sh
./install-valheim.sh
Configure Valheim Server:
# Create server startup script
cat > start-valheim.sh << 'EOF'
#!/bin/bash
# Valheim Server Startup Script
export templdpath=$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=./linux64:$LD_LIBRARY_PATH
export SteamAppId=892970
# Server configuration
SERVER_NAME="AlmaLinux Valheim Server"
SERVER_PASSWORD="your_server_password_here"
WORLD_NAME="AlmaWorld"
SERVER_PORT="2456"
# Start Valheim server
./valheim_server.x86_64 \
-name "$SERVER_NAME" \
-port $SERVER_PORT \
-world "$WORLD_NAME" \
-password "$SERVER_PASSWORD" \
-public 1
export LD_LIBRARY_PATH=$templdpath
EOF
chmod +x start-valheim.sh
# Create systemd service
sudo tee /etc/systemd/system/valheim.service << 'EOF'
[Unit]
Description=Valheim Server
After=network.target
[Service]
Type=simple
User=gameserver
Group=gameserver
WorkingDirectory=/opt/gameservers/valheim/server
ExecStart=/opt/gameservers/valheim/start-valheim.sh
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
๐ฆ Step 5: ARK: Survival Evolved Server Setup
ARK servers require more resources but offer incredible gameplay experiences!
# Create ARK server directory
mkdir -p /opt/gameservers/ark
cd /opt/gameservers/ark
# Install ARK server
cat > install-ark.sh << 'EOF'
#!/bin/bash
# ARK Server Installation
echo "๐ฆ Installing ARK: Survival Evolved server..."
# Install ARK server via SteamCMD
/opt/gameservers/cs2/steamcmd.sh +force_install_dir /opt/gameservers/ark/server +login anonymous +app_update 376030 +quit
echo "โ
ARK server installed!"
EOF
chmod +x install-ark.sh
./install-ark.sh
Configure ARK Server:
# Create ARK configuration files
mkdir -p /opt/gameservers/ark/server/ShooterGame/Saved/Config/LinuxServer
# Game.ini configuration
cat > /opt/gameservers/ark/server/ShooterGame/Saved/Config/LinuxServer/Game.ini << 'EOF'
[/script/shootergame.shootergamemode]
bUseCorpseLocator=True
bDisableStructurePlacementCollision=False
MaxStructuresInRange=10500
bAllowFlyerCarryPvE=True
bPassiveDefensesDamageRiderlessDinos=True
[ServerSettings]
ShowMapPlayerLocation=True
ServerHardcore=False
GlobalVoiceChat=False
ProximityChat=False
NoTributeDownloads=False
AllowThirdPersonPlayer=True
ServerPVE=False
DifficultyOffset=1.0
MaxStructuresInRange=10500
EOF
# GameUserSettings.ini configuration
cat > /opt/gameservers/ark/server/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini << 'EOF'
[ServerSettings]
SessionName=AlmaLinux ARK Server
ServerPassword=your_ark_password_here
ServerAdminPassword=strong_admin_password_here
MaxPlayers=20
DifficultyOffset=1.000000
PlayerDamageMultiplier=1.0
StructureDamageMultiplier=1.0
DinoResistanceMultiplier=1.0
XPMultiplier=2.0
TamingSpeedMultiplier=3.0
HarvestAmountMultiplier=2.0
PlayerCharacterWaterDrainMultiplier=1.0
PlayerCharacterFoodDrainMultiplier=1.0
DinoCharacterFoodDrainMultiplier=1.0
PlayerCharacterStaminaDrainMultiplier=1.0
DinoCharacterStaminaDrainMultiplier=1.0
DinoCharacterHealthRecoveryMultiplier=1.0
PlayerCharacterHealthRecoveryMultiplier=1.0
DinoCountMultiplier=1.0
AllowFlyerCarryPvE=True
TheMaxStructuresInRange=10500
OxygenSwimSpeedStatMultiplier=1.0
StructurePreventResourceRadiusMultiplier=1.0
PvPStructureDecay=False
Banlist=""
EOF
# Create startup script
cat > start-ark.sh << 'EOF'
#!/bin/bash
# ARK Server Startup Script
cd /opt/gameservers/ark/server
# Launch ARK server
./ShooterGameServer \
"TheIsland?listen?SessionName=AlmaLinux ARK Server?ServerPassword=your_password_here?ServerAdminPassword=admin_password_here?Port=7778?QueryPort=27015?MaxPlayers=20" \
-server \
-log
EOF
chmod +x start-ark.sh
# Create systemd service
sudo tee /etc/systemd/system/ark.service << 'EOF'
[Unit]
Description=ARK Survival Evolved Server
After=network.target
[Service]
Type=simple
User=gameserver
Group=gameserver
WorkingDirectory=/opt/gameservers/ark
ExecStart=/opt/gameservers/ark/start-ark.sh
Restart=always
RestartSec=15
LimitNOFILE=100000
[Install]
WantedBy=multi-user.target
EOF
๐ค Step 6: TeamSpeak Server Setup
TeamSpeak provides high-quality voice chat for your gaming community!
# Create TeamSpeak directory
mkdir -p /opt/gameservers/teamspeak
cd /opt/gameservers/teamspeak
# Download TeamSpeak server
wget https://files.teamspeak-services.com/releases/server/3.13.7/teamspeak3-server_linux_amd64-3.13.7.tar.bz2
tar -xjf teamspeak3-server_linux_amd64-3.13.7.tar.bz2
mv teamspeak3-server_linux_amd64/* .
rmdir teamspeak3-server_linux_amd64
Configure TeamSpeak:
# Accept license
touch .ts3server_license_accepted
# Create TeamSpeak configuration
cat > ts3server.ini << 'EOF'
# TeamSpeak 3 Server Configuration
# Default Voice Port
default_voice_port=9987
# Voice IP (empty = listen on all interfaces)
voice_ip=
# File Transfer Port
filetransfer_port=30033
# File Transfer IP
filetransfer_ip=
# Query Port
query_port=10011
# Query IP
query_ip=
# Logfile settings
logpath=logs/
logquerycommands=1
dbplugin=ts3db_sqlite3
dbpluginparameter=
dbsqlpath=sql/
dbsqlcreatepath=create_sqlite/
licensepath=
createdefaultdynamicchannels=1
EOF
# Create startup script
cat > start-teamspeak.sh << 'EOF'
#!/bin/bash
# TeamSpeak Server Startup Script
cd /opt/gameservers/teamspeak
# Start TeamSpeak server
./ts3server_minimal_runscript.sh \
inifile=ts3server.ini \
createinifile=1
EOF
chmod +x start-teamspeak.sh
# Create systemd service
sudo tee /etc/systemd/system/teamspeak.service << 'EOF'
[Unit]
Description=TeamSpeak 3 Server
After=network.target
[Service]
Type=simple
User=gameserver
Group=gameserver
WorkingDirectory=/opt/gameservers/teamspeak
ExecStart=/opt/gameservers/teamspeak/start-teamspeak.sh
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
# Enable and start TeamSpeak
sudo systemctl enable teamspeak
sudo systemctl start teamspeak
echo "๐ค TeamSpeak server started!"
echo "๐ Save the admin token from the logs!"
sudo journalctl -u teamspeak | grep "token="
๐ก๏ธ Step 7: Firewall Configuration for Game Servers
Proper firewall configuration is crucial for security and functionality!
# Configure firewall for all game servers
sudo firewall-cmd --permanent --zone=public --add-port=25565/tcp # Minecraft
sudo firewall-cmd --permanent --zone=public --add-port=25575/tcp # Minecraft RCON
sudo firewall-cmd --permanent --zone=public --add-port=27015/tcp # CS2
sudo firewall-cmd --permanent --zone=public --add-port=27015/udp # CS2
sudo firewall-cmd --permanent --zone=public --add-port=2456/udp # Valheim
sudo firewall-cmd --permanent --zone=public --add-port=2457/udp # Valheim
sudo firewall-cmd --permanent --zone=public --add-port=2458/udp # Valheim
sudo firewall-cmd --permanent --zone=public --add-port=7777/udp # ARK Game
sudo firewall-cmd --permanent --zone=public --add-port=7778/tcp # ARK Game
sudo firewall-cmd --permanent --zone=public --add-port=27015/tcp # ARK Query
sudo firewall-cmd --permanent --zone=public --add-port=9987/udp # TeamSpeak Voice
sudo firewall-cmd --permanent --zone=public --add-port=10011/tcp # TeamSpeak Query
sudo firewall-cmd --permanent --zone=public --add-port=30033/tcp # TeamSpeak File Transfer
# Reload firewall rules
sudo firewall-cmd --reload
# Verify open ports
sudo firewall-cmd --list-all
Advanced Security Rules:
# Create rate limiting for game ports
sudo firewall-cmd --permanent --new-ipset=gameserver_whitelist --type=hash:ip
sudo firewall-cmd --permanent --ipset=gameserver_whitelist --add-entry=127.0.0.1
# Add fail2ban protection for game servers
sudo tee /etc/fail2ban/jail.d/gameservers.conf << 'EOF'
[minecraft-rcon]
enabled = true
port = 25575
filter = minecraft-rcon
logpath = /var/log/gameservers/minecraft.log
maxretry = 3
bantime = 3600
[teamspeak-query]
enabled = true
port = 10011
filter = teamspeak-query
logpath = /opt/gameservers/teamspeak/logs/ts3server_*.log
maxretry = 5
bantime = 1800
EOF
sudo systemctl restart fail2ban
๐ฎ Quick Examples - Game Server Management
Letโs create some practical examples for managing your game servers! ๐
Example 1: Universal Game Server Manager
# Create comprehensive server management script
cat > ~/game-server-manager.sh << 'EOF'
#!/bin/bash
# Universal Game Server Management Script
SERVERS=("minecraft" "cs2" "valheim" "ark" "teamspeak")
LOG_DIR="/var/log/gameservers"
show_status() {
echo "๐ฎ Game Server Status Dashboard"
echo "================================"
for server in "${SERVERS[@]}"; do
if systemctl is-active --quiet $server; then
status="โ
Running"
# Get player count if possible
case $server in
minecraft)
players=$(timeout 5 bash -c 'echo "list" | nc localhost 25575 2>/dev/null | grep -o "players online" | wc -l' || echo "0")
status="$status ($players players)"
;;
teamspeak)
# Simple connection check
if timeout 5 bash -c "</dev/tcp/localhost/9987" 2>/dev/null; then
status="$status (Voice Active)"
fi
;;
esac
else
status="โ Stopped"
fi
printf "%-12s %s\n" "$server:" "$status"
done
echo ""
echo "๐พ System Resources:"
echo "CPU: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)%"
echo "Memory: $(free -h | awk 'NR==2{printf "%.1f%% (%s/%s)\n", $3*100/$2, $3, $2}')"
echo "Disk: $(df -h / | awk 'NR==2{printf "%s (%s free)\n", $5, $4}')"
echo ""
echo "๐ Network Ports:"
netstat -tuln 2>/dev/null | grep -E ":(25565|27015|2456|7777|9987)" | while read line; do
port=$(echo $line | awk '{print $4}' | cut -d':' -f2)
proto=$(echo $line | awk '{print $1}')
echo "Port $port/$proto: Active"
done
}
manage_server() {
local server=$1
local action=$2
case $action in
start)
echo "๐ Starting $server server..."
sudo systemctl start $server
;;
stop)
echo "โน๏ธ Stopping $server server..."
sudo systemctl stop $server
;;
restart)
echo "๐ Restarting $server server..."
sudo systemctl restart $server
;;
status)
sudo systemctl status $server
;;
logs)
echo "๐ Viewing $server logs (Ctrl+C to exit):"
sudo journalctl -u $server -f
;;
*)
echo "โ Unknown action: $action"
return 1
;;
esac
}
backup_servers() {
echo "๐พ Creating backups for all servers..."
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/home/gameserver/backups/$BACKUP_DATE"
mkdir -p "$BACKUP_DIR"
# Backup Minecraft worlds
if [ -d "/opt/gameservers/minecraft/world" ]; then
echo "๐ฆ Backing up Minecraft world..."
tar -czf "$BACKUP_DIR/minecraft-world.tar.gz" -C /opt/gameservers/minecraft world*
fi
# Backup Valheim worlds
if [ -d "/home/gameserver/.config/unity3d/IronGate/Valheim" ]; then
echo "๐ฐ Backing up Valheim worlds..."
tar -czf "$BACKUP_DIR/valheim-worlds.tar.gz" -C /home/gameserver/.config/unity3d/IronGate Valheim/
fi
# Backup ARK saves
if [ -d "/opt/gameservers/ark/server/ShooterGame/Saved" ]; then
echo "๐ฆ Backing up ARK saves..."
tar -czf "$BACKUP_DIR/ark-saves.tar.gz" -C /opt/gameservers/ark/server/ShooterGame Saved/
fi
# Backup TeamSpeak database
if [ -f "/opt/gameservers/teamspeak/ts3server.sqlitedb" ]; then
echo "๐ค Backing up TeamSpeak database..."
cp /opt/gameservers/teamspeak/ts3server.sqlitedb "$BACKUP_DIR/"
fi
echo "โ
Backups completed in: $BACKUP_DIR"
}
update_servers() {
echo "โฌ๏ธ Updating all game servers..."
# Update Minecraft
echo "๐ฆ Updating Minecraft..."
cd /opt/gameservers/minecraft
sudo systemctl stop minecraft
cp minecraft_server.jar minecraft_server.jar.backup
wget -q https://piston-data.mojang.com/v1/objects/84194a2f286ef7c14ed7ce0090dba59902951553/server.jar -O minecraft_server.jar
sudo systemctl start minecraft
# Update Steam-based servers
for game in cs2 valheim ark; do
echo "๐ฎ Updating $game..."
if sudo systemctl is-active --quiet $game; then
sudo systemctl stop $game
# Update via SteamCMD would go here
sudo systemctl start $game
fi
done
echo "โ
All servers updated!"
}
# Main script logic
case "$1" in
status)
show_status
;;
start|stop|restart|logs)
if [ -z "$2" ]; then
echo "Usage: $0 $1 <server_name>"
echo "Available servers: ${SERVERS[*]}"
exit 1
fi
manage_server "$2" "$1"
;;
backup)
backup_servers
;;
update)
update_servers
;;
*)
echo "๐ฎ Game Server Manager"
echo "Usage: $0 {status|start|stop|restart|logs|backup|update} [server_name]"
echo ""
echo "Commands:"
echo " status - Show all server status"
echo " start <server> - Start specific server"
echo " stop <server> - Stop specific server"
echo " restart <server>- Restart specific server"
echo " logs <server> - View server logs"
echo " backup - Backup all server data"
echo " update - Update all servers"
echo ""
echo "Available servers: ${SERVERS[*]}"
exit 1
;;
esac
EOF
chmod +x ~/game-server-manager.sh
Example 2: Player Statistics Dashboard
# Create player statistics monitoring
cat > ~/player-stats.sh << 'EOF'
#!/bin/bash
# Game Server Player Statistics
echo "๐ Player Statistics Dashboard"
echo "=============================="
get_minecraft_stats() {
if systemctl is-active --quiet minecraft; then
echo -e "\n๐ฎ Minecraft Server:"
# Get player list via RCON (requires mcrcon tool)
if command -v mcrcon &> /dev/null; then
PLAYERS=$(mcrcon -H localhost -P 25575 -p strong_rcon_password_here "list" 2>/dev/null | grep -o "players online:" | head -1)
echo "Players: ${PLAYERS:-No data available}"
else
echo "Players: Install mcrcon for detailed stats"
fi
# Check server performance
TICKS=$(sudo journalctl -u minecraft --since "5 minutes ago" | grep "tick" | tail -1 | grep -o "[0-9]*ms" || echo "N/A")
echo "Server TPS: ${TICKS:-Good}"
# Memory usage
MC_PID=$(pgrep -f minecraft_server.jar)
if [ ! -z "$MC_PID" ]; then
MEMORY=$(ps -o rss= -p $MC_PID | awk '{print int($1/1024)"MB"}')
echo "Memory Usage: $MEMORY"
fi
else
echo -e "\n๐ฎ Minecraft Server: โ Offline"
fi
}
get_system_stats() {
echo -e "\n๐ป System Performance:"
# CPU usage per core
echo "CPU Cores:"
mpstat -P ALL 1 1 2>/dev/null | grep -A$(nproc) "Average" | grep -E "CPU|all" | head -2
# Memory breakdown
echo -e "\nMemory Usage:"
free -h | grep -E "Mem|Swap"
# Network statistics
echo -e "\nNetwork Activity:"
ss -tuln | grep -E ":(25565|27015|2456|7777|9987)" | wc -l | xargs echo "Active game connections:"
# Disk I/O
echo -e "\nDisk I/O (last 5min):"
iostat -x 1 1 2>/dev/null | grep -A20 "Device" | tail -10 | head -5
}
get_connection_stats() {
echo -e "\n๐ Connection Statistics:"
# Unique IP connections
UNIQUE_IPS=$(sudo netstat -tn 2>/dev/null | grep -E ":(25565|27015|2456|7777)" | awk '{print $5}' | cut -d: -f1 | sort -u | wc -l)
echo "Unique IP addresses: $UNIQUE_IPS"
# Connection by game
for port in 25565:Minecraft 27015:CS2 2456:Valheim 7777:ARK 9987:TeamSpeak; do
PORT_NUM=${port%:*}
GAME_NAME=${port#*:}
CONNECTIONS=$(sudo netstat -tn 2>/dev/null | grep ":$PORT_NUM " | wc -l)
if [ $CONNECTIONS -gt 0 ]; then
echo "$GAME_NAME connections: $CONNECTIONS"
fi
done
}
get_uptime_stats() {
echo -e "\nโฐ Server Uptime Statistics:"
for server in minecraft cs2 valheim ark teamspeak; do
if systemctl is-enabled $server &>/dev/null; then
UPTIME=$(systemctl show $server --property=ActiveEnterTimestamp --value)
if [ ! -z "$UPTIME" ] && [ "$UPTIME" != "n/a" ]; then
UPTIME_HUMAN=$(systemd-analyze timestamp "$UPTIME" 2>/dev/null | grep "in UTC" | cut -d'(' -f2 | cut -d')' -f1 || echo "Unknown")
STATUS=$(systemctl is-active $server)
echo "$server: $STATUS since $UPTIME_HUMAN"
else
echo "$server: Never started"
fi
fi
done
}
# Generate full report
get_minecraft_stats
get_system_stats
get_connection_stats
get_uptime_stats
echo -e "\nReport generated: $(date)"
echo "๐ Run with 'watch -n 30 ./player-stats.sh' for live monitoring"
EOF
chmod +x ~/player-stats.sh
Example 3: Automated Maintenance System
# Create automated maintenance system
cat > ~/game-maintenance.sh << 'EOF'
#!/bin/bash
# Automated Game Server Maintenance
MAINTENANCE_LOG="/var/log/gameservers/maintenance.log"
mkdir -p $(dirname $MAINTENANCE_LOG)
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a $MAINTENANCE_LOG
}
cleanup_logs() {
log_message "๐งน Starting log cleanup..."
# Clean old system logs
sudo journalctl --vacuum-time=7d
# Clean game server logs older than 30 days
find /var/log/gameservers -name "*.log" -mtime +30 -delete 2>/dev/null
find /opt/gameservers -name "*.log" -mtime +30 -delete 2>/dev/null
# Clean TeamSpeak logs
find /opt/gameservers/teamspeak/logs -name "*.log" -mtime +7 -delete 2>/dev/null
log_message "โ
Log cleanup completed"
}
backup_critical_data() {
log_message "๐พ Starting critical data backup..."
BACKUP_DIR="/home/gameserver/auto-backups/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
# Backup only essential world data (not full server files)
if [ -d "/opt/gameservers/minecraft/world" ]; then
tar -czf "$BACKUP_DIR/minecraft-world-$(date +%H%M).tar.gz" -C /opt/gameservers/minecraft world* 2>/dev/null
log_message "๐ฆ Minecraft world backed up"
fi
# Clean old backups (keep only 7 days)
find /home/gameserver/auto-backups -type d -mtime +7 -exec rm -rf {} + 2>/dev/null
log_message "โ
Backup completed"
}
check_server_health() {
log_message "๐ Checking server health..."
# Check disk space
DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt 85 ]; then
log_message "โ ๏ธ WARNING: Disk usage at ${DISK_USAGE}%"
# Could trigger cleanup or alert here
fi
# Check memory usage
MEMORY_USAGE=$(free | awk 'NR==2{printf "%.0f", $3*100/$2}')
if [ $MEMORY_USAGE -gt 90 ]; then
log_message "โ ๏ธ WARNING: Memory usage at ${MEMORY_USAGE}%"
fi
# Check if critical services are running
CRITICAL_SERVICES=("firewalld" "sshd")
for service in "${CRITICAL_SERVICES[@]}"; do
if ! systemctl is-active --quiet $service; then
log_message "โ CRITICAL: $service is not running"
sudo systemctl start $service
fi
done
log_message "โ
Health check completed"
}
restart_if_needed() {
log_message "๐ Checking if servers need restart..."
# Restart servers if they've been running too long (weekly restart)
for server in minecraft cs2 valheim ark teamspeak; do
if systemctl is-active --quiet $server; then
UPTIME_SECONDS=$(systemctl show $server --property=ActiveEnterTimestamp --value | xargs -I {} date -d {} +%s 2>/dev/null || echo 0)
CURRENT_SECONDS=$(date +%s)
UPTIME_DAYS=$(( (CURRENT_SECONDS - UPTIME_SECONDS) / 86400 ))
if [ $UPTIME_DAYS -gt 7 ]; then
log_message "๐ Restarting $server (uptime: $UPTIME_DAYS days)"
sudo systemctl restart $server
fi
fi
done
log_message "โ
Restart check completed"
}
update_system_packages() {
log_message "๐ฆ Checking for system updates..."
# Check if updates are available
UPDATES_AVAILABLE=$(dnf check-update --quiet | wc -l)
if [ $UPDATES_AVAILABLE -gt 0 ]; then
log_message "โฌ๏ธ Installing $UPDATES_AVAILABLE system updates..."
sudo dnf update -y --exclude=kernel*
log_message "โ
System updates completed"
else
log_message "โ
System is up to date"
fi
}
# Main maintenance routine
case "$1" in
daily)
log_message "๐
Starting daily maintenance..."
cleanup_logs
check_server_health
backup_critical_data
log_message "โ
Daily maintenance completed"
;;
weekly)
log_message "๐
Starting weekly maintenance..."
cleanup_logs
check_server_health
backup_critical_data
restart_if_needed
update_system_packages
log_message "โ
Weekly maintenance completed"
;;
*)
echo "Usage: $0 {daily|weekly}"
echo " daily - Run daily maintenance tasks"
echo " weekly - Run weekly maintenance tasks"
exit 1
;;
esac
EOF
chmod +x ~/game-maintenance.sh
# Set up automated maintenance schedule
(crontab -l 2>/dev/null; echo "0 3 * * * /home/gameserver/game-maintenance.sh daily") | crontab -
(crontab -l 2>/dev/null; echo "0 4 * * 0 /home/gameserver/game-maintenance.sh weekly") | crontab -
echo "โฐ Automated maintenance scheduled!"
๐จ Fix Common Game Server Problems
Even gaming experts face challenges! Here are solutions to common issues: ๐ช
Problem 1: Server Performance Issues / Lag
# Symptoms: High latency, stuttering, low FPS on servers
# Solution: System optimization and resource management
# Check current resource usage
htop
iotop
nethogs
# Optimize Java for Minecraft (adjust memory as needed)
# Edit /opt/gameservers/minecraft/start-minecraft.sh
cat > /opt/gameservers/minecraft/start-minecraft.sh << 'EOF'
#!/bin/bash
# Optimized Minecraft startup with better GC
JAVA_OPTS="-Xms8G -Xmx8G \
-XX:+UseG1GC \
-XX:+ParallelRefProcEnabled \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+DisableExplicitGC \
-XX:+AlwaysPreTouch \
-XX:G1NewSizePercent=40 \
-XX:G1MaxNewSizePercent=50 \
-XX:G1HeapRegionSize=16M \
-XX:G1ReservePercent=15 \
-XX:InitiatingHeapOccupancyPercent=20 \
-XX:SurvivorRatio=32 \
-XX:+PerfDisableSharedMem \
-XX:MaxTenuringThreshold=1 \
-Dusing.aikars.flags=https://mcflags.emc.gs"
java $JAVA_OPTS -jar minecraft_server.jar nogui
EOF
# Set CPU governor to performance
sudo cpupower frequency-set -g performance
# Increase network buffer sizes
echo 'net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# Restart affected servers
sudo systemctl restart minecraft
Problem 2: Connection Timeouts and Disconnections
# Symptoms: Players frequently disconnect or cannot connect
# Solution: Network and firewall configuration
# Check if ports are properly open
nmap -p 25565,27015,2456,7777,9987 localhost
# Test external connectivity
nmap -p 25565 YOUR_PUBLIC_IP
# Check firewall rules
sudo firewall-cmd --list-all
# Verify services are listening on correct interfaces
sudo netstat -tlnp | grep -E "(25565|27015|2456|7777|9987)"
# Increase connection limits
echo "net.core.somaxconn = 65536
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_syn_backlog = 65536
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 3" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# Check for ISP port blocking (common with port 25565)
telnet YOUR_PUBLIC_IP 25565
Problem 3: High Memory Usage / Out of Memory Crashes
# Symptoms: Servers crash with out of memory errors
# Solution: Memory optimization and management
# Check current memory usage
free -h
sudo ps aux --sort=-%mem | head -20
# Add swap space if needed
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# Set appropriate Java heap sizes (don't use all RAM!)
# For 16GB system example:
# Minecraft: -Xms6G -Xmx6G (leave room for OS and other services)
# Monitor memory usage
cat > ~/memory-monitor.sh << 'EOF'
#!/bin/bash
while true; do
clear
echo "Memory Usage by Game Servers:"
echo "============================"
for game in minecraft cs2 valheim ark teamspeak; do
PID=$(pgrep -f $game | head -1)
if [ ! -z "$PID" ]; then
MEMORY=$(ps -o rss= -p $PID | awk '{print int($1/1024)"MB"}')
echo "$game: $MEMORY"
fi
done
echo ""
free -h
sleep 5
done
EOF
chmod +x ~/memory-monitor.sh
# Set up memory pressure alerts
echo '#!/bin/bash
MEMORY_USAGE=$(free | awk "NR==2{printf \"%.0f\", \$3*100/\$2}")
if [ $MEMORY_USAGE -gt 90 ]; then
echo "High memory usage: ${MEMORY_USAGE}%" | mail -s "Server Alert" [email protected]
fi' | sudo tee /usr/local/bin/memory-check.sh
sudo chmod +x /usr/local/bin/memory-check.sh
(crontab -l; echo "*/5 * * * * /usr/local/bin/memory-check.sh") | crontab -
Problem 4: Game Server Wonโt Start or Crashes
# Symptoms: Services fail to start or crash immediately
# Solution: Configuration and permission fixes
# Check service status and logs
sudo systemctl status minecraft
sudo journalctl -u minecraft -n 50
# Common fixes for each game type:
# Minecraft fixes:
# Check Java version
java -version
# Verify server.jar integrity
cd /opt/gameservers/minecraft
java -jar minecraft_server.jar --version
# Check file permissions
sudo chown -R gameserver:gameserver /opt/gameservers/minecraft
chmod +x start-minecraft.sh
# CS2 fixes:
# Verify Steam token (required for CS2)
echo "โ ๏ธ CS2 requires Steam Game Server Token"
echo "Get it from: https://steamcommunity.com/dev/managegameservers"
# Update server files
cd /opt/gameservers/cs2
./steamcmd.sh +force_install_dir /opt/gameservers/cs2/server +login anonymous +app_update 730 validate +quit
# ARK fixes:
# Check for missing dependencies
sudo dnf install -y glibc.i686 libstdc++.i686
# Valheim fixes:
# Set correct library path
export LD_LIBRARY_PATH="/opt/gameservers/valheim/server/linux64:$LD_LIBRARY_PATH"
# General debugging:
# Enable debug logging
sudo systemctl edit minecraft --full
# Add: Environment="DEBUG=1"
# Test manual startup
sudo su - gameserver
cd /opt/gameservers/minecraft
./start-minecraft.sh
Problem 5: Save Data Corruption / Loss
# Symptoms: Worlds reset, player progress lost
# Solution: Backup and recovery procedures
# Immediate world backup
BACKUP_DIR="/home/gameserver/emergency-backup-$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
# Backup all game worlds
cp -r /opt/gameservers/minecraft/world* "$BACKUP_DIR/" 2>/dev/null
cp -r /home/gameserver/.config/unity3d/IronGate/Valheim "$BACKUP_DIR/" 2>/dev/null
cp -r /opt/gameservers/ark/server/ShooterGame/Saved "$BACKUP_DIR/" 2>/dev/null
echo "โ
Emergency backup created: $BACKUP_DIR"
# Set up automated backups with rotation
cat > ~/world-backup.sh << 'EOF'
#!/bin/bash
# Automated world backup with rotation
BACKUP_ROOT="/home/gameserver/world-backups"
KEEP_DAYS=14
# Create dated backup directory
BACKUP_DIR="$BACKUP_ROOT/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
# Backup Minecraft worlds
if [ -d "/opt/gameservers/minecraft/world" ]; then
echo "๐ฆ Backing up Minecraft worlds..."
tar -czf "$BACKUP_DIR/minecraft-worlds.tar.gz" -C /opt/gameservers/minecraft world*
fi
# Backup Valheim worlds
VALHEIM_SAVES="/home/gameserver/.config/unity3d/IronGate/Valheim"
if [ -d "$VALHEIM_SAVES" ]; then
echo "๐ฐ Backing up Valheim worlds..."
tar -czf "$BACKUP_DIR/valheim-worlds.tar.gz" -C "$(dirname "$VALHEIM_SAVES")" Valheim/
fi
# Backup ARK saves
ARK_SAVES="/opt/gameservers/ark/server/ShooterGame/Saved"
if [ -d "$ARK_SAVES" ]; then
echo "๐ฆ Backing up ARK saves..."
tar -czf "$BACKUP_DIR/ark-saves.tar.gz" -C "$(dirname "$ARK_SAVES")" Saved/
fi
# Clean old backups
find "$BACKUP_ROOT" -type d -mtime +$KEEP_DAYS -exec rm -rf {} + 2>/dev/null
echo "โ
Backup completed: $BACKUP_DIR"
echo "๐ Total backups: $(ls -1 "$BACKUP_ROOT" | wc -l)"
EOF
chmod +x ~/world-backup.sh
# Schedule regular backups (every 6 hours)
(crontab -l; echo "0 */6 * * * /home/gameserver/world-backup.sh") | crontab -
# World restoration script
cat > ~/restore-world.sh << 'EOF'
#!/bin/bash
# World restoration script
if [ $# -ne 2 ]; then
echo "Usage: $0 <game> <backup_file>"
echo "Games: minecraft, valheim, ark"
echo "Example: $0 minecraft /path/to/backup.tar.gz"
exit 1
fi
GAME=$1
BACKUP_FILE=$2
if [ ! -f "$BACKUP_FILE" ]; then
echo "โ Backup file not found: $BACKUP_FILE"
exit 1
fi
echo "โ ๏ธ This will overwrite current $GAME world data!"
read -p "Continue? (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
# Stop the game server
sudo systemctl stop $GAME
case $GAME in
minecraft)
echo "๐ฆ Restoring Minecraft worlds..."
rm -rf /opt/gameservers/minecraft/world*
tar -xzf "$BACKUP_FILE" -C /opt/gameservers/minecraft/
sudo chown -R gameserver:gameserver /opt/gameservers/minecraft/world*
;;
valheim)
echo "๐ฐ Restoring Valheim worlds..."
rm -rf /home/gameserver/.config/unity3d/IronGate/Valheim
mkdir -p /home/gameserver/.config/unity3d/IronGate
tar -xzf "$BACKUP_FILE" -C /home/gameserver/.config/unity3d/IronGate/
;;
ark)
echo "๐ฆ Restoring ARK saves..."
rm -rf /opt/gameservers/ark/server/ShooterGame/Saved
mkdir -p /opt/gameservers/ark/server/ShooterGame
tar -xzf "$BACKUP_FILE" -C /opt/gameservers/ark/server/ShooterGame/
;;
*)
echo "โ Unknown game: $GAME"
exit 1
;;
esac
# Restart the game server
sudo systemctl start $GAME
echo "โ
World restoration completed!"
EOF
chmod +x ~/restore-world.sh
๐ Game Server Commands Summary
Hereโs your quick reference for game server operations! โก
Task | Command | Description |
---|---|---|
Server Status | ~/game-server-manager.sh status | View all server status |
Start Server | sudo systemctl start minecraft | Start specific game server |
View Logs | sudo journalctl -u minecraft -f | Monitor server logs live |
Player Count | mcrcon -p password "list" | Check online players (MC) |
Backup Worlds | ~/world-backup.sh | Create world backups |
Server Stats | ~/player-stats.sh | View detailed statistics |
Restart All | sudo systemctl restart minecraft cs2 valheim | Restart multiple servers |
Update Servers | ~/game-server-manager.sh update | Update all game servers |
Check Ports | sudo netstat -tlnp | grep PORT | Verify port listening |
Memory Usage | sudo ps aux --sort=-%mem | Check memory usage |
Resource Monitor | htop | Real-time resource monitoring |
Network Test | nmap -p 25565 localhost | Test port connectivity |
๐ก Pro Tips for Gaming Excellence
Want to become a game server hosting ninja? Here are expert secrets! ๐ฅท
Tip 1: Performance Monitoring Dashboard
# Create real-time performance dashboard
cat > ~/gaming-dashboard.sh << 'EOF'
#!/bin/bash
# Real-time Gaming Server Dashboard
while true; do
clear
echo "๐ฎ Gaming Server Performance Dashboard"
echo "======================================"
# System overview
echo -e "\n๐ป System Overview:"
uptime
echo "CPU Cores: $(nproc) | Load: $(uptime | awk -F'load average:' '{print $2}')"
free -h | head -2
# Game server status
echo -e "\n๐ฏ Game Servers:"
for server in minecraft cs2 valheim ark teamspeak; do
if systemctl is-active --quiet $server; then
PID=$(pgrep -f $server | head -1)
if [ ! -z "$PID" ]; then
CPU=$(ps -o pcpu= -p $PID | awk '{print $1"%"}')
MEM=$(ps -o rss= -p $PID | awk '{print int($1/1024)"MB"}')
printf "%-12s โ
Running | CPU: %-6s | RAM: %-8s\n" "$server:" "$CPU" "$MEM"
fi
else
printf "%-12s โ Stopped\n" "$server:"
fi
done
# Network connections
echo -e "\n๐ Active Connections:"
ss -tuln | grep -E ":(25565|27015|2456|7777|9987)" | while read line; do
port=$(echo $line | awk '{print $5}' | cut -d':' -f2)
count=$(ss -tn | grep ":$port " | wc -l)
case $port in
25565) echo "Minecraft: $count connections" ;;
27015) echo "CS2: $count connections" ;;
2456) echo "Valheim: $count connections" ;;
7777) echo "ARK: $count connections" ;;
9987) echo "TeamSpeak: $count connections" ;;
esac
done
# Storage status
echo -e "\n๐พ Storage:"
df -h | grep -E "/$|/opt|/home" | while read line; do
echo "$line"
done
echo -e "\n๐ Refreshing in 5 seconds... (Ctrl+C to exit)"
sleep 5
done
EOF
chmod +x ~/gaming-dashboard.sh
# Usage: ./gaming-dashboard.sh
Tip 2: Advanced Player Management System
# Create comprehensive player management system
cat > ~/player-management.sh << 'EOF'
#!/bin/bash
# Advanced Player Management System
MINECRAFT_RCON_PASS="strong_rcon_password_here"
MINECRAFT_RCON_PORT="25575"
minecraft_command() {
if command -v mcrcon &> /dev/null; then
mcrcon -H localhost -P $MINECRAFT_RCON_PORT -p $MINECRAFT_RCON_PASS "$1"
else
echo "โ mcrcon not installed. Install with: dnf install mcrcon"
fi
}
list_online_players() {
echo "๐ฅ Online Players:"
echo "=================="
# Minecraft players
if systemctl is-active --quiet minecraft; then
echo -e "\n๐ฎ Minecraft Server:"
minecraft_command "list"
fi
# TeamSpeak users (if ts3 client query tools available)
if systemctl is-active --quiet teamspeak; then
echo -e "\n๐ค TeamSpeak Server:"
# Would need telnet/nc to query TeamSpeak server
CONNECTIONS=$(ss -tn | grep ":9987 " | wc -l)
echo "Voice connections: $CONNECTIONS"
fi
}
ban_player() {
local player=$1
local reason=${2:-"Violation of server rules"}
echo "๐ซ Banning player: $player"
echo "Reason: $reason"
# Ban from Minecraft
if systemctl is-active --quiet minecraft; then
minecraft_command "ban $player $reason"
echo "โ
Banned $player from Minecraft"
fi
# Log the ban
echo "$(date): Banned $player - $reason" >> /var/log/gameservers/bans.log
}
unban_player() {
local player=$1
echo "โ
Unbanning player: $player"
# Unban from Minecraft
if systemctl is-active --quiet minecraft; then
minecraft_command "pardon $player"
echo "โ
Unbanned $player from Minecraft"
fi
# Log the unban
echo "$(date): Unbanned $player" >> /var/log/gameservers/bans.log
}
kick_player() {
local player=$1
local reason=${2:-"Kicked by administrator"}
echo "๐ข Kicking player: $player"
# Kick from Minecraft
if systemctl is-active --quiet minecraft; then
minecraft_command "kick $player $reason"
echo "โ
Kicked $player from Minecraft"
fi
}
whitelist_player() {
local player=$1
echo "โ
Adding $player to whitelist"
# Add to Minecraft whitelist
if systemctl is-active --quiet minecraft; then
minecraft_command "whitelist add $player"
minecraft_command "whitelist on"
echo "โ
Added $player to Minecraft whitelist"
fi
}
broadcast_message() {
local message="$1"
echo "๐ข Broadcasting: $message"
# Broadcast to Minecraft
if systemctl is-active --quiet minecraft; then
minecraft_command "say $message"
echo "โ
Message broadcast to Minecraft"
fi
}
player_statistics() {
echo "๐ Player Statistics:"
echo "===================="
# Minecraft stats
if [ -f "/opt/gameservers/minecraft/logs/latest.log" ]; then
echo -e "\n๐ฎ Minecraft Activity (Today):"
grep "$(date +%Y-%m-%d)" /opt/gameservers/minecraft/logs/latest.log | grep -E "joined|left" | tail -10
fi
# Ban list
if [ -f "/var/log/gameservers/bans.log" ]; then
echo -e "\n๐ซ Recent Bans:"
tail -5 /var/log/gameservers/bans.log
fi
}
# Main menu
case "$1" in
list)
list_online_players
;;
ban)
if [ -z "$2" ]; then
echo "Usage: $0 ban <player> [reason]"
exit 1
fi
ban_player "$2" "$3"
;;
unban)
if [ -z "$2" ]; then
echo "Usage: $0 unban <player>"
exit 1
fi
unban_player "$2"
;;
kick)
if [ -z "$2" ]; then
echo "Usage: $0 kick <player> [reason]"
exit 1
fi
kick_player "$2" "$3"
;;
whitelist)
if [ -z "$2" ]; then
echo "Usage: $0 whitelist <player>"
exit 1
fi
whitelist_player "$2"
;;
broadcast)
if [ -z "$2" ]; then
echo "Usage: $0 broadcast <message>"
exit 1
fi
broadcast_message "$2"
;;
stats)
player_statistics
;;
*)
echo "๐ฎ Player Management System"
echo "Usage: $0 {list|ban|unban|kick|whitelist|broadcast|stats}"
echo ""
echo "Commands:"
echo " list - Show online players"
echo " ban <player> [reason] - Ban a player"
echo " unban <player> - Unban a player"
echo " kick <player> [reason] - Kick a player"
echo " whitelist <player> - Add to whitelist"
echo " broadcast <message> - Send message to all"
echo " stats - Show player statistics"
exit 1
;;
esac
EOF
chmod +x ~/player-management.sh
Tip 3: Automated Server Optimization
# Create intelligent server optimization system
cat > ~/optimize-gaming.sh << 'EOF'
#!/bin/bash
# Intelligent Gaming Server Optimization
OPTIMIZATION_LOG="/var/log/gameservers/optimization.log"
log_optimization() {
echo "$(date): $1" | tee -a $OPTIMIZATION_LOG
}
optimize_java_servers() {
log_optimization "๐ Optimizing Java-based servers..."
# Dynamic memory allocation based on available RAM
TOTAL_RAM=$(free -m | awk 'NR==2{print $2}')
if [ $TOTAL_RAM -gt 16000 ]; then
MINECRAFT_RAM="8G"
elif [ $TOTAL_RAM -gt 8000 ]; then
MINECRAFT_RAM="6G"
elif [ $TOTAL_RAM -gt 4000 ]; then
MINECRAFT_RAM="3G"
else
MINECRAFT_RAM="2G"
fi
# Update Minecraft startup script with optimized settings
cat > /opt/gameservers/minecraft/start-minecraft.sh << EOF
#!/bin/bash
# Auto-optimized Minecraft server startup
JAVA_OPTS="-Xms${MINECRAFT_RAM} -Xmx${MINECRAFT_RAM} \\
-XX:+UseG1GC \\
-XX:+ParallelRefProcEnabled \\
-XX:MaxGCPauseMillis=200 \\
-XX:+UnlockExperimentalVMOptions \\
-XX:+DisableExplicitGC \\
-XX:+AlwaysPreTouch \\
-XX:G1NewSizePercent=40 \\
-XX:G1MaxNewSizePercent=50 \\
-XX:G1HeapRegionSize=16M \\
-XX:G1ReservePercent=15 \\
-XX:InitiatingHeapOccupancyPercent=20 \\
-XX:SurvivorRatio=32 \\
-XX:+PerfDisableSharedMem \\
-XX:MaxTenuringThreshold=1"
java \$JAVA_OPTS -jar minecraft_server.jar nogui
EOF
chmod +x /opt/gameservers/minecraft/start-minecraft.sh
log_optimization "โ
Minecraft optimized with ${MINECRAFT_RAM} RAM allocation"
}
optimize_system_settings() {
log_optimization "โ๏ธ Optimizing system settings..."
# CPU governor
if [ -f /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor ]; then
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
log_optimization "โ
CPU governor set to performance"
fi
# I/O scheduler optimization for gaming
for disk in $(lsblk -d -o name --noheadings); do
if [ -f /sys/block/$disk/queue/scheduler ]; then
echo mq-deadline | sudo tee /sys/block/$disk/queue/scheduler
fi
done
log_optimization "โ
I/O scheduler optimized"
# Network optimizations
cat >> /etc/sysctl.conf << SYSCTL_EOF
# Gaming optimizations
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.core.netdev_max_backlog = 5000
net.core.somaxconn = 1024
vm.swappiness = 10
kernel.sched_migration_cost_ns = 5000000
SYSCTL_EOF
sysctl -p
log_optimization "โ
Network and memory settings optimized"
}
monitor_and_adjust() {
log_optimization "๐ Monitoring server performance..."
# Check CPU usage and adjust process priorities
for server in minecraft cs2 valheim ark; do
PID=$(pgrep -f $server | head -1)
if [ ! -z "$PID" ]; then
CPU_USAGE=$(ps -o pcpu= -p $PID | awk '{print int($1)}')
if [ $CPU_USAGE -gt 80 ]; then
# High CPU usage - lower priority slightly
renice 5 $PID
log_optimization "โ ๏ธ High CPU usage for $server ($CPU_USAGE%) - adjusted priority"
elif [ $CPU_USAGE -lt 20 ]; then
# Low CPU usage - increase priority
renice -5 $PID
log_optimization "๐ Low CPU usage for $server ($CPU_USAGE%) - increased priority"
fi
fi
done
}
cleanup_performance_bottlenecks() {
log_optimization "๐งน Cleaning performance bottlenecks..."
# Clear system caches if memory is low
MEMORY_USAGE=$(free | awk 'NR==2{printf "%.0f", $3*100/$2}')
if [ $MEMORY_USAGE -gt 85 ]; then
sync
echo 1 | sudo tee /proc/sys/vm/drop_caches
log_optimization "๐งน Cleared system caches (memory was at ${MEMORY_USAGE}%)"
fi
# Clean old log files
find /opt/gameservers -name "*.log" -size +100M -mtime +7 -exec truncate -s 50M {} \;
log_optimization "๐งน Truncated large log files"
# Optimize database files (if any)
if [ -f "/opt/gameservers/teamspeak/ts3server.sqlitedb" ]; then
sqlite3 /opt/gameservers/teamspeak/ts3server.sqlitedb "VACUUM;"
log_optimization "๐งน Optimized TeamSpeak database"
fi
}
generate_performance_report() {
echo "๐ Gaming Server Performance Report"
echo "==================================="
echo "Generated: $(date)"
echo ""
echo "๐ป System Resources:"
free -h
echo ""
echo "๐ฎ Server Performance:"
for server in minecraft cs2 valheim ark teamspeak; do
if systemctl is-active --quiet $server; then
PID=$(pgrep -f $server | head -1)
if [ ! -z "$PID" ]; then
CPU=$(ps -o pcpu= -p $PID)
MEM=$(ps -o rss= -p $PID | awk '{print int($1/1024)"MB"}')
echo "$server: CPU ${CPU}% | RAM $MEM"
fi
fi
done
echo ""
echo "๐ Network Activity:"
ss -tuln | grep -E ":(25565|27015|2456|7777|9987)" | wc -l | xargs echo "Active game ports:"
echo ""
echo "๐ Recent Optimizations:"
tail -5 $OPTIMIZATION_LOG
}
# Main optimization routine
case "$1" in
full)
log_optimization "๐ Starting full optimization cycle..."
optimize_java_servers
optimize_system_settings
cleanup_performance_bottlenecks
log_optimization "โ
Full optimization completed"
;;
monitor)
monitor_and_adjust
;;
report)
generate_performance_report
;;
auto)
# Automatic optimization based on current load
LOAD_AVG=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | sed 's/,//')
LOAD_THRESHOLD=$(nproc | awk '{print $1 * 0.8}')
if (( $(echo "$LOAD_AVG > $LOAD_THRESHOLD" | bc -l) )); then
log_optimization "๐ด High system load detected ($LOAD_AVG) - running optimization"
optimize_system_settings
cleanup_performance_bottlenecks
fi
monitor_and_adjust
;;
*)
echo "๐ฎ Gaming Server Optimization Tool"
echo "Usage: $0 {full|monitor|report|auto}"
echo ""
echo "Commands:"
echo " full - Run complete optimization"
echo " monitor - Monitor and adjust running servers"
echo " report - Generate performance report"
echo " auto - Automatic optimization based on load"
exit 1
;;
esac
EOF
chmod +x ~/optimize-gaming.sh
# Set up automatic optimization
(crontab -l; echo "*/15 * * * * /home/gameserver/optimize-gaming.sh auto") | crontab -
๐ What Youโve Accomplished - Gaming Server Mastery!
Congratulations! Youโve built an incredible gaming server empire on AlmaLinux! ๐ Letโs celebrate your amazing achievements:
๐ Complete Gaming Infrastructure:
- โ Minecraft server with optimized JVM settings and RCON management
- โ Counter-Strike 2 server with competitive configurations
- โ Valheim server for epic survival adventures
- โ ARK: Survival Evolved server with custom world settings
- โ TeamSpeak voice communication server
- โ Advanced firewall configuration for all gaming services
- โ Automated backup and maintenance systems
- โ Performance monitoring and optimization tools
- โ Comprehensive player management system
๐ช Professional Skills Gained:
- โ Multi-game server deployment and management
- โ System optimization for gaming workloads
- โ Network configuration and port management
- โ Player administration and moderation
- โ Automated maintenance and backup strategies
- โ Performance monitoring and troubleshooting
- โ Security hardening for gaming environments
- โ Resource allocation and scaling techniques
- โ Community management and server administration
๐ฏ Enterprise-Grade Features:
- โ Automated server updates and patch management
- โ Real-time performance monitoring and alerting
- โ Centralized logging and analytics
- โ Disaster recovery with automated backups
- โ Load balancing and resource optimization
- โ Security monitoring and intrusion prevention
- โ Player statistics and community management
- โ Multi-game coordination and administration
๐ฏ Why This Gaming Setup Matters
Your AlmaLinux gaming server is now a professional-grade gaming platform! ๐
Real-World Impact:
- ๐ฎ Community Building - Create lasting friendships and gaming communities
- ๐ฐ Revenue Generation - Monetize your servers through donations or premium features
- ๐ Competitive Gaming - Host tournaments and competitive events
- ๐ Business Opportunities - Offer gaming server hosting services
- ๐ก๏ธ Complete Control - Full customization and moderation capabilities
- ๐ Global Reach - Players from around the world on your servers
- ๐ฏ Professional Experience - Valuable server administration skills
- ๐ก Innovation Platform - Test mods, plugins, and custom game modes
- ๐ฅ Social Impact - Provide safe gaming spaces for communities
- ๐ Career Development - Gaming industry and server management expertise
Youโre not just running game servers - youโre creating digital worlds where memories are made! Whether youโre building the next big Minecraft community, hosting competitive CS2 tournaments, or creating survival adventures in Valheim, your AlmaLinux gaming platform provides everything needed for success! ๐
Your gaming empire awaits! Get ready to welcome players from around the world to your amazing servers! โญ Happy gaming! ๐