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.
-
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.
-
Host name.
-
Network: DHCP or a fixed address (address/prefix, gateway, DNS). Applied last.
-
Time zone (the server’s clock; scheduled tasks use their own zones).
-
Password of
ngcpadmin, the administrator account for the console and SSH (at least 10 characters). -
SSH key (optional). With a key, SSH accepts the key only; without one, the password.
-
Who may reach SSH: the local network (default), anywhere, or nobody.
-
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.