2026-08-10 13:56:40 -04:00
|
|
|
# NETfishing Dedicated Server
|
|
|
|
|
|
|
|
|
|
This repository packages the headless NETfishing server produced by the main
|
|
|
|
|
game project. Gameplay and networking code remain in the `netfishing`
|
|
|
|
|
repository so clients and servers use the same protocol implementation.
|
|
|
|
|
|
|
|
|
|
## Stage a build
|
|
|
|
|
|
|
|
|
|
Export the `Linux Dedicated Server` preset from the game project, then stage
|
2026-08-11 10:37:03 -04:00
|
|
|
its executable and PCK with the exact game version and source commit:
|
2026-08-10 13:56:40 -04:00
|
|
|
|
|
|
|
|
```sh
|
2026-08-11 10:37:03 -04:00
|
|
|
game_commit="$(git -C ../netfishing rev-parse HEAD)"
|
|
|
|
|
./scripts/stage-build.sh \
|
|
|
|
|
../netfishing/builds/vX.Y.Z-alpha/server-linux-x86_64 \
|
|
|
|
|
X.Y.Z-alpha \
|
|
|
|
|
"${game_commit}"
|
2026-08-10 13:56:40 -04:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The staged binaries under `dist/` are release inputs and are intentionally not
|
2026-08-11 10:37:03 -04:00
|
|
|
tracked by Git. `dist/BUILD_INFO` records the version, full game commit, export
|
|
|
|
|
preset, platform, and binary hashes. Packaging refuses a version mismatch or
|
|
|
|
|
failed internal checksum.
|
2026-08-10 13:56:40 -04:00
|
|
|
|
|
|
|
|
Create a deterministic native archive after staging:
|
|
|
|
|
|
|
|
|
|
```sh
|
2026-08-10 23:23:32 -04:00
|
|
|
./scripts/package-native.sh X.Y.Z-alpha
|
2026-08-10 13:56:40 -04:00
|
|
|
```
|
|
|
|
|
|
2026-08-11 10:37:03 -04:00
|
|
|
## Install or update natively
|
2026-08-10 13:56:40 -04:00
|
|
|
|
2026-08-11 10:37:03 -04:00
|
|
|
The native archive contains its `BUILD_INFO` and internal checksums. Transfer
|
|
|
|
|
both the archive and its adjacent `.sha256` file, then install it:
|
2026-08-10 13:56:40 -04:00
|
|
|
|
|
|
|
|
```sh
|
2026-08-11 10:37:03 -04:00
|
|
|
sudo ./scripts/install-native-release.sh \
|
|
|
|
|
packages/netfishing-dedicated-server-X.Y.Z-alpha-linux-x86_64.tar.gz \
|
|
|
|
|
packages/netfishing-dedicated-server-X.Y.Z-alpha-linux-x86_64.tar.gz.sha256
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Releases are immutable directories under `/opt/netfishing-server/releases`.
|
|
|
|
|
The installer verifies the outer archive hash, internal hashes, manifest, and
|
|
|
|
|
platform before atomically changing `/opt/netfishing-server/current`. When the
|
|
|
|
|
sample systemd unit is already active, a failed start automatically restores
|
|
|
|
|
the prior release. Manually return to the recorded previous release with:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
sudo ./scripts/rollback-native.sh
|
2026-08-10 13:56:40 -04:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Copy `config/server.cfg.example` to `/etc/netfishing-server.cfg` and adjust the
|
|
|
|
|
room name, UDP port, player limit, and public-listing preference. Forward the
|
|
|
|
|
configured UDP port through the host firewall and router when accepting
|
|
|
|
|
Internet players.
|
|
|
|
|
|
|
|
|
|
The data directory contains the server identity and moderation state. Keep it
|
|
|
|
|
persistent and back it up; replacing it changes the server fingerprint shown
|
|
|
|
|
to returning players.
|
|
|
|
|
|
|
|
|
|
Configuration is applied in this order: config file, environment variables,
|
|
|
|
|
then command-line overrides. Supported command-line options are `--name`,
|
|
|
|
|
`--bind`, `--port`, `--max-players`, `--data-dir`, `--discovery-url`,
|
|
|
|
|
`--public`, and `--private`. Value options use `--option=value`. Keep the first
|
|
|
|
|
standalone `--` shown above; it separates Godot engine flags from server flags.
|
|
|
|
|
|
|
|
|
|
Public listing requires the discovery URL and a publicly reachable ENet UDP
|
|
|
|
|
port. Discovery makes a server findable but does not relay gameplay traffic.
|
|
|
|
|
|
2026-08-11 10:37:03 -04:00
|
|
|
For a systemd installation, create a dedicated `netfishing` system user,
|
|
|
|
|
install the sample configuration and environment files under `/etc`, and copy
|
|
|
|
|
`systemd/netfishing-server.service` to the system unit directory. The unit runs
|
|
|
|
|
the atomic `current` release link and expects `/var/lib/netfishing-server` to be
|
|
|
|
|
writable by that user. When migrating an older direct-path installation, stop
|
|
|
|
|
the service, run the installer once, replace/reload the unit, and then start it.
|
|
|
|
|
After that one-time migration, future upgrades can be applied while the unit
|
|
|
|
|
is running.
|
|
|
|
|
|
|
|
|
|
For a direct foreground run from staged build inputs:
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
./dist/NETfishingServer.x86_64 \
|
|
|
|
|
-- \
|
|
|
|
|
--config=/etc/netfishing-server.cfg \
|
|
|
|
|
--data-dir=/var/lib/netfishing-server
|
|
|
|
|
```
|
2026-08-10 13:56:40 -04:00
|
|
|
|
|
|
|
|
## Run with Docker Compose
|
|
|
|
|
|
|
|
|
|
```sh
|
2026-08-11 10:37:03 -04:00
|
|
|
./scripts/stage-build.sh \
|
|
|
|
|
../netfishing/builds/vX.Y.Z-alpha/server-linux-x86_64 \
|
|
|
|
|
X.Y.Z-alpha \
|
|
|
|
|
"$(git -C ../netfishing rev-parse HEAD)"
|
2026-08-10 13:56:40 -04:00
|
|
|
docker compose build
|
|
|
|
|
docker compose up -d
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Set values such as `NETFISHING_SERVER_NAME`, `NETFISHING_SERVER_PORT`,
|
|
|
|
|
`NETFISHING_SERVER_MAX_PLAYERS`, and `NETFISHING_SERVER_PUBLIC` in a local
|
|
|
|
|
`.env` file. The Compose service runs without Linux capabilities, uses a
|
|
|
|
|
read-only root filesystem, and stores persistent state in a named volume.
|
|
|
|
|
|
|
|
|
|
## Steam distribution
|
|
|
|
|
|
|
|
|
|
Publish the server as a separate Steam Tool AppID/depot linked to the base
|
|
|
|
|
game. Replace the placeholders in copies of the files under `steam/`, then use
|
|
|
|
|
SteamCMD to upload the staged `dist/` directory. Keep the example files free of
|
|
|
|
|
private Steam credentials.
|