Skip to content

Connect a game server

This is the second of the two installs, and it happens on the machine that runs your game server. One binary deploys the plugin, installs the sidecar, registers its service, and prints four values for you to paste into the website.

It never contacts your website, and it never starts or stops your shard.

# Component Where it goes
1 The plugin overlay — C# source ServUO compiles at boot into your ServUO tree
2 The uo-link sidecar — a small Rust service a system directory, plus a service
3 A record of the run install.json, with per-file hashes and backups
ServUO shard ──loopback TCP 127.0.0.1:7788──► uo-link sidecar ──HTTP + WebSocket──► website

The shard dials out. It never listens for the website and is never reachable from the internet; only the sidecar is exposed, and only to your site.

  1. Download the binary for your OS, and SHA256SUMS, from the installer releases page (v0.1.1).

    Releases are unsigned — there is no code-signing certificate, so that checksum file is the whole trust anchor. Check it:

    Terminal window
    sha256sum -c SHA256SUMS --ignore-missing
    chmod +x runicgateway-installer-linux-x86_64

    On Windows, (Get-FileHash .\runicgateway-installer-windows-x86_64.exe -Algorithm SHA256).Hash and compare. Windows will also show a SmartScreen prompt on first run, for the same reason.

  2. Stop the shard. ServUO.exe locks Scripts.dll and rewrites Saves/ on exit, so the installer refuses to deploy under a running server.

  3. Run it, elevated.

    Terminal window
    sudo ./runicgateway-installer-linux-x86_64 install

    Add --verify first if you want to see every change it would make and write nothing.

    It asks four things: your ServUO root, whether to apply the optional patch tier, the hostname your website should use to reach this machine, and your site’s URL (used only to print a link at the end).

  4. Read the summary. It reports the overlay sync file by file, the sidecar binary and its verified hash, the config and database paths, and the service state. Then it says what you must do next — restart ServUO yourself, because it will not do that for you.

Most of the plugin is added files, which is why the base install is a safe copy. Two features need edits to stock ServUO sources, and those are opt-in, off unless you say yes, and refused where the target lines are not stock. Skipping the tier costs you vendor-sale events and in-game moderation audit forwarding; everything else works.

The tier is written and tested against stock ServUO 57.4. On any other version it is unsupported and untested, and the prompt makes you answer past a warning.

A successful run ends by printing the one step it cannot do for you:

Base URL http://shard.example.com:8080
WebSocket URL ws://shard.example.com:8080/ws
Protocol version 4
Auth token 4f9c… (also in sidecar.toml)

Every value comes from asking the installed sidecar itself, so it cannot drift from what the service actually runs.

On the site, sign in as an administrator and open Shard (uo-link) in the admin sidebar — /admin/uo/link. Tick Enable the shard integration, paste Base URL, WebSocket URL, Auth token and Protocol, and save. The ingest client restarts immediately.

The token is encrypted at rest and never returned to any client — losing it means reading it back from sidecar.toml on the shard host, not from the website.

The sidecar binds 127.0.0.1:8080, reachable only from the shard host. If the site runs elsewhere, widen the bind and then narrow the access:

  1. Set [web] bind in sidecar.toml to 0.0.0.0:8080 and restart the service.
  2. Firewall that port to your website’s address only. The auth token is always on, but it travels as a plain bearer token — the sidecar speaks HTTP, not HTTPS.
  3. If the two hosts are not on a trusted network, put the sidecar behind a TLS reverse proxy or a VPN link and give the website the https:// / wss:// URLs.

Leave [shard] bind on 127.0.0.1:7788. That socket accepts inbound commands to the game, and being loopback-only is what makes that safe.

Next: Verify the whole stack — because a successful file copy is not a working bridge.