netfishing-dedicated-server/README.md

110 lines
4.2 KiB
Markdown
Raw Normal View History

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
./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.