One of the first goals of getting a homelab started for me was to set up a Minecraft server. So after two months of having one and maintaining it and learning how everything worked, I set one up.
College and work kept me busy these last couple of months, but I got work on the server. I didn’t want anything crazy; my hardware isn’t a nything super special, so modding is out of the question for right now. I may revisit that at some point and make a modded MC server, but for now, I did a very generic server setup. I decided on using PaperMC as the tutorials and videos I saw seemed fairly straightforward. Of course, there were problems with the setup process.
Before I did anything, I installed some more RAM into the main node of my homelab. Now, I’m currently piecing together parts for a NAS, and while doing this, I was able to find some decent SODIMMs that were compatible. It doesn’t make the total a nice number, however, with the device sitting at 12gb of usable RAM, but I was able to match clock speeds at least. The annoying part about this is how some of these mini-form-factor computers keep their internals. Obviously, it is a small computer, that’s the whole appeal, but this created a very tight space for me to work in. However, it ended up being fine, and the node booted right back up with no problems.
Great, I made the LXC container I was gonna use, and still, I know Docker would be a better option here, I just haven’t made time to sit down and learn how Docker fully works. I know my time is coming; however, I’m going to have to learn when I get the NAS up and running. This is a problem for a later me kind of situation. So, after the LXC container, I logged in, went to do some basic updates for Java, and it failed. The reason it failed was that there was a DNS problem.
Why is there a DNS problem? I don’t see anything in any of my network config that would cause this. I spent like an hour troubleshooting internal problems, and I even got so concerned that it was a deeper problem, so I checked all of the network connections in my other Proxmox environments. They all worked, though, so it was only this newest one I messed up.
And that’s exactly what it was, me making a beginner mistake. I forgot the gateway for the static IP address I had assigned to the container, so of course, nothing was getting through. Simple though, changed it in the settings and restarted the container, and boom, fixed network connectivity. I started to install some of the dependencies that the server was gonna require, and realized that, for the Minecraft version I wanted to play on, Debian 12 (Bookworm) didn’t actually provide support for OpenJDK 21 through default or backport repositories. Great.
So I rebuilt the container with Debian 13 (Trixie) as the base OS, and that fixed the problem. During this part of the setup, I chose to go with PaperMC, as it offered better performance and improved tick handling with plugin support while also having plenty of tutorials online detailing how to set it up in Proxmox. I read up on it to confirm this, even though I knew that a lot of homemade servers were made this way. So, Downloaded the .jar file, ran it to get through the initial config, and made a dedicated user to help isolate it from root operations. I then, like a fool, accidentally messed up the file structure and flooded my root folder with all the Minecraft files, so I had to go back through and fix the structure layout. Twice.
After I was able to confirm the server was actually up, I set up a systemd service that started the server whenever the container was started, and peacefully shut it down. This also allowed for better logging with journalctl and screen for console access within the terminal.
After this, I needed to be able to access the server externally. That means for me to actually play this away from the homelab, I need to forward a port on my router. Once again, this isn’t my network I’m running this on, so I got my friend to get me admin privileges, and then it immediately locked us out of the admin login. So, instead of just waiting, we reset the entire router. I made sure we set up all the same services and fixed the router login. Once I picked a port to dedicate to this, I decided to set up an actual domain to connect from through Cloudflare, which is so cool that I’m able to do that. I verified connectivity through a netscan and confirmed that I was receiving a ping from the server outside of the home network. I whitelisted the server, gave myself OP, and whitelisted a couple of my friends.
To maintain long-term stability of the server, I set up an automated restart system that restarts the server every 3 hours and warns players in advance. I also made sure it forced a save to ensure nothing was lost.
The purpose of this server is to act as a “forever world”. This essentially means a world I pour a lot of effort into, maintain, and keep coming back to as the game updates. I wanted to do something like this for a while, as Minecraft has been one of my favorite games for a really long time. I wanted to be able to share this world and friends and allow them to see my progress and contribute to the world as a whole. So far, it has been working great. I did encounter a bug with my restart script, as sometimes it restarts incorrectly, so I’m sure there is a problem with my script. Otherwise, mark that as a homelab goal complete!
Also, RIP Limo the Parrot and Enoki the Mooshroom, stupid skeletons took you too soon.
