-
Friends
From their homes, using the server's name.
-
Router
Only has the ports of running servers open, with rules created by the automation.
-
Cloudflare DNS
One name per server, which only exists while it's running. No proxy: games don't speak HTTP.
-
Automatic publisher
Every minute it asks the panel what's running and adjusts router and DNS. On the router it can only touch its own rules.
-
Discord
A channel where each server has its status message: on or off, who's in, the address and the link to join.
-
Public servers site
A single page with the servers live, grouped by game, with «Copy» and «Connect with Steam», who's on Discord and the rules. It doesn't link to the AMP panel.
-
Bot admin panel
Only from home or the VPN, behind the internal door with two-factor. This is where servers AMP already publishes get registered and how they show up gets edited.
-
Hypervisor
Power cuts included: with no UPS, the server switches off abruptly.
-
Minecraft proxy
One port for every Minecraft world: depending on the name you join with, it sends you to one world or another.
-
Container firewall
Inbound blocked except declared ports. The panel syncs them every five minutes; the panel and SSH, only from home.
-
AMP panel
Where servers are started, stopped and configured. No longer published on the internet.
-
Status bot
Reads the panel with an unprivileged user and keeps the Discord messages and the public site up to date.
- JavaScript / TypeScript
- Docker
-
Modded Minecraft
The main server, with almost ninety mods, several of them for performance.
-
Other Minecraft worlds
Smaller worlds, behind the same proxy.
-
Steam games
Dedicated servers that start when someone wants to play.
-
Instance manager
Each server is its own Docker container. The manager starts, stops and updates them.
- Linux (Debian, Alpine, Arch)
-
Four mirrored disks
They came with write cache off. Turned on and saved on the disk itself: fsync writes, from 108 to 946 per second.
- ZFS
- Linux (Debian, Alpine, Arch)
-
CPU on a single processor
The hypervisor gave threads from both processors: Java had its memory on one and its work on the other. Now the container uses six cores of a single one.
-
Tuned Java
Memory reserved from start-up, huge pages and no forced clean-ups every 5 seconds. Compression only once: at the proxy.
-
ZFS cache in RAM
It already served over 98 % of reads: no need to touch it.
-
Users file
Where AMP keeps accounts and permissions. With a power cut mid-write, it ends up empty.
-
Backup every 30 minutes
From the hypervisor, outside the container, the last 100 versions.
- Linux (Debian, Alpine, Arch)
-
Check the backup
An empty or «{}» copy doesn't count as a backup: the script rejects it and warns.
- Linux (Debian, Alpine, Arch)
-
Monitoring
Watches the container and the servers' processes.