From abd51ac4881eedb3578c902f963823d25fa4bd12 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 28 Jun 2026 18:32:57 +0000 Subject: [PATCH] Add Phase 13: Minecraft server VMs on R720 Documents creating four Minecraft VMs (201-204) on the second Proxmox host (R720), following the same wizard-driven setup style as Phases 11-12 but without GPU/Coral/raw-disk passthrough, which only applies to the R730xd. Adds matching VM config templates. --- README.md | 214 ++++++++++++++++++++++++++++++++++++ vm-configs/201.conf.example | 24 ++++ vm-configs/202.conf.example | 24 ++++ vm-configs/203.conf.example | 25 +++++ vm-configs/204.conf.example | 25 +++++ 5 files changed, 312 insertions(+) create mode 100644 vm-configs/201.conf.example create mode 100644 vm-configs/202.conf.example create mode 100644 vm-configs/203.conf.example create mode 100644 vm-configs/204.conf.example diff --git a/README.md b/README.md index 95989df..36224fa 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ one document. - [Phase 10 — GPU Passthrough Setup](#phase-10--gpu-passthrough-setup) - [Phase 11 — Create the VMs](#phase-11--create-the-vms) - [Phase 12 — Deploy Frigate in VM 101](#phase-12--deploy-frigate-in-vm-101) +- [Phase 13 — Minecraft Server VMs (R720)](#phase-13--minecraft-server-vms-r720) --- @@ -3261,6 +3262,219 @@ stats. Navigate to **System → Stats** to confirm: --- +## Phase 13 — Minecraft Server VMs (R720) + +**What this phase does:** Creates four Minecraft server VMs on a second, +separate Proxmox host — a Dell R720 — using the same wizard-driven VM setup +as Phases 11/12, but without any of the GPU passthrough, Coral USB, or raw +drive passthrough work. Minecraft needs CPU, RAM, and disk — nothing else. + +**Hardware (this host, not the R730xd):** + +| Component | Detail | +|-----------|--------| +| Server | Dell PowerEdge R720 | +| CPU | 2x Intel Xeon E5-2697 v2 (12c/24t each — 24 cores / 48 threads total) | +| RAM | 125 GiB | +| Storage | 5x spinning HDD behind PERC H710 (no SSD) — `local-lvm` | +| Network | `eno1` → `vmbr0`, single 1GbE link | +| Proxmox | VE 8.1.3 | + +> **No GPU passthrough, no Coral, no raw disk passthrough on this host.** +> Skip `gpu-passthrough-setup.sh`, `build-bay-map.sh`, and `perc-nonraid.sh` +> entirely — those only apply to the R730xd's Frigate/storage workload. +> VM disks here are plain `local-lvm` virtual disks, same as VM 102 in the +> R730xd setup. + +> **All HDDs, no SSD.** Minecraft autosaves and region-file writes are small +> and frequent. Expect more I/O wait under heavy load (many players, modded +> redstone/farms) than an SSD host would show. If a server feels laggy under +> load, check `iostat -x 2` on the Proxmox host before assuming it's CPU. + +**Prerequisites:** +- VMs 101, 102, 106 removed from this host (freed full 24c/48t, 125GiB, and + all five disks for this phase) +- Ubuntu Server 24.04.4 LTS ISO uploaded to this host's `local` storage + (same download step as Phase 11, Step 11.1/11.2 — repeat on the R720) + +--- + +### Step 13.1 — Create VM 201 (Survival/Paper #1) via the wizard + +In the R720's Proxmox web UI, click **Create VM**. + +**Tab: General** + +| Field | Value | +|-------|-------| +| VM ID | 201 | +| Name | mc-survival-1 | + +**Tab: OS** + +| Field | Value | +|-------|-------| +| ISO image | ubuntu-24.04.4-live-server-amd64.iso | +| OS Type | Linux | +| Version | 6.x - 2.6 Kernel | + +**Tab: System** + +| Field | Value | +|-------|-------| +| Graphic card | Default | +| Machine | i440fx | +| BIOS | SeaBIOS | +| SCSI Controller | VirtIO SCSI Single | +| Qemu Agent | checked | + +> **Why SeaBIOS/i440fx here instead of OVMF/q35 like Phases 11–12?** Those +> were required for GPU passthrough on the R730xd. Nothing on this host is +> being passed through, so there's no reason to take on UEFI's extra +> complexity (Secure Boot prompts, EFI disk, etc.). + +**Tab: Disks** + +| Field | Value | +|-------|-------| +| Bus/Device | SCSI / 0 | +| Storage | local-lvm | +| Disk size (GiB) | 20 | +| Cache | Write back | +| Discard | checked | +| IO thread | checked | + +**Tab: CPU** + +| Field | Value | +|-------|-------| +| Sockets | 1 | +| Cores | 4 | +| Type | host | + +**Tab: Memory** + +| Field | Value | +|-------|-------| +| Memory (MiB) | 8192 | +| Ballooning | unchecked | + +> **Why disable ballooning?** Minecraft's JVM heap grabs and holds memory. +> Letting Proxmox reclaim "idle" RAM from the VM fights with the JVM and can +> trigger GC pauses or swapping inside the guest. Fix the allocation instead. + +**Tab: Network** + +| Field | Value | +|-------|-------| +| Bridge | vmbr0 | +| Model | VirtIO (paravirtualized) | +| Firewall | checked | + +Click **Finish**, then **Start** the VM and install Ubuntu Server normally +(same installer flow as Phase 11 — set hostname `mc-survival-1`, enable +OpenSSH server during install). + +--- + +### Step 13.2 — Repeat for VMs 202–204 + +Same wizard steps as 13.1, changing only VM ID/name, cores, and memory: + +| VM ID | Name | Cores | Memory | Disk | Notes | +|-------|------|-------|--------|------|-------| +| 201 | mc-survival-1 | 4 | 8192 MiB | 20G | Paper, vanilla-like | +| 202 | mc-survival-2 | 4 | 8192 MiB | 20G | Paper, vanilla-like | +| 203 | mc-modded | 6 | 12288 MiB | 30G | Forge/NeoForge modpack | +| 204 | mc-minigames | 2 | 4096 MiB | 15G | Creative/minigames | + +This commits 16 of 24 cores and 32 of 125 GiB RAM — leaving headroom for +Proxmox itself and room to add a fifth server later without resizing +anything. + +--- + +### Step 13.3 — Install Java and the server jar (inside each VM) + +SSH into each VM and run: + +```bash +sudo apt update && sudo apt install -y openjdk-21-jre-headless +sudo useradd -m -s /bin/bash minecraft +sudo mkdir -p /opt/minecraft +sudo chown minecraft:minecraft /opt/minecraft +``` + +Download the server jar as the `minecraft` user (Paper for 201/202/204, +the modpack's server pack for 203), accept the EULA: + +```bash +sudo -u minecraft bash -c ' +cd /opt/minecraft +curl -o server.jar "" +echo "eula=true" > eula.txt +' +``` + +--- + +### Step 13.4 — Create a systemd service per VM + +```bash +sudo tee /etc/systemd/system/minecraft.service <<'EOF' +[Unit] +Description=Minecraft Server +After=network.target + +[Service] +User=minecraft +WorkingDirectory=/opt/minecraft +ExecStart=/usr/bin/java -Xms2G -Xmx -jar server.jar nogui +Restart=on-failure +RestartSec=10 + +[Install] +WantedBy=multi-user.target +EOF + +sudo systemctl daemon-reload +sudo systemctl enable --now minecraft.service +``` + +Set `-Xmx` to roughly RAM minus 1.5–2 GiB headroom for the OS (e.g. 6G heap +on the 8 GiB VMs, 10G heap on the 12 GiB VM, 2.5G heap on the 4 GiB VM). + +--- + +### Step 13.5 — Open ports + +One port per server, forwarded from the router/firewall to each VM's IP: + +| VM | Port | +|----|------| +| 201 | 25565 | +| 202 | 25566 | +| 203 | 25567 | +| 204 | 25568 | + +```bash +sudo ufw allow 25565/tcp # adjust per VM +``` + +--- + +### Phase 13 complete — summary + +| What is done | Status | +|---|---| +| VMs 201–204 created with fixed (non-ballooned) CPU/RAM | ✓ | +| Ubuntu Server installed in each, SSH access confirmed | ✓ | +| Java + server jar installed, EULA accepted | ✓ | +| systemd service running each server, restarts on crash | ✓ | +| Ports forwarded per server | ✓ | + +--- + ## Troubleshooting ### GPU not passing through — still shows `nouveau` diff --git a/vm-configs/201.conf.example b/vm-configs/201.conf.example new file mode 100644 index 0000000..cda4c5a --- /dev/null +++ b/vm-configs/201.conf.example @@ -0,0 +1,24 @@ +# Proxmox VM 201 — Minecraft Survival #1 (R720) +# +# Copy to /etc/pve/qemu-server/201.conf on the R720 host. +# No GPU, no USB, no raw drive passthrough — plain local-lvm disk. + +agent: 1 +bios: seabios +boot: order=scsi0 +cores: 4 +cpu: host +machine: i440fx +memory: 8192 +balloon: 0 +name: mc-survival-1 +numa: 0 +ostype: l26 +scsihw: virtio-scsi-single +sockets: 1 + +# OS + world disk +scsi0: local-lvm:vm-201-disk-0,cache=writeback,discard=on,iothread=1,size=20G + +# Network +net0: virtio,bridge=vmbr0,firewall=1 diff --git a/vm-configs/202.conf.example b/vm-configs/202.conf.example new file mode 100644 index 0000000..25bb938 --- /dev/null +++ b/vm-configs/202.conf.example @@ -0,0 +1,24 @@ +# Proxmox VM 202 — Minecraft Survival #2 (R720) +# +# Copy to /etc/pve/qemu-server/202.conf on the R720 host. +# No GPU, no USB, no raw drive passthrough — plain local-lvm disk. + +agent: 1 +bios: seabios +boot: order=scsi0 +cores: 4 +cpu: host +machine: i440fx +memory: 8192 +balloon: 0 +name: mc-survival-2 +numa: 0 +ostype: l26 +scsihw: virtio-scsi-single +sockets: 1 + +# OS + world disk +scsi0: local-lvm:vm-202-disk-0,cache=writeback,discard=on,iothread=1,size=20G + +# Network +net0: virtio,bridge=vmbr0,firewall=1 diff --git a/vm-configs/203.conf.example b/vm-configs/203.conf.example new file mode 100644 index 0000000..aea0dff --- /dev/null +++ b/vm-configs/203.conf.example @@ -0,0 +1,25 @@ +# Proxmox VM 203 — Minecraft Modded (R720) +# +# Copy to /etc/pve/qemu-server/203.conf on the R720 host. +# No GPU, no USB, no raw drive passthrough — plain local-lvm disk. +# Larger allocation — modpacks (Forge/NeoForge) need more heap than vanilla/Paper. + +agent: 1 +bios: seabios +boot: order=scsi0 +cores: 6 +cpu: host +machine: i440fx +memory: 12288 +balloon: 0 +name: mc-modded +numa: 0 +ostype: l26 +scsihw: virtio-scsi-single +sockets: 1 + +# OS + world disk +scsi0: local-lvm:vm-203-disk-0,cache=writeback,discard=on,iothread=1,size=30G + +# Network +net0: virtio,bridge=vmbr0,firewall=1 diff --git a/vm-configs/204.conf.example b/vm-configs/204.conf.example new file mode 100644 index 0000000..6805553 --- /dev/null +++ b/vm-configs/204.conf.example @@ -0,0 +1,25 @@ +# Proxmox VM 204 — Minecraft Minigames/Creative (R720) +# +# Copy to /etc/pve/qemu-server/204.conf on the R720 host. +# No GPU, no USB, no raw drive passthrough — plain local-lvm disk. +# Smallest allocation — lighter player count / simpler worlds. + +agent: 1 +bios: seabios +boot: order=scsi0 +cores: 2 +cpu: host +machine: i440fx +memory: 4096 +balloon: 0 +name: mc-minigames +numa: 0 +ostype: l26 +scsihw: virtio-scsi-single +sockets: 1 + +# OS + world disk +scsi0: local-lvm:vm-204-disk-0,cache=writeback,discard=on,iothread=1,size=15G + +# Network +net0: virtio,bridge=vmbr0,firewall=1