Install SteamCMD on a Linux VPS by preparing the operating system, creating a separate non-root steam account, adding the distribution’s 32-bit runtime, downloading Valve’s SteamCMD archive, and using the target game’s dedicated-server app ID with app_update. Run the finished server under systemd, then open only the TCP and UDP ports that the game documents.
This guide uses Ubuntu or Debian commands and an illustrative server directory. The executable name, startup arguments, license requirements, ports, RAM, CPU, storage, and player capacity belong to the individual game, not to SteamCMD itself.
As an Amazon Associate I earn from qualifying purchases.
Recommended Free Tools
What SteamCMD does
SteamCMD is Valve’s command-line distribution tool for dedicated Steam game servers. Steam Support states that “All Steam game servers now use SteamCMD to download and update game server files.” It downloads a server build, validates its files, and retrieves later patches without requiring the graphical Steam client.
SteamCMD is not the game server process. It is the installer and updater. After it finishes, a separate executable in your server directory listens for players. Keeping those roles separate makes patching repeatable and lets you run the game process continuously under a service manager.
#1 Best Overall
Check these requirements before connecting to the VPS
Choose a supported Linux image
Use a current 64-bit Ubuntu or Debian image unless the game’s own documentation specifies another distribution. SteamCMD still needs 32-bit compatibility libraries on many Linux installations. The package name and availability depend on the exact release, so record the distribution version before installing anything.
Confirm the VPS can run the game
SteamCMD itself uses little storage, but a dedicated server may need several gigabytes for its files, updates, logs, workshop content, and backups. CPU, memory, disk I/O, bandwidth, latency, and maximum player count are game-specific. Check the selected title’s dedicated-server requirements and leave free disk space for a second copy or a rollback during updates.
Free tools Windows power users keep installed
One-click scans. No signup required.
Collect the game’s dedicated-server app ID
Find the app ID in the game’s official dedicated-server documentation or its Steam documentation. Do not assume that the consumer game’s app ID is the server app ID. In the commands below, APPID means the documented server app ID and must be replaced before execution.
Plan credentials and access
- Have an administrator account with
sudoaccess for operating-system changes. - Plan to run SteamCMD and the game as a dedicated account named
steam, not as root. - Determine whether the game supports anonymous server downloads. Some titles require a paid license and a Steam account; Steam Guard can also request an email code during login.
- Keep SSH access restricted to administrators and decide where backups and server logs will live.
Prepare Ubuntu or Debian
Log in over SSH as an administrator and update the host. These commands are the standard maintenance step documented for Ubuntu and Debian VPS deployments:
sudo apt-get update -y
sudo apt-get upgrade -y
Install the 32-bit runtime before switching to the service account:
sudo apt-get install lib32gcc1
lib32gcc1 is the package name documented for the Ubuntu/Debian procedure. Package names can change between releases; if APT reports that it is unavailable, use the package search for your exact OS release and install the distribution’s 32-bit GCC runtime rather than forcing an unrelated package. Confirm installation with:
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Rank #2
dpkg -l | grep -E 'lib32gcc|gcc.*i386'
If the VPS image has multi-architecture support disabled and your release requires it, follow that release’s package-manager instructions before retrying the installation. Do not copy a package from a different distribution.
Create a dedicated Steam user
A separate account limits the damage if a game process is compromised. Vultr’s 2025 SteamCMD procedure recommends this arrangement, and it also keeps downloaded files from being owned by root.
sudo adduser steam
sudo su - steam
Answer the account prompts, then work from the new login shell. The remaining commands should run as steam unless they are explicitly prefixed with sudo. The steam account normally should not have administrative privileges.
Download and initialize SteamCMD
Create a private directory in the Steam user’s home directory, download Valve’s Linux archive, extract it, and perform a first initialization:
mkdir -p ~/steamcmd
cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar xf steamcmd_linux.tar.gz
./steamcmd.sh +quit
The first launch downloads or updates SteamCMD’s own files and exits. Check that the shell returns without an error and that the directory contains steamcmd.sh and the SteamCMD runtime files. If wget is missing, install it as an administrator with your distribution’s package manager, then return to the steam shell.
Download a dedicated game server
Create a destination directory and use SteamCMD’s repeatable command sequence:
mkdir -p ~/servers/example
~/steamcmd/steamcmd.sh
+force_install_dir ~/servers/example
+login anonymous
+app_update APPID validate
+quit
+force_install_dir ~/servers/exampleselects the directory that will contain the game server.+login anonymousattempts an anonymous download. Use the game’s documented account-login method instead when anonymous access is not permitted.+app_update APPID validatedownloads the app and checks the installed files. ReplaceAPPIDwith the server app ID.+quitcloses SteamCMD after the operation completes.
For a real deployment, use a descriptive path such as ~/servers/my-game rather than example. Keep the path free of shell metacharacters and make sure the steam account owns it:
ls -la ~/servers/example
du -sh ~/servers/example
A successful run ends with SteamCMD reporting that the app is up to date or has been installed. Validation may take longer than a normal patch because it checks the existing files. If the command stops for credentials, read the game’s server instructions: some downloads require a licensed Steam account, and Steam Guard may send a code to the account’s email address.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Start the server manually first
Do one foreground launch before creating a service. The exact executable and arguments differ by title; inspect the game’s documentation and the files SteamCMD installed. From the server directory, run the documented binary as steam:
cd ~/servers/example
./server_binary --your-game-specific-options
Here, server_binary and the options are illustrative names inside a command template. Replace them with the actual executable and arguments for the selected game. A first launch may create configuration files, generate a world, or ask you to accept an end-user license. Stop it with the game’s documented shutdown command or Ctrl+C only after it has finished initialization.
Check the console for a listening message, then test from a client on the same network or through the game’s server browser. A process that starts successfully but is unreachable usually has a port, provider-firewall, bind-address, or game-configuration problem rather than a SteamCMD problem.
Open the right VPS and Linux firewall ports
Ports are controlled by the game. Steam Support lists TCP 27015 and UDP 27015 as the default dedicated/listen-server port, but those defaults are not a universal rule. The game’s own server guide takes precedence and may specify separate gameplay, query, RCON, and voice ports.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsRank #4
| Traffic | Protocol and example | What to verify |
|---|---|---|
| Gameplay/listen | TCP 27015 and UDP 27015 are Steam’s commonly listed defaults | Use the title’s documented port and protocol if different |
| Server query/browser | Game-specific TCP or UDP port | Required for discovery in a server browser |
| RCON/administration | Game-specific port, often optional | Open only if you use remote administration; protect the password |
| Voice or auxiliary services | Game-specific UDP or TCP ranges | Consult the game’s complete port table |
Apply the same intentional rule set in both places: the VPS provider’s network firewall and the Linux host firewall. A rule in only one layer is insufficient. The final list should contain the game’s documented gameplay, query, RCON, and voice ports, with the correct protocol for each. Do not broadly expose every Steam client or download range just because Steam Support lists those ranges for other functions.
A Steam Community hosting example opens both TCP and UDP for its game-specific ports, illustrating why copying only a TCP rule can leave a server invisible or unjoinable. After changing rules, verify from outside the VPS network and inspect the server process’s listening sockets with your distribution’s socket tool.
Run the server with systemd
Once the manual launch works, let systemd start the process at boot, restart it after a crash, and provide a consistent working directory. Create the unit as an administrator:
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallsudo nano /etc/systemd/system/example-server.service
Use a unit like this, replacing the executable name and arguments with the selected game’s documented command:
[Unit]
Description=Example dedicated game server
After=network-online.target
Wants=network-online.target
[Service]
User=steam
Group=steam
WorkingDirectory=/home/steam/servers/example
ExecStart=/home/steam/servers/example/server_binary --your-game-specific-options
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Save the file, then load and enable it:
sudo systemctl daemon-reload
sudo systemctl enable --now example-server.service
sudo systemctl status example-server.service
systemctl status shows whether the process is running and the most recent failure. Follow its live journal while troubleshooting:
sudo journalctl -u example-server.service -f
Do not put sudo inside ExecStart; systemd already launches the command as the account named by User. If the game needs environment variables, a separate environment file, or a graceful stop command, add those according to the game’s service documentation. Keep the unit’s working directory aligned with the path used in the manual test.
Best Value
Patch the server safely
SteamCMD uses the same app_update flow for updates. Schedule maintenance, stop the game process when the title requires it, and update the files as the steam user:
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →sudo systemctl stop example-server.service
sudo su - steam
~/steamcmd/steamcmd.sh
+force_install_dir ~/servers/example
+login anonymous
+app_update APPID validate
+quit
exit
sudo systemctl start example-server.service
Replace APPID with the same app ID used for the initial installation. The validate option checks for missing or damaged files while applying the patch. If the game requires a licensed account, use its documented login method instead of anonymous login. Back up configuration, world, save, and database files before a major update; SteamCMD’s validation does not replace those backups.
After restarting, inspect the journal and connect with a client running the same game version. If a patch changes configuration syntax or startup arguments, apply the game developer’s migration instructions before reopening the public port.
Troubleshoot the common failure points
| Symptom | Likely cause | Action |
|---|---|---|
steamcmd.sh exits immediately with a library error |
Required 32-bit runtime is missing or the package does not match the OS release | Install the 32-bit GCC runtime offered by that release, then rerun ./steamcmd.sh +quit |
| SteamCMD cannot download the app anonymously | The title requires a licensed account or has a different server distribution method | Read the game’s dedicated-server instructions and use the required account; be ready for a Steam Guard email code |
| Files are installed in an unexpected directory | +force_install_dir was omitted, misspelled, or run from a different account |
Run the full command with an absolute or clearly expanded path and check ownership with ls -la |
| Service fails but the manual command works | Wrong WorkingDirectory, executable path, permissions, or arguments in the unit |
Compare ExecStart with the tested command, run systemctl daemon-reload, and read journalctl -u example-server.service |
| Players cannot see or join the server | Incorrect protocol, closed provider firewall, closed host firewall, wrong bind address, or an unlisted query port | Compare every port with the game’s documentation and check both firewall layers and listening sockets |
| Server stops after an SSH session closes | It was launched interactively rather than under systemd | Stop the foreground process and use the systemd unit with enable --now |
| Updates appear successful but the game still reports an old build | Wrong app ID or installation directory, or the running process was not restarted | Confirm the path and app ID, stop the service, rerun app_update APPID validate, and start it again |
Security and maintenance checklist
- Run SteamCMD and the game as
steam, never as root. - Keep the VPS operating system patched and remove unused packages and services.
- Use SSH keys, restrict administrative SSH access, and avoid exposing management ports to the whole internet.
- Open only the game’s required TCP and UDP ports; keep RCON closed unless needed and protect its credential.
- Back up saves, worlds, configuration, and databases separately from the installed binaries.
- Monitor disk usage, memory pressure, CPU load, and systemd journal growth.
- Test a backup restore and a patch procedure before a scheduled event or community launch.
- Document the app ID, install path, startup arguments, port map, account requirements, and recovery contact.
How to compare VPS options for a game server
Price alone does not determine whether a VPS is suitable. Compare these properties for the specific game and region:
| Decision area | Questions to answer |
|---|---|
| Operating system and libraries | Is the preferred Ubuntu or Debian release supported, and can it provide the required 32-bit runtime? |
| Compute and storage | Does the plan meet the game’s CPU, memory, disk, and I/O requirements with room for updates and backups? |
| Network quality | Is the location close to players, and are the required UDP/TCP ports permitted by the provider? |
| Persistence and recovery | Are snapshots, block storage, automated backups, and console recovery available? |
| Operations | Can you obtain useful network and system metrics, abuse notifications, and support for firewall or boot issues? |
| Account and patch workflow | Can the server reach Steam’s download service, and can you schedule maintenance without violating provider limits? |
There is no authoritative universal RAM, bandwidth, or player-capacity number for “a Steam server.” Those values vary by title, map, mods, simulation load, and provider. Measure the selected game under its expected player load rather than applying a generic VPS size.
Quick Recap
Installation sequence at a glance
- Choose a supported 64-bit Ubuntu or Debian VPS and record its release.
- Update packages and install the release’s 32-bit runtime; the documented Ubuntu/Debian command is
sudo apt-get install lib32gcc1. - Create the non-root
steamaccount and switch to it. - Download and initialize SteamCMD in
~/steamcmd. - Create a server directory and run
force_install_dir,login,app_update APPID validate, andquit. - Launch the game manually once and verify its files, configuration, ports, and external connectivity.
- Create a systemd unit with the correct user, working directory, executable, and arguments.
- Open the game’s documented ports in both firewall layers.
- Stop the service for patches, rerun the validated SteamCMD update command, and restart it.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




