Steam app 1690800 is "Satisfactory Dedicated Server"
first boot of robtme/satisfactory-server: exited by itself with code 8 after 24s
Still open (the builder could not fix these)
booting your template, the server still wrote its own files outside the server volume, in /config/gamefiles, /config/gamefiles/Engine/Config, /config/gamefiles/Engine/Saved/Config/LinuxServer, /config/gamefiles/FactoryGame/.sentry-native/f8cf851d-b562-45fb-5fa3-92cc4b73ce09.run, /config/gamefiles/FactoryGame/Saved/Config/CrashReportClient/UECC-Linux-762F15C7EE5A481EB04AF7361D9D8378, /config/gamefiles/FactoryGame/Saved/Config/LinuxServer, /config/gamefiles/FactoryGame/Saved/Logs, /config/logs, /config/logs/steam, so your startup command or settings did not move them. Check the exact launch option name and syntax this server documents for its save/data folder (a wrong option is usually ignored silently) and point it at /server
Notes from research: Runs as non-root (set PUID/PGID to your host UID/GID, e.g. 1000). 8–16 GB RAM recommended (16 GB for 4+ players or large saves). Experimental/beta branch: set STEAMBETA=true. Mod support available (see repo wiki). No PC↔console crossplay – console players cannot join dedicated servers. Epic and Steam PC players can both join. Volume must be mounted at /config (holds /saved, /gamefiles, /backups, /logs). Auto-updates on container start unless SKIPUPDATE=true. Optional SSL via Certbot to avoid self-signed cert prompts.
Drafted by the GBR AI builder. **Review before merging**: check the settings, ports and descriptions against the game's documentation.
- Game: **Satisfactory** — robtme/satisfactory-server (Docker)
- Image: `robtme/satisfactory-server`
- Model rounds: 3
**Checked for real**
- image robtme/satisfactory-server exists
- Steam app 1690800 is "Satisfactory Dedicated Server"
- first boot of robtme/satisfactory-server: exited by itself with code 8 after 24s
**Still open** (the builder could not fix these)
- booting your template, the server still wrote its own files outside the server volume, in /config/gamefiles, /config/gamefiles/Engine/Config, /config/gamefiles/Engine/Saved/Config/LinuxServer, /config/gamefiles/FactoryGame/.sentry-native/f8cf851d-b562-45fb-5fa3-92cc4b73ce09.run, /config/gamefiles/FactoryGame/Saved/Config/CrashReportClient/UECC-Linux-762F15C7EE5A481EB04AF7361D9D8378, /config/gamefiles/FactoryGame/Saved/Config/LinuxServer, /config/gamefiles/FactoryGame/Saved/Logs, /config/logs, /config/logs/steam, so your startup command or settings did not move them. Check the exact launch option name and syntax this server documents for its save/data folder (a wrong option is usually ignored silently) and point it at /server
**Notes from research:** Runs as non-root (set PUID/PGID to your host UID/GID, e.g. 1000). 8–16 GB RAM recommended (16 GB for 4+ players or large saves). Experimental/beta branch: set STEAMBETA=true. Mod support available (see repo wiki). No PC↔console crossplay – console players cannot join dedicated servers. Epic and Steam PC players can both join. Volume must be mounted at /config (holds /saved, /gamefiles, /backups, /logs). Auto-updates on container start unless SKIPUPDATE=true. Optional SSL via Certbot to avoid self-signed cert prompts.
**Sources**
- https://hub.docker.com/r/wolveix/satisfactory-server
- https://satisfactory.wiki.gg/wiki/Dedicated_servers
- https://steamdb.info/app/1690800/info/
If /config is a bind-mounted volume (which the PR's own research notes say it should be: "Volume must be mounted at /config (holds /saved, /gamefiles, /backups, /logs)"), rm -rf /config will delete all save data, game files, and logs on every restart. This is the worst kind of bug: silent, destructive, and user-visible only after the first restart.
The PR description itself confirms this approach failed: the server still wrote to /config/gamefiles/... paths. The && chain means if rm -rf fails (e.g., permission denied on a read-only overlay), the symlink and /init.sh are never executed.
The correct approach is to use the image's documented mechanism to redirect data. For robtme/satisfactory-server, check whether it supports a DATADIR, CONFIG_DIR, or similar environment variable, or whether the game binary accepts a -SaveDir / -SavedDir launch parameter. Set that in defaultConfig or as an env var, and mount the volume at the path the game actually reads. Remove the rm -rf / ln -s hack entirely.
b) The PR is explicitly WIP and the server does not boot.
The title says "did not boot yet", the description says the container "exited by itself with code 8 after 24s", and the "Still open" section acknowledges the builder couldn't fix the issue. Merging a game entry that cannot start a server will break CI and produce a non-functional entry in the catalog. This should stay in draft / WIP status until a clean boot is verified.
c) Potential image ↔ config mismatch.
The defaultDockerImage is robtme/satisfactory-server, but the primary research source links to wolveix/satisfactory-server. These are independent projects with different entrypoints, env-var names, and directory layouts. The env-var set in defaultConfig (AUTOSAVENUM, DISABLESEASONALEVENTS, LOG, MAXOBJECTS, MAXTICKRATE, MULTIHOME, SERVERSTREAMING, VMOVERRIDE, etc.) closely matches the wolveix image's documented variables. If robtme/satisfactory-server doesn't read those variables, they will be silently ignored and the server will run with defaults.
Please verify each variable name against the robtme/satisfactory-server README or source, or switch the image to wolveix/satisfactory-server if that's what the config was written for.
2. Non-blocking suggestions
PUID/PGID: The research notes say the image requires PUID/PGID to be set to the host UID/GID for non-root operation, but neither appears in defaultConfig. If the platform injects these automatically, add a comment noting that. If not, the server will likely hit permission errors on the data directory.
STEAMBETAID example value: The description says "e.g. 'experimental'", but Satisfactory's Steam beta branches typically use a numeric branch ID (e.g. 3233312253535353198) or a specific branch token, not the word "experimental." A misleading example will send users down a dead end. Check the actual branch ID on SteamDB or the Steam community.
TIMEOUT semantics: The description says "Timeout in seconds for player connections before they are dropped." In most Satisfactory server images this is the connection timeout (how long to wait for a player to finish connecting), not an idle-kick timeout. The current wording is close but could be tightened to avoid confusion with an idle timeout.
requiredDiskMb: 40960 (40 GB): This looks tight. The Satisfactory dedicated server + SteamCMD downloads + save data can easily exceed 40 GB, especially with mods or large saves. Consider 60–80 GB or adding a note that this is a minimum.
Consider adding PUID/PGID and STEAMBETA-related fields to configSchema if they are valid env vars for the chosen image, so users can configure them through the UI.
3. Tests
test.yaml has an empty config and secrets, with settleSec: 120. Since the server currently exits with code 8 after ~24 s, the boot-test will fail regardless of settle time. No amount of waiting fixes a server that crashes on startup.
Once the image/config are corrected, add a boot-test that asserts the server process is still alive after settle (not just that the container hasn't exited), and ideally that port 7777/udp is actually accepting packets.
If the platform supports it, add a test that verifies the data directory (/server or wherever saves land) actually contains the expected game files after the first save cycle.
4. Overall assessment
Do not merge. The PR is self-described WIP, the server does not boot, the startup command contains a rm -rf against a path that may be a user data volume, and the config variables may target the wrong Docker image. Fix the image/config pairing, replace the destructive startup hack with the image's documented data-directory mechanism, verify a clean boot, and then re-submit.
Automated review by AI Git Bot
## 🤖 AI Code Review
## 1. Blocking issues
**a) `rm -rf /config` in the startup command is a data-destruction hazard and doesn't work.**
```yaml
defaultStartupCommand: rm -rf /config && ln -s /server /config && /init.sh
```
- If `/config` is a bind-mounted volume (which the PR's own research notes say it should be: *"Volume must be mounted at /config (holds /saved, /gamefiles, /backups, /logs)"*), `rm -rf /config` will **delete all save data, game files, and logs** on every restart. This is the worst kind of bug: silent, destructive, and user-visible only after the first restart.
- The PR description itself confirms this approach failed: the server still wrote to `/config/gamefiles/...` paths. The `&&` chain means if `rm -rf` fails (e.g., permission denied on a read-only overlay), the symlink and `/init.sh` are never executed.
- The correct approach is to use the image's documented mechanism to redirect data. For `robtme/satisfactory-server`, check whether it supports a `DATADIR`, `CONFIG_DIR`, or similar environment variable, or whether the game binary accepts a `-SaveDir` / `-SavedDir` launch parameter. Set that in `defaultConfig` or as an env var, and mount the volume at the path the game actually reads. Remove the `rm -rf` / `ln -s` hack entirely.
**b) The PR is explicitly WIP and the server does not boot.**
The title says *"did not boot yet"*, the description says the container *"exited by itself with code 8 after 24s"*, and the "Still open" section acknowledges the builder couldn't fix the issue. Merging a game entry that cannot start a server will break CI and produce a non-functional entry in the catalog. This should stay in draft / WIP status until a clean boot is verified.
**c) Potential image ↔ config mismatch.**
The `defaultDockerImage` is `robtme/satisfactory-server`, but the primary research source links to `wolveix/satisfactory-server`. These are independent projects with different entrypoints, env-var names, and directory layouts. The env-var set in `defaultConfig` (AUTOSAVENUM, DISABLESEASONALEVENTS, LOG, MAXOBJECTS, MAXTICKRATE, MULTIHOME, SERVERSTREAMING, VMOVERRIDE, etc.) closely matches the `wolveix` image's documented variables. If `robtme/satisfactory-server` doesn't read those variables, they will be silently ignored and the server will run with defaults.
Please verify each variable name against the `robtme/satisfactory-server` README or source, or switch the image to `wolveix/satisfactory-server` if that's what the config was written for.
## 2. Non-blocking suggestions
- **PUID/PGID**: The research notes say the image requires `PUID`/`PGID` to be set to the host UID/GID for non-root operation, but neither appears in `defaultConfig`. If the platform injects these automatically, add a comment noting that. If not, the server will likely hit permission errors on the data directory.
- **`STEAMBETAID` example value**: The description says *"e.g. 'experimental'"*, but Satisfactory's Steam beta branches typically use a numeric branch ID (e.g. `3233312253535353198`) or a specific branch token, not the word "experimental." A misleading example will send users down a dead end. Check the actual branch ID on SteamDB or the Steam community.
- **`TIMEOUT` semantics**: The description says *"Timeout in seconds for player connections before they are dropped."* In most Satisfactory server images this is the *connection timeout* (how long to wait for a player to finish connecting), not an idle-kick timeout. The current wording is close but could be tightened to avoid confusion with an idle timeout.
- **`requiredDiskMb: 40960` (40 GB)**: This looks tight. The Satisfactory dedicated server + SteamCMD downloads + save data can easily exceed 40 GB, especially with mods or large saves. Consider 60–80 GB or adding a note that this is a minimum.
- **Consider adding `PUID`/`PGID` and `STEAMBETA`-related fields to `configSchema`** if they are valid env vars for the chosen image, so users can configure them through the UI.
## 3. Tests
- `test.yaml` has an empty `config` and `secrets`, with `settleSec: 120`. Since the server currently exits with code 8 after ~24 s, the boot-test will fail regardless of settle time. No amount of waiting fixes a server that crashes on startup.
- Once the image/config are corrected, add a boot-test that asserts the server process is still alive after settle (not just that the container hasn't exited), and ideally that port 7777/udp is actually accepting packets.
- If the platform supports it, add a test that verifies the data directory (`/server` or wherever saves land) actually contains the expected game files after the first save cycle.
## 4. Overall assessment
**Do not merge.** The PR is self-described WIP, the server does not boot, the startup command contains a `rm -rf` against a path that may be a user data volume, and the config variables may target the wrong Docker image. Fix the image/config pairing, replace the destructive startup hack with the image's documented data-directory mechanism, verify a clean boot, and then re-submit.
---
*Automated review by AI Git Bot*
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Drafted by the GBR AI builder. Review before merging: check the settings, ports and descriptions against the game's documentation.
robtme/satisfactory-serverChecked for real
Still open (the builder could not fix these)
Notes from research: Runs as non-root (set PUID/PGID to your host UID/GID, e.g. 1000). 8–16 GB RAM recommended (16 GB for 4+ players or large saves). Experimental/beta branch: set STEAMBETA=true. Mod support available (see repo wiki). No PC↔console crossplay – console players cannot join dedicated servers. Epic and Steam PC players can both join. Volume must be mounted at /config (holds /saved, /gamefiles, /backups, /logs). Auto-updates on container start unless SKIPUPDATE=true. Optional SSL via Certbot to avoid self-signed cert prompts.
Sources
🤖 AI Code Review
1. Blocking issues
a)
rm -rf /configin the startup command is a data-destruction hazard and doesn't work./configis a bind-mounted volume (which the PR's own research notes say it should be: "Volume must be mounted at /config (holds /saved, /gamefiles, /backups, /logs)"),rm -rf /configwill delete all save data, game files, and logs on every restart. This is the worst kind of bug: silent, destructive, and user-visible only after the first restart./config/gamefiles/...paths. The&&chain means ifrm -rffails (e.g., permission denied on a read-only overlay), the symlink and/init.share never executed.robtme/satisfactory-server, check whether it supports aDATADIR,CONFIG_DIR, or similar environment variable, or whether the game binary accepts a-SaveDir/-SavedDirlaunch parameter. Set that indefaultConfigor as an env var, and mount the volume at the path the game actually reads. Remove therm -rf/ln -shack entirely.b) The PR is explicitly WIP and the server does not boot.
The title says "did not boot yet", the description says the container "exited by itself with code 8 after 24s", and the "Still open" section acknowledges the builder couldn't fix the issue. Merging a game entry that cannot start a server will break CI and produce a non-functional entry in the catalog. This should stay in draft / WIP status until a clean boot is verified.
c) Potential image ↔ config mismatch.
The
defaultDockerImageisrobtme/satisfactory-server, but the primary research source links towolveix/satisfactory-server. These are independent projects with different entrypoints, env-var names, and directory layouts. The env-var set indefaultConfig(AUTOSAVENUM, DISABLESEASONALEVENTS, LOG, MAXOBJECTS, MAXTICKRATE, MULTIHOME, SERVERSTREAMING, VMOVERRIDE, etc.) closely matches thewolveiximage's documented variables. Ifrobtme/satisfactory-serverdoesn't read those variables, they will be silently ignored and the server will run with defaults.Please verify each variable name against the
robtme/satisfactory-serverREADME or source, or switch the image towolveix/satisfactory-serverif that's what the config was written for.2. Non-blocking suggestions
PUID/PGID: The research notes say the image requires
PUID/PGIDto be set to the host UID/GID for non-root operation, but neither appears indefaultConfig. If the platform injects these automatically, add a comment noting that. If not, the server will likely hit permission errors on the data directory.STEAMBETAIDexample value: The description says "e.g. 'experimental'", but Satisfactory's Steam beta branches typically use a numeric branch ID (e.g.3233312253535353198) or a specific branch token, not the word "experimental." A misleading example will send users down a dead end. Check the actual branch ID on SteamDB or the Steam community.TIMEOUTsemantics: The description says "Timeout in seconds for player connections before they are dropped." In most Satisfactory server images this is the connection timeout (how long to wait for a player to finish connecting), not an idle-kick timeout. The current wording is close but could be tightened to avoid confusion with an idle timeout.requiredDiskMb: 40960(40 GB): This looks tight. The Satisfactory dedicated server + SteamCMD downloads + save data can easily exceed 40 GB, especially with mods or large saves. Consider 60–80 GB or adding a note that this is a minimum.Consider adding
PUID/PGIDandSTEAMBETA-related fields toconfigSchemaif they are valid env vars for the chosen image, so users can configure them through the UI.3. Tests
test.yamlhas an emptyconfigandsecrets, withsettleSec: 120. Since the server currently exits with code 8 after ~24 s, the boot-test will fail regardless of settle time. No amount of waiting fixes a server that crashes on startup./serveror wherever saves land) actually contains the expected game files after the first save cycle.4. Overall assessment
Do not merge. The PR is self-described WIP, the server does not boot, the startup command contains a
rm -rfagainst a path that may be a user data volume, and the config variables may target the wrong Docker image. Fix the image/config pairing, replace the destructive startup hack with the image's documented data-directory mechanism, verify a clean boot, and then re-submit.Automated review by AI Git Bot
Pull request closed