Hosting your own game server gives you full control: custom mods, your own rules, no monthly subscription to a game server provider, and the ability to keep it running 24/7 for you and your friends. A VPS is the most cost-effective way to do it, and it is easier than you might think.

This guide covers setting up dedicated servers for three of the most popular games: Minecraft (Java Edition), Palworld, and a bonus section on SteamCMD-based games like Valheim and Satisfactory. We will cover server requirements, installation, configuration, and performance tuning.

Choosing the Right VPS Specs for Game Servers

Game servers are RAM and CPU-intensive, but the requirements vary significantly by game. Here is a practical breakdown:

Game Players vCPU RAM Storage
Minecraft (vanilla) 1-10 2 4 GB 30 GB SSD
Minecraft (modded) 10-30 4 8 GB 50 GB SSD
Palworld 4-16 4 8 GB 40 GB SSD
Palworld 16-32 4 16 GB 50 GB SSD
Valheim 2-10 2 4 GB 30 GB SSD
Satisfactory 1-4 4 8 GB 25 GB SSD

Tip: For game servers, single-thread CPU performance matters more than core count. Most game servers are not heavily multi-threaded. A VPS with fast NVMe storage also helps with world save operations and chunk loading.

Initial Server Setup

Start with a fresh Ubuntu 24.04 LTS VPS. Connect via SSH and run the basics:

# Update the system
sudo apt update && sudo apt upgrade -y

# Create a dedicated user for game servers (never run game servers as root)
sudo adduser gameserver
sudo usermod -aG sudo gameserver

# Install common dependencies
sudo apt install -y software-properties-common curl wget screen unzip

Configure your firewall to allow SSH and game traffic:

sudo ufw allow OpenSSH
sudo ufw enable

We will open specific game ports as needed in each section below.

Setting Up a Minecraft Java Edition Server

Install Java

Minecraft Java Edition requires Java 21 or newer:

sudo apt install openjdk-21-jre-headless -y
java -version

Download and Configure the Server

Switch to your gameserver user and set up the directory:

sudo su - gameserver
mkdir -p ~/minecraft && cd ~/minecraft

# Download the latest Minecraft server JAR
wget https://piston-data.mojang.com/v1/objects/latest/server.jar -O server.jar

Before starting the server for the first time, you need to accept the EULA:

# Generate initial files
java -Xmx1024M -Xms1024M -jar server.jar nogui

# Accept the EULA
sed -i 's/eula=false/eula=true/' eula.txt

Optimize server.properties

Edit server.properties to tune performance:

# Key performance settings
view-distance=10
simulation-distance=6
max-players=20
network-compression-threshold=256
spawn-protection=0

Lower view-distance and simulation-distance values significantly reduce CPU and RAM usage. A view distance of 10 is a good balance for most servers.

Create a Startup Script

nano ~/minecraft/start.sh
#!/bin/bash
cd ~/minecraft
java -Xmx6G -Xms4G \
  -XX:+UseG1GC \
  -XX:+ParallelRefProcEnabled \
  -XX:MaxGCPauseMillis=200 \
  -XX:+UnlockExperimentalVMOptions \
  -XX:+DisableExplicitGC \
  -XX:G1NewSizePercent=30 \
  -XX:G1MaxNewSizePercent=40 \
  -XX:G1HeapRegionSize=8M \
  -XX:G1ReservePercent=20 \
  -jar server.jar nogui
chmod +x ~/minecraft/start.sh

These JVM flags are optimized for Minecraft servers. The G1 garbage collector minimizes the "lag spikes" caused by garbage collection pauses. Adjust -Xmx based on your available RAM -- leave at least 1-2 GB for the operating system.

Run in a Screen Session

# Open the game port
sudo ufw allow 25565/tcp

# Start in a screen session so it persists after you disconnect
screen -S minecraft
./start.sh

Detach from the screen session with Ctrl+A, D. Reattach later with screen -r minecraft.

Consider Using Paper Instead of Vanilla

For better performance, especially with more players, use PaperMC instead of the vanilla server JAR. Paper is a drop-in replacement that includes significant performance optimizations and plugin support. Download it from the official site and use it the same way as server.jar.

