Hosting a server
Get listed
A server without a key works exactly the same, and anyone can join it by address through Direct Connect. But it isn’t in the server list, and it doesn’t check players’ names.
With a key the server introduces itself to NodeMP, shows up in the launcher and on nodemp.com/servers, and every player’s account is verified on join.
Create a key
Section titled “Create a key”You need a NodeMP account with a confirmed e-mail and a linked Discord account. Discord is linked under Connections in your account.
- Sign in at nodemp.com and open My servers.
- Enter a label you’ll recognise the server by, and create the key.
- The site shows the Host ID and the Host secret. The secret is shown once: copy it now.
One key is for one server. My servers lists all your keys and when each server last checked in.
Put the key into the settings
Section titled “Put the key into the settings”server.toml already has a [listing] table with empty url, host_id and host_secret. Fill
them in:
[listing]url = "https://api.nodemp.com"host_id = "…"host_secret = "…"The same as environment variables, for Docker or systemd. These names didn’t change:
NODE_DIRECTORY_URL=https://api.nodemp.comNODE_DIRECTORY_HOST_ID=…NODE_DIRECTORY_HOST_SECRET=…Restart the server. All three are needed. With url empty the server just isn’t announced; with
url set and a key missing, it starts unlisted and says so in the log. Treat the secret like a
password.
What happens next
Section titled “What happens next”At start the server logs announcing this server to https://api.nodemp.com, and once the key is
accepted, listed in the server browser. From then on it reports regularly, usually every 15
seconds: name, map, players and slots, tags and the list of mods. If NodeMP can’t be reached, the server keeps running
and retries on its own.
NodeMP also checks from outside that it can reach the server on its port. A server it can’t reach
isn’t shown, even with listed in the server browser in the log. So the port has to be open and
forwarded, and you have to test it from outside your own network.
While the server is listed, every join is checked: the player’s launcher brings a one-time ticket, the server checks it with NodeMP and gets the account name. A Test Drive player gets a guest name. A server without a key checks nothing and takes the name the launcher sends.
How the server looks in the list
Section titled “How the server looks in the list”The other [listing] keys shape the server’s card and who it lets in:
[listing]description = "Freeroam on West Coast, no ramming"mode = "freeroam"tags = "freeroam, no-crash, eu"guests = truedescription: one or two sentences under the name.mode: one word, its own column in the list:freeroam,racing,roleplay…tags: up to eight, comma-separated. Players filter the list by them.guests = falseturns away players without an account. The launcher marks such a server Account required.public = falsekeeps the server out of the public list. People who know the address still see it online.admit_when_downdecides what happens when NodeMP can’t be reached at the moment of a join:false(the default) refuses the player,truelets them in as an unverified guest.
fingerprint, ca_file and allow_http are only for a server list you run yourself. Leave them
out for api.nodemp.com.
In the server’s details, under the map, the launcher and
nodemp.com/servers show buttons to the server’s own pages, each with
its domain written on it. There are five, all in [listing]:
[listing]discord = "https://discord.gg/abc123"rules = "https://example.com/rules"site = "https://example.com"donate = "https://example.com/donate"voice = "mumble://voice.example.com:64738"- A link starts with
https://.voicemay also bemumble://orts3server://; such an address is copied rather than opened, because only the voice app can open it. discordhas to be an invite:https://discord.gg/…orhttps://discord.com/invite/….- At most 256 characters, no spaces, no
user:password@. - A link that breaks these rules is left out at start, with a warning that names the key:
[listing] discord = "…" is not a link the server list shows: …; left out. The rest of the listing works as usual.
In the environment they are NODE_DIRECTORY_LINK_DISCORD, NODE_DIRECTORY_LINK_RULES,
NODE_DIRECTORY_LINK_SITE, NODE_DIRECTORY_LINK_DONATE and NODE_DIRECTORY_LINK_VOICE.
The picture
Section titled “The picture”The server’s card shows a picture of the map. It comes from:
preview, if you set it: a JPEG or PNG of your own, at most 2 MB. A relative path starts in the working directory.- Otherwise, for a custom map in
content/, the map’s own picture from its zip. - For a stock map, NodeMP shows the game’s own picture and the server sends nothing.
The server’s fingerprint
Section titled “The server’s fingerprint”Launchers know a server by the fingerprint of its TLS certificate, logged at every start:
TLS 1.3 enabled — certificate fingerprint (SHA-256): …. It changes only if node_cert.pem and
node_key.pem are lost or replaced, so keep them in your backups. Players who joined by address
remember the fingerprint and won’t connect to a server with a different one.
Change or delete the key
Section titled “Change or delete the key”In My servers, Rotate secret gives a new secret (also shown once) and the old one stops
working. Put the new host_secret in and restart. Do this whenever the secret might have leaked.
Delete removes the key: the server keeps running but drops out of the list.
The server isn’t in the list
Section titled “The server isn’t in the list”| In the log | Why | What to do |
|---|---|---|
The directory refused this server's credentials: … |
A wrong Host ID or secret, a rotated secret or a deleted key. | Compare with My servers. If unsure, rotate the secret and put in the new one. |
This server is NOT announced to a directory: … |
host_id or host_secret is missing. |
Fill in url, host_id and host_secret in [listing]. |
server.toml has settings this server does not read: [listing] Url, … |
The keys under the names from before 1.9.0, on a 1.9.0 server. | Write them as url, host_id and host_secret, or update the server to 1.9.1. |
Could not reach the directory at https://api.nodemp.com: … |
No outgoing HTTPS, a DNS problem, or NodeMP is down. | Try curl https://api.nodemp.com/healthz on the server’s machine. The server retries on its own. |
listed in the server browser, but the server isn’t in the launcher |
NodeMP can’t reach the port from outside, or public = false. |
Open and forward the port. The list updates within about 15 seconds. |
Players are refused with The server could not verify your account with the directory (…) |
NodeMP couldn’t be reached when they joined. | Wait. On a server that allows Test Drive you can turn on admit_when_down. |