NGCP Game server control panel
Documentation
Contents

Getting started

The Linux appliance

The NGCP appliance is Ubuntu Server 24.04 with NGCP already on it: the panel (controller and PostgreSQL), the game-server agent, SteamCMD’s 32-bit libraries, a firewall and a setup that runs on the first boot. Use it for a new Linux server or VM; on an existing Linux server install the packages instead.

Downloads

File For
ngcp-appliance-X.Y.Z-installer.iso Physical servers and any hypervisor: boot it, pick the disk and network, it installs unattended
ngcp-appliance-X.Y.Z.vhdx + New-NgcpVM.ps1 Hyper-V (Generation 2, Secure Boot with the Microsoft UEFI Certificate Authority template)
ngcp-appliance-X.Y.Z.ova VMware ESXi / Workstation, VirtualBox, Proxmox (import OVA)

The VM images have a 64 GB disk (they grow as they fill). Give the VM at least 4 CPUs and 8 GB of memory for ArmA 3 with headless clients; see Requirements.

Hyper-V

.\New-NgcpVM.ps1 -Vhdx .\ngcp-appliance-X.Y.Z.vhdx -Name NGCP01 -SwitchName "LAN" -VlanId 5

The script copies the disk into the VM folder, creates a Generation 2 VM (4 CPUs, 8 GB by default; -ProcessorCount, -MemoryBytes) and starts it. Open its console for the first boot.

Installer ISO

Boot the ISO and choose Install the NGCP appliance. The Ubuntu installer asks only for the network and the disk (the whole disk is used, with LVM), installs everything from the disc (no internet needed) and restarts.

First boot

The setup appears on the server’s screen. Arrow keys or numbers move, Enter picks, Esc goes back one question; nothing changes until you confirm the summary.

  1. What is this server?

    Role Runs Firewall opens
    Panel and game servers (one server) panel, PostgreSQL, agent 8080, 8443, 2022
    Panel only panel, PostgreSQL 8080, 8443
    Game servers only agent 2022

    Game-server ports are opened by the agent itself, per service, when a server is created.

  2. Host name.

  3. Network: DHCP or a fixed address (address/prefix, gateway, DNS). Applied last.

  4. Time zone (the server’s clock; scheduled tasks use their own zones).

  5. Password of ngcpadmin, the administrator account for the console and SSH (at least 10 characters).

  6. SSH key (optional). With a key, SSH accepts the key only; without one, the password.

  7. Who may reach SSH: the local network (default), anywhere, or nobody.

  8. Game servers only: join a panel now by pasting the Linux command from the panel (Nodes, Add a node), or the panel address, token and CA hash. You can also join later.

At the end the screen shows the panel’s setup address with its token, for example http://192.168.1.20:8080/setup?token=.... Open it in a browser and finish the setup: choose the built-in database; with Panel and game servers leave This server runs game servers too ticked and the server appears under Nodes a few seconds later.

The server menu

Sign in on the console as ngcpadmin: the server menu opens.

Item Does
Status Role, addresses, services, the panel’s address (or its setup address)
Join a panel Game-server roles: enroll the agent with a panel
Panel log, Game-server agent log The last 300 lines of ngcp-controller / ngcp-agent
Restart NGCP Restarts the panel and/or the agent (game servers stop and start again)
Change a setting Host name, network, time zone, password, SSH key, SSH access, role
Run the whole setup again All questions again; the firewall keeps the game servers’ rules
Leave the menu A shell; sudo ngcp-console opens the menu again
Restart / Shut down the server

The same from SSH: sudo ngcp-setup --status, sudo ngcp-setup --step network (or role, hostname, timezone, password, ssh, firewall, join), sudo ngcp-console.

Unattended first boot (seed)

For many servers, answer the first boot with a seed: a small ISO labelled NGCPSEED with a seed.json, attached to the VM’s DVD drive. It is read once, ejected, and the screen says so; detach it and delete it afterwards (it holds passwords).

{
  "role": "panel+node",
  "hostname": "ngcp01",
  "timezone": "Europe/London",
  "admin": { "passwordHash": "$6$...", "sshKeys": ["ssh-ed25519 AAAA... admin@pc"] },
  "sshFrom": "lan",
  "network": { "mode": "static", "address": "192.168.1.20/24", "gateway": "192.168.1.1", "dns": ["192.168.1.1"] },
  "panel": { "adminUsername": "admin", "adminEmail": "[email protected]", "adminPassword": "a long passphrase",
             "publicUrl": "http://192.168.1.20:8080" }
}
Key Meaning
role panel+node, panel or node (required)
admin.passwordHash openssl passwd -6. Without it a random password is made and shown once on the screen
sshFrom lan (default), anywhere, none or a network such as 10.0.0.0/8
network {"mode": "dhcp"} (default) or a fixed address as above
panel Panel roles: also run the panel’s setup (built-in database). Without it the panel waits for its browser setup
join node role: {"controllerUrl": "...", "token": "ngcpe_...", "caHash": "sha256:..."}

Make the seed ISO on Linux with xorriso -as mkisofs -V NGCPSEED -J -r -o seed.iso seeddir/ (or any tool that sets the volume label). Seeds are read only from a CD/DVD drive. A USB stick labelled NGCPSEED is ignored.

Files

Path What
/etc/ngcp-release Marks the appliance (the first-boot setup runs only where it exists)
/var/lib/ngcp-appliance/role, .setup-done The role; the first boot is done
/var/log/ngcp-setup.log What the setup did (root only, no passwords)
/etc/ssh/sshd_config.d/10-ngcp.conf SSH: password sign-in only without a key, no root sign-in
/etc/netplan/01-ngcp.yaml A fixed address (other netplan files move to /etc/netplan/disabled-by-ngcp/)

Updating

Install newer packages over the old ones: sudo apt install ./ngcp-controller_X.Y.Z_amd64.deb ./ngcp-agent_X.Y.Z_amd64.deb ./ngcp-appliance_X.Y.Z_all.deb. The panel can also update its agents itself (Nodes, Update). Ubuntu’s own updates come from Ubuntu as usual.