ARK Survival Ascended doesn't ship a Linux server. Like Enshrouded, you run the Windows server EXE through Wine. Unlike Enshrouded, ASA is a memory hog of historic proportions — 24 GB minimum for a tame 10-player server. Studio Wildcard's "16 GB" recommendation is for a fresh map with no structures.

TL;DR:

sudo dpkg --add-architecture i386
sudo apt install steamcmd wine64
sudo adduser --system --group --home /opt/asa asa
sudo -u asa -H steamcmd +force_install_dir /opt/asa \
  +login anonymous +app_update 2430930 validate +quit
sudo ufw allow 7777/udp
sudo ufw allow 27015/udp

Then a systemd unit through Wine, then a daily restart, then mod handling. Same SteamCMD-plus-Wine pattern as Enshrouded, scaled up for ASA's resource appetite.

Why this hurts more than other game servers

ASA runs Unreal Engine 5 server-side. The server actually loads world chunks, dinosaur AI, and physics — there's no thin "headless" mode. A populated server with a few hundred tames and decent base-building easily eats 20+ GB RSS. After 4-6 hours of uptime, memory creeps up another 4-8 GB just from cached actors.

Plan for it. Don't try to squeeze ASA into 16 GB and expect a stable week. Don't co-locate it with two other Wine game servers and expect anyone to be happy.

Install

Server app ID: 2430930. Game app ID: 2399830 — you don't need it.

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install steamcmd wine64
sudo adduser --system --group --home /opt/asa asa
sudo -u asa -H steamcmd \
  +force_install_dir /opt/asa \
  +login anonymous \
  +app_update 2430930 validate \
  +quit

Initial download is around 30 GB and takes 20-40 minutes depending on your link. After that, set up the Wine prefix:

sudo -u asa -H WINEPREFIX=/opt/asa/wineprefix WINEARCH=win64 wineboot --init

Decline both Mono and Gecko prompts. Server doesn't need them.

ASA also needs a few VC++ runtime DLLs. The lazy way:

sudo -u asa -H WINEPREFIX=/opt/asa/wineprefix winetricks vcrun2019 --unattended

Skipping this works on some Wine versions and silently breaks on others. Just run it.

Config — GameUserSettings.ini

First start creates /opt/asa/ShooterGame/Saved/Config/WindowsServer/GameUserSettings.ini. Stop the server, then edit:

[ServerSettings]
ServerPVE=False
ServerCrosshair=True
ServerHardcore=False
ServerForceNoHUD=False
GlobalVoiceChat=False
ProximityChat=False
NoTributeDownloads=False
AllowThirdPersonPlayer=True
AlwaysNotifyPlayerLeft=False
DontAlwaysNotifyPlayerJoined=False
ServerAdminPassword=changeme-strong
SpectatorPassword=
DifficultyOffset=1.0
TamingSpeedMultiplier=3.0
HarvestAmountMultiplier=2.0
XPMultiplier=2.0

[SessionSettings]
SessionName=My ASA Server
Port=7777
QueryPort=27015
MaxPlayers=20

[/Script/Engine.GameSession]
MaxPlayers=20

ServerAdminPassword is what enablecheats <password> uses in-game. Set something strong — anyone with admin can wipe the map.

TamingSpeedMultiplier=3.0 and HarvestAmountMultiplier=2.0 are my taste, ARK's vanilla rates are slow. Adjust to match the group's preference.

Systemd unit

/etc/systemd/system/asa.service:

[Unit]
Description=ARK Survival Ascended Dedicated Server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=asa
Group=asa
WorkingDirectory=/opt/asa/ShooterGame/Binaries/Win64
Environment=WINEPREFIX=/opt/asa/wineprefix
Environment=WINEARCH=win64
Environment=WINEDEBUG=-all
ExecStart=/usr/bin/wine64 ArkAscendedServer.exe \
  TheIsland_WP?listen?SessionName="MyServer"?ServerPassword=?ServerAdminPassword=changeme-strong \
  -port=7777 -QueryPort=27015 -WinLiveMaxPlayers=20 -mods=
