$ ssh andrea@homelab

HOMELAB_

One mini PC under a desk. A Minecraft server, a CMS in the making, a manga library, a media server and everything I learned by failing countless times.

machine
1
threads
12
RAM
32 GB
VM
2
services
7
backups
84
scroll to take it apart

The stack / 01 / 04

HARDWARE_

One mini PC under a desk.

  • i5-10500
  • 6C / 12T
  • 32 GB RAM
  • NVMe

Network / Who goes where

THREE DOORS_

Readers, players and the team all end up on the same box, but none of them uses the same way in. Each door only opens onto what it's meant for.

$ trace
HOME / MONZAREADERa browser somewherePLAYERMinecraft JavaTEAMFandemonio devsINTERNETpublicGATEWAYgateway + HTTPSPLAYITgame tunnelTAILSCALEprivate networkMANGA SERVERVM debianMEDIAmedia serverFANDECRAFTVM debian · PaperFANDEMONIOFandemonio VMMYSQLdatabase
  • web / HTTPS
  • game tunnel
  • private network

Community / Minecraft

FANDECRAFT_

A Minecraft server for the community, running 24/7 on the same box.

In October it hosted an event: build a temple for your oshi. The server list counted down to the end, everyone wore their oshi's tag in chat, and at midnight on the last day a script closed the doors and archived the world.

Version
Minecraft 26.3
Server
Paper 1.21
Slots
50, survival
Memory
up to 15 GB
GC
ZGC
Uptime
Restart=always
FandeCraft server icon
FandeCraft?/50

FandeCraft - Evento Costruisci il tempio della tua Oshi!

Evento: termina tra 9g 10h 21m 00s

> The server list during the October event. "Build your Oshi's temple!", with the countdown ticking live.

Custom plugins

  • > /oshiOshiCountdown

    Pick your oshi from a clickable list: the tag shows up next to your name in chat and in the tab list. It also put a live countdown to the end of the event straight into the server list.

  • > /tpaFandeTPA

    Ask to teleport to a friend, they get clickable Accetta / Rifiuta buttons. 3 seconds of warm-up (move and it's cancelled), requests expire after 60.

  • > sneak + axeTreeFeller

    Break a log while sneaking and the whole tree comes down. Only natural trees, up to 256 logs, and it stops before your axe breaks.

TreeFeller / try itlogs: 0

Hold Shift (or tap SNEAK), then hit the bottom log.

max 256 logs. the axe survives.

Backups

A server full of temples deserves a safety net.

fandecraft-backup.timer84 snapshots, always
000204060810121416182022
-6d
-5d
-4d
-3d
-2d
-1d
today
> Every 2 hours, kept for 7 days. The top row is next in line to be deleted, so the world can always go back a week.

The quiet VM

FANDEMONIO VM_

Its own Debian VM, with 2 vCPU, 6 GB of RAM and a dedicated NVMe, just for the Fandemonio CMS. MySQL is already running, and the team works on it over Tailscale and VS Code Remote. Strapi, Nuxt and a gateway come next.

THE FULL FANDEMONIO STORY →
$ ssh fandemonio-vm
fandemonio-vm:~$ cat TODO
[x] mysql
[x] tailscale + vs code remote
[ ] strapi
[ ] nuxt
[ ] gateway + https
[x] convince everyone MySQL > SQL Server

Lessons / The hard way

INCIDENT LOG_

Every homelab is a collection of mistakes that were fixed. Here are some of mine, written up like tickets, because old habits.

  1. INC-001RESOLVED

    /stop does not stop.

    The server runs with Restart=always, so stopping it from inside the game just restarts it. Great for uptime, confusing at 1 AM. The real off switch is systemctl.

  2. INC-002RESOLVED

    SQL Server was already there.

    Strapi doesn't support it. Found out early, flagged it, moved the CMS to MySQL before anyone built on top of the wrong thing.

  3. INC-003RESOLVED

    The event ended at midnight.

    A scheduled script closed the October event at 00:00 sharp and archived the world. Nobody had to stay up for it: automation means not setting an alarm.

  4. INC-004RESOLVED

    Java and memory had a talk.

    Up to 15 GB for one Minecraft server, and the garbage collector switched to ZGC. A full server deserves smooth ticks.