I wanted to play Romestead. My friend had the server on his machine. My friend was never online.
So I stopped waiting and moved it somewhere that is always on.
The setup is nothing clever — it's the same shape I already use for my seasonal Minecraft servers: a .docker/ folder holding the Dockerfile and compose.yml, and a sibling server/ directory bind-mounted into the container. The image carries only the .NET 8 runtime; the game files live outside it, so updating the server never means rebuilding the image, and rebuilding the image never touches the saved worlds.
Two things cost me more time than the rest combined:
dotnet-install.sh doesn't give you everything. It unpacks the portable runtime and stops there. On a slim Debian base you still need ICU and OpenSSL, or the server throws on startup.
Docker doesn't set $HOME when you switch users. Even after useradd -m, $HOME stays /. Romestead bundles the GameAnalytics SDK, which builds its data directory from $HOME — so it tried to create /GameAnalytics at the filesystem root, the unprivileged user couldn't write there, and the server died in a restart loop. One ENV HOME=/home/steam and it was over.
It's on GitHub: toledkrw/romestead_dedicated_server
Pair it with a playit.gg tunnel and you're up. One warning: the client won't connect through the tunnel's hostname — hand your players the proxy's IPv4 address instead.
My friend still hasn't logged in.
Top comments (0)