Restart=on-failure
RestartSec=20
RuntimeMaxSec=86400
MemoryMax=28G

[Install]
WantedBy=multi-user.target

The startup arg format is unusual — query-string style ?key=value for game options, then traditional -flag for engine options, all in one command. Wildcard hasn't fixed this in 12 years and probably never will.

RuntimeMaxSec=86400 — daily restart, non-negotiable. ASA's memory leaks past 24h are deterministic.

MemoryMax=28G — hard ceiling. If the process exceeds, systemd kills cleanly and restart picks up. Better than the OOM killer doing it.

WinLiveMaxPlayers=20 — the cmd-line flag overrides the INI's MaxPlayers. Match them.

-mods= is empty here. With mods, list CurseForge IDs comma-separated (see below).

systemd unit reference for the basics.

sudo systemctl daemon-reload
sudo systemctl enable --now asa
sudo journalctl -u asa -f

First start takes 5-10 minutes. ASA loads the entire map into memory before it accepts connections. Look for Game Server Initialized — that's when ports open.

Ports

sudo ufw allow 7777/udp
sudo ufw allow 27015/udp

7777: game traffic. 27015: Steam server-query (browser listing). UDP only — opening TCP achieves nothing.

If the server should not appear in the public Steam browser, skip 27015 and players connect by direct IP. UFW rules reference.

Mods

ASA mods come from CurseForge, not Steam Workshop. The server downloads them automatically when listed in the -mods= arg:

-mods=928180,927084,956120

(Those are example IDs — replace with the actual CurseForge mod IDs.)

First boot with mods takes another 5-10 minutes per ~500 MB of mod content. Mods cache under /opt/asa/ShooterGame/Binaries/Win64/ShooterGame/Mods/. They re-download when CurseForge ships an update.

Mod load order matters when two mods touch the same engram. Put the "primary" mod first — its definitions win on conflict.

Backups

Saves live in /opt/asa/ShooterGame/Saved/SavedArks/<MapName>/. The .ark file is the world. Nightly:

systemctl stop asa
rsync -a --delete /opt/asa/ShooterGame/Saved/SavedArks/ /backup/asa/$(date +%F)/
systemctl start asa

Stop-rsync-start beats rsync-while-live. ASA writes to the .ark every few minutes; an rsync mid-write gives you a corrupt backup roughly 1 in 50 attempts. The 30-second downtime is invisible to players who aren't actively connecting.

Keep 14 days. Restoring a corrupt save is cp /backup/asa/2026-05-03/TheIsland_WP.ark /opt/asa/ShooterGame/Saved/SavedArks/. rsync rotation pattern.

Updates

ASA patches break protocol every 1-2 weeks. Workflow:

sudo systemctl stop asa
sudo -u asa -H steamcmd \
  +force_install_dir /opt/asa \
  +login anonymous \
  +app_update 2430930 validate \
  +quit
sudo systemctl start asa

validate re-checks file hashes — slower but safer. Every patch I've skipped validate on, something subtle has been off. Run it.

After a Wine version bump, run wineboot --update before starting ASA, or expect "missing DLL" log spam.

The two failure modes you'll hit

"Game Server Initialized" never appears. Wine prefix is missing VC++ DLLs. Re-run winetricks vcrun2019 --unattended.

Server loads but players time out connecting. UDP ports closed somewhere. Test from outside:

nc -uvz <publicip> 7777

If it fails, the gap is firewall (UFW rule) or NAT (router port-forward). The server itself is fine.

Why this and not a managed host

A Hetzner CPX41 (8 vCPU, 32 GB) at €25/month runs a comfortable ASA server with headroom for one or two smaller game servers alongside. A managed ASA host charges €30-40/month for a single 20-slot instance with mod limits and patch delays. For a friends group, owning the box is cheaper, more flexible, and you control the update cadence.

The downsides are honest: setup is a few hours, you maintain the patches, and you eat the 30-minute outage when an update misbehaves. If that's worth €15/month to you, run your own. If not, pay for managed.

Same calculus as Valheim, Palworld, and Enshrouded — once you've done one, the second one is an evening.


Related posts