What SCS ships
SCS added dedicated servers to Convoy in December 2022. Its announcement lists three reasons to run one: the session stays up with no players online, it runs without a user interface on a rented machine, and it needs no ownership of the game or the DLCs. The tool is free; anyone can fetch it with SteamCMD, and SCS sends anyone without the game, or without a Steam client, to SteamCMD.
Steam's record for app 1948160 lists Windows, Linux and macOS depots and launches bin/linux_x64/eurotrucks2_server on Linux, with bin/linux_x64 as the working directory. The shared content depot is about 1.2 GB. American Truck Simulator's tool, app 2239530, has the same layout with amtrucks_server as the binary. SCS publishes no CPU or memory figures for either.
SCS's guide says it plainly: SteamCMD does not auto-update your server. Every game patch means running the update yourself. The systemd unit further down does it on each start.
Ports and the session browser
Each session uses two physical ports that the Steam game server API uses to fill the session browser, and two virtual ports inside the game's own protocol. Forwarding, per SCS's guide, takes a TCP rule and a UDP rule for each physical port; the virtual ones need none.
| Key in server_config.sii | Default | What it is |
|---|---|---|
| connection_dedicated_port | 27015 | Physical port; open TCP and UDP |
| query_dedicated_port | 27016 | Physical port; open TCP and UDP. For LAN games it must sit in 27015-27020 |
| connection_virtual_port | 100 | Virtual, range 100-200, no firewall rule |
| query_virtual_port | 101 | Virtual, range 100-200, no firewall rule |
The server does no NAT punching, so it only appears in the session browser on a public address or with forwarded ports. A rented machine has a public IPv4 on its own port, which removes that problem. A session behind NAT can still be joined through direct search: the server prints a search id when it starts, and players paste it into the search field of the in-game browser.
Sizing the machine
Size by sessions, not by players. SCS's config reference caps max_players at 8, so one session is a small load, and the documented way to grow is more sessions: SCS says instances can run side by side as long as each has its own ports and its own logon token. Since SCS gives no CPU or memory figures, measure one running session with top before you stack more on the same box.
The processors listed on our game server page all carry a PassMark single-thread rating of 2,000 or more, a bar that page borrows from Satisfactory's documentation. The Intel Xeon E3-1585L v5 entry build (four cores, 32 GB DDR4, an NVMe drive, 1 Gbps) is sold in all five cities and is a sensible first box: run one session, measure it, then decide. If the plan is many sessions plus a website or a Discord bot, a Xeon Gold line with 12 to 20 cores gives each process room. The port is unmetered either way.
Put the server where most drivers live: Amsterdam or Bucharest for a European convoy; for North America, an East Coast site (New York or Miami) or San Francisco. The data center page lists a test IP per city, and the looking glass runs ping and traceroute from our routers.
Install with SteamCMD
Choose Ubuntu 24.04 on the order form, then sign in as root. The block below installs lib32gcc-s1 for SteamCMD, creates an ets2 user, enables ufw after admitting SSH, opens the two physical ports, downloads the server anonymously, and links steamclient.so into ~/.steam/sdk64, the folder the server searches. Without that link the server stops with a message that SteamAPI_Init() could not find a running Steam or a local steamclient library; SCS's guide gives the same ln -s fix, or the server_launch.sh script next to the binary. The block is safe to run again if it stops halfway.
# as root (or sudo) on Ubuntu 24.04
sudo apt-get update && sudo apt-get install -y lib32gcc-s1 curl && \
{ id ets2 >/dev/null 2>&1 || sudo useradd -m -s /bin/bash ets2; } && \
sudo sed -i 's/^IPV6=.*/IPV6=yes/' /etc/default/ufw && \
sudo ufw allow OpenSSH && sudo ufw --force enable && \
sudo ufw allow 27015:27016/tcp && sudo ufw allow 27015:27016/udp && \
sudo -u ets2 -H bash -c 'mkdir -p ~/steamcmd && cd ~/steamcmd && curl -sqL https://client-update.steamstatic.com/installer/steamcmd_linux.tar.gz | tar zxf - && ./steamcmd.sh +force_install_dir /home/ets2/ets2ds +login anonymous +app_update 1948160 validate +quit; test -x /home/ets2/ets2ds/bin/linux_x64/eurotrucks2_server && test -e ~/steamcmd/linux64/steamclient.so && mkdir -p ~/.steam/sdk64 && ln -sf ~/steamcmd/linux64/steamclient.so ~/.steam/sdk64/steamclient.so' && \
echo "install ok" || echo "STOP - install incomplete, read the output above and run the block again"
server_packages: the files only the game can make
The first launch creates the server home, which SCS puts at the game user path (on Linux, a folder named after the game inside ~/.local/share), writes a default server_config.sii, and then stops with "Server packages file not found". The two missing files hold the map, DLC and mod setup and are not tied to your account. Make them on your own PC:
- In the game's
config.cfg(in the game's home folder on your PC), setuset g_console "1". - Start the game with the DLC and mods you want the server to run, and load into the map: SCS says the map must be loaded when you export.
- Press
~and runexport_server_packages. The game writesserver_packages.siiandserver_packages.datto its home folder. - Copy both to
/tmpon the server withscp, then run the second half of the block below.
# 1) first launch as ets2: creates the server home, then stops on the missing packages
sudo -u ets2 -H bash -c 'cd ~/ets2ds/bin/linux_x64 && timeout 60 ./eurotrucks2_server'
H=$(sudo find /home/ets2/.local/share -maxdepth 2 -name server_config.sii -printf '%h\n' | head -n 1)
[ -n "$H" ] && sudo chmod 600 "$H/server_config.sii" && echo "server home: $H" || echo "STOP - no server_config.sii, read the output above"
# 2) after scp of both files to /tmp: move them in, then edit the config (nano is last)
H=$(sudo find /home/ets2/.local/share -maxdepth 2 -name server_config.sii -printf '%h\n' | head -n 1)
[ -n "$H" ] && sudo install -o ets2 -g ets2 -m 600 /tmp/server_packages.sii /tmp/server_packages.dat "$H/" && sudo rm /tmp/server_packages.sii /tmp/server_packages.dat && sudo -u ets2 nano "$H/server_config.sii" || echo "STOP - check that both files are in /tmp"
The server cannot reach the Steam Workshop, because it does not use the Steam client; everything it loads comes from the exported pair. When you change DLC or mods on the PC, export again and replace both files.
server_config.sii: name, password, token, moderators
Set these before the session goes public. Values are as SCS's config reference documents them.
lobby_name,description,password: up to 63 characters each;welcome_messageup to 127.max_players: 8 by default, and 8 is the documented limit.max_vehicles_total,max_ai_vehicles_playerandmax_ai_vehicles_player_spawncap the vehicle count.traffic,player_damage,force_speed_limiter,name_tags,service_no_collision,in_menu_ghosting: true or false switches for the session rules.server_logon_token: see below. Without it the server logs on anonymously and gets a fresh, non-persistent search id each time.moderator_list: the count, then one Steam ID per line, such asmoderator_list[0]: 123456789. Listed players are promoted when they join.
The token is generated at steamcommunity.com/dev/managegameservers, and only a Steam account that owns a copy can generate one. Use the game's app id, 227300 for Euro Truck Simulator 2 or 270880 for American Truck Simulator, never the server's 1948160 or 2239530: SCS's guide calls this out. Running two sessions means two tokens. The config file holds the token and the session password, hence the chmod 600 in the block above.
There is no admin interface while the session runs. Moderators type commands in chat: /set_time HH:MM, /set_rain_factor with a value from 0 to 1, and /help.
Run it under systemd
SCS's guide stops the server with Ctrl+C, so the unit sends SIGINT. ExecStartPre runs the SteamCMD update on every start; the leading - lets the server start on the old build if the update exits with an error, and TimeoutStartSec gives a large patch half an hour. An update that hangs still counts against that limit. The block refuses to install the unit until both package files are in place.
H=$(sudo find /home/ets2/.local/share -maxdepth 2 -name server_packages.dat -printf '%h\n' | head -n 1)
[ -n "$H" ] && sudo test -e "$H/server_packages.sii" && sudo tee /etc/systemd/system/ets2.service > /dev/null <<'EOF' && sudo systemctl daemon-reload && sudo systemctl enable --now ets2 && sleep 30 && sudo journalctl -u ets2 -n 40 --no-pager || echo "STOP - packages missing or unit not started, see above"
[Unit]
Description=Euro Truck Simulator 2 dedicated server
Wants=network-online.target
After=network-online.target
[Service]
User=ets2
WorkingDirectory=/home/ets2/ets2ds/bin/linux_x64
TimeoutStartSec=1800
ExecStartPre=-/home/ets2/steamcmd/steamcmd.sh +force_install_dir /home/ets2/ets2ds +login anonymous +app_update 1948160 +quit
ExecStart=/home/ets2/ets2ds/bin/linux_x64/eurotrucks2_server -nosingle
KillSignal=SIGINT
Restart=always
RestartSec=15
[Install]
WantedBy=multi-user.target
EOF
server.log.txt in the server home is the first place to look, and server.crash.txt appears there after a crash. SCS lists one known issue: when Steam loses its connection the server logs "Steam disconnected" and closes the session. If the server process exits, Restart=always starts it again; if the log shows the session closed while the process still runs, run sudo systemctl restart ets2. To apply a patch, sudo systemctl restart ets2; our advice: match the server's game version to the one your drivers run.
More sessions, ATS and what to keep
- A second session needs its own server home, ports and token. SCS moves the home on Linux with
XDG_DATA_HOME, so launch the server once by hand with a new one:sudo -u ets2 -H bash -c 'mkdir -p ~/ets2-b && cd ~/ets2ds/bin/linux_x64 && XDG_DATA_HOME=/home/ets2/ets2-b timeout 60 ./eurotrucks2_server -nosingle'. Thenchmod 600the newserver_config.siiunder/home/ets2/ets2-b, copy both package files next to it (owner ets2, mode 600), and set different physical ports (say 27017 and 27018, opened in ufw for TCP and UDP), different virtual ports (say 102 and 103) and a second token. Its unit is a copy of the first under a new name, withEnvironment=XDG_DATA_HOME=/home/ets2/ets2-b, noExecStartPreline (so two SteamCMD runs never touch the same install at once), and-nosingleadded toExecStart. The first unit already passes-nosingle, the switch SCS lists for running several instances; its note that this becomes the default may be out of date. - American Truck Simulator is the same procedure with app 2239530,
amtrucks_serverand a token made with app 270880. The packages must be exported from ATS. - What to back up: the server home holds
server_config.sii, the two package files and the logs. Copy that folder off the machine after each change; the game files themselves come back with one SteamCMD run.
Want a racing server next to the convoy? Our Wreckfest page covers Bugbear's Windows tool, and the BeamMP guide covers BeamNG multiplayer on Linux.
Questions
Do I need to own Euro Truck Simulator 2 to host the server?
Not to download or run it: SCS says the tool needs no ownership of the game or DLCs, and SteamCMD fetches app 1948160 anonymously. You do need a copy of the game to export server_packages.sii and server_packages.dat, and a Steam account holding the game to generate a logon token.
Why does my server not show in the session browser?
Confirm ufw passes 27015 and 27016 on TCP as well as UDP, and that the server has a public address, since it does no NAT punching. Players can also reach it by the search id the server prints at startup: SCS's guide says direct search works even for a server behind NAT.
How many players can join one session?
SCS's config reference sets max_players to 8 and lists 8 as the limit. For more drivers, run more sessions on the same machine, each with its own ports and token.
Can the server use Steam Workshop mods?
No. The server does not use the Steam client, so it cannot reach the Workshop. Mods and DLC are set by the server_packages pair you export from a game that has them enabled.
How soon is the machine ready?
Once your order clears approval, a ready server is live in roughly 30 minutes, and a ready unit can be rented by the hour for a convoy event. A build to your configuration takes 4 to 24 hours.
Does the server also run on Windows?
Yes. Steam's record lists a Windows build, bin/win_x64/eurotrucks2_server.exe, and Windows Server through 2025 is on our OS list. On Windows SCS uses the -homedir switch instead of XDG_DATA_HOME to move the server home.