Setting Up a Palworld Dedicated Server

Install SteamCMD

Palworld uses Steam's dedicated server tools. Install SteamCMD first:

sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install steamcmd -y

Download the Palworld Server

sudo su - gameserver
mkdir -p ~/palworld

# Install/update the Palworld dedicated server
steamcmd +login anonymous \
  +force_install_dir /home/gameserver/palworld \
  +app_update 2394010 validate \
  +quit

Configure the Server

First, generate the default configuration files by running the server once, then stop it:

cd ~/palworld
./PalServer.sh &
sleep 30
kill %1

Now edit the settings file:

nano ~/palworld/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

Key settings to adjust:

[/Script/Pal.PalGameWorldSettings]
OptionSettings=(ServerName="My Palworld Server",ServerDescription="",AdminPassword="your_admin_password",ServerPassword="your_join_password",ServerPlayerMaxNum=16,PublicPort=8211)

Open Ports and Launch

sudo ufw allow 8211/udp
sudo ufw allow 27015/udp

screen -S palworld
cd ~/palworld
./PalServer.sh -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS

The launch flags help Palworld utilize multiple CPU cores more effectively. Detach with Ctrl+A, D.

Setting Up Any SteamCMD Game (Valheim, Satisfactory, etc.)

Most Steam-based dedicated servers follow the same pattern. Here is a generalized process using Valheim as an example:

# Install the game server
steamcmd +login anonymous \
  +force_install_dir /home/gameserver/valheim \
  +app_update 896660 validate \
  +quit

# Open the required ports
sudo ufw allow 2456:2458/udp

# Create a start script
cat > ~/valheim/start.sh << 'EOF'
#!/bin/bash
export templdpath=$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=./linux64:$LD_LIBRARY_PATH
export SteamAppId=892970

./valheim_server.x86_64 \
  -name "My Valheim Server" \
  -port 2456 \
  -world "MyWorld" \
  -password "your_password" \
  -public 0

export LD_LIBRARY_PATH=$templdpath
EOF

chmod +x ~/valheim/start.sh
screen -S valheim
./start.sh

To find the App ID for any game's dedicated server, search for it on SteamDB.

Running Your Game Server as a systemd Service

Using screen works fine for casual use, but for a server you want running 24/7 with automatic restarts, create a systemd service. Here is an example for Minecraft:

sudo nano /etc/systemd/system/minecraft.service
[Unit]
Description=Minecraft Server
After=network.target

[Service]
User=gameserver
WorkingDirectory=/home/gameserver/minecraft
ExecStart=/home/gameserver/minecraft/start.sh
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable minecraft
sudo systemctl start minecraft

# Check the status
sudo systemctl status minecraft

# View live logs
sudo journalctl -u minecraft -f

This ensures your game server starts automatically after a reboot and restarts if it crashes.

Performance Optimization Tips

Automatic World Backups

Set up a cron job to back up your game worlds every 6 hours:

# As the gameserver user
crontab -e
# Backup Minecraft world every 6 hours
0 */6 * * * tar -czf ~/backups/minecraft-$(date +\%Y\%m\%d-\%H\%M).tar.gz -C ~/minecraft world

# Backup Palworld saves every 6 hours
0 */6 * * * tar -czf ~/backups/palworld-$(date +\%Y\%m\%d-\%H\%M).tar.gz -C ~/palworld/Pal Saved

# Delete backups older than 7 days
0 0 * * * find ~/backups -name "*.tar.gz" -mtime +7 -delete
mkdir -p ~/backups

Launch Your Game Server Today

A 4-core, 8 GB VPS is the sweet spot for most game servers, handling Minecraft with mods, Palworld, Valheim, and similar titles with room to spare. MassiveGRID's Cloud VPS configurator lets you dial in exactly those specs, with data centers in New York, London, Frankfurt, and Singapore so you can place your server close to where you and your friends play. Every VPS runs on Proxmox HA clusters with Ceph distributed storage, meaning your game worlds are protected by triple-replicated storage and automatic failover. No more losing weeks of progress to hardware failures. Configure your server, deploy in minutes, and start playing tonight.