Self-hosted Astroneer dedicated server on Fly.io Machines — Docker image on Ubuntu 24.04 with WineHQ winehq-devel 10.6 (Noble), GnuTLS 3.8.3 via Ubuntu libgnutls30t64, and DepotDownloader for Windows app 728470. Wine prefix lives on the Fly volume at /data/winepfx (initialized on first boot if the image skeleton is empty). Local make start / make stop wrap flyctl. Use BuildKit (DOCKER_BUILDKIT=1) so APT layers use cache mounts and rebuilds stay faster.
- Bun —
curl -fsSL https://bun.sh/install | bash - Fly CLI —
brew install flyctl - Fly.io account with a payment method (Machines + volumes)
bun install
make setup # wizard: Fly token, region, creates app + astroneer_server_kit_data volume, writes fly.toml + .env
make preflight
make start # ensures dedicated IPv4 + ASTRONEER_PUBLIC_IP secret, then fly deploy — first build + DepotDownloader fetch can take 20–40+ minutes
make ip # show app IPv4 (same address make start uses for clients)Join address: PublicIP:8777. make start allocates a Fly dedicated IPv4 (if missing) and sets the ASTRONEER_PUBLIC_IP secret so PublicIP in AstroServerSettings.ini matches inbound traffic (not generic egress).
| Command | Purpose |
|---|---|
make setup |
Interactive .env + fly.toml, Fly app + volume |
make start |
Ensure dedicated IPv4, fly secrets set ASTRONEER_PUBLIC_IP, fly deploy |
make stop |
Scale Machines to 0 (volume retained) |
make destroy-all |
fly apps destroy — data loss per Fly policy |
make logs |
fly logs |
make ip |
List app IPv4 addresses |
make ssh |
fly ssh console |
make status |
Short summary |
World data lives on a Fly volume (astroneer_server_kit_data) mounted at /data. The game installs under /data/astroneer-server-kit (DepotDownloader). The Wine prefix is /data/winepfx on the volume, seeded from /opt/wine-prefix-skel on first boot. Saves symlink to /data/SaveGames. Stopping Machines keeps the volume; destroying the app may remove it — confirm in Fly docs.
The server’s Engine.ini defaults to net.AllowEncryption=True. Clients must use the same value in their local Astroneer Engine.ini or joins may fail.
Some community setups run with encryption off under Wine; this kit keeps encryption on by default. If joins fail with TLS or handshake errors, try matching net.AllowEncryption between server Engine.ini and clients, or temporarily disable encryption for isolation testing.
make start syncs ASTRONEER_PUBLIC_IP to your app’s leased IPv4. If joins still fail or you changed IPs manually:
fly secrets set ASTRONEER_PUBLIC_IP=YOUR_IPV4 -a "$FLY_APP_NAME"Then redeploy or restart the Machine.
Roughly tens of USD/month for a multi-CPU / 8 GB Machine plus volume and egress — see Fly pricing.
Dockerfile— Ubuntu 24.04,libgnutls30t64(GnuTLS 3.8.3), WineHQwinehq-devel10.6, DepotDownloader 3.4.0, BuildKit APT caches, entrypointdocker/*.sh—entrypoint*.sh,astroneer-server-run(DepotDownloader install +winepfxon volume, runAstroServer.exe+ Xvfb)fly.toml— regenerated by setup (app name, region,ASTRONEER_SERVER_NAME, VM size)scripts/— Bun CLIs for setup / deploy / status