Most 16-year-olds don’t have servers in their rooms

Dell R720XD on an undersized coffee table, messy cables and all

My servers: a Dell OptiPlex on the floor and a PowerEdge R720XD on an undersized IKEA coffee table. All networked together with beautiful red and yellow ethernet cables.

Hi, I’m Varun. I have a server in my room. Actually, I have two of them. And I write a ton of my own code for them. And I love it. This is a story documenting my homelab’s quiet beginnings, its spiralling evolution, and its uncertain future.

Today, I self-host a ton of stuff on my servers at home, including…

It all started during lockdown in 2020. I was 13 years old and had a little too much free time. I decided to delve into web development with static HTML websites, and before long, I was building more complex apps that required backends. I used Replit to host web apps, and random scripts (Discord bots, automation, etc.), and I ‘hosted’ Minecraft servers for my friends by simply leaving my computer on.

I wanted more control and reliability so I jumped head-first into the wonderful world of self-hosting.

My original rationale for choosing to host at home rather than cheap cloud options was purely out of a desire to learn (at my scale, it’s probably more cost effective to pay for The Cloud). I wanted to learn the whole stack, from user-facing frontends, to the backends and databases that support them, to the servers that actually host them. All I needed was a computer (that wasn’t my desktop) online 24/7.

I got my hands on a Dell OptiPlex with an i7-3770S and 8GB of RAM from eBay. The process of getting it shipped from the US to Switzerland was actually a little frustrating[1], with the seller initially sending the wrong amount of RAM and refusing to compromise. But after several weeks, everything was sorted out. I decided to stick with the pre-installed Windows 10 Pro (yes, as a server OS!) simply because I was familiar with it.

Fast forward a few months, and this is how the desktop looked.

Screenshot of my server running Windows 10. cmd windows neatly tiled.

I got very lucky with one thing: as it turns out, we have a static IPv4 address at home, making it significantly easier and more stable to host websites[2]. I keep everything behind Cloudflare, which sorts out SSL, DNS, and supposedly even DDoS protection too, for free.

There were several benefits to using Windows 10 as a server OS (for me at the time):

But after enough Windows updates forced me to deal with downtime and retile my windows to a pretty layout, I decided to make the scary jump to Ubuntu Server in November 2020. For some reason, I was entirely terrified by this. I had grown comfortable with my cozy Windows setup, and I was worried that I was going to lose control and the ability to have a quick overview of my system. But alas, it was time for change.

I got going with Linux pretty fast - I had already been fairly comfortable with the command line on Windows while writing code, and it turns out, the Unix command line is quite similar.

My setup looked something like this:

When needed, I would install third-party software, which occasionally needed their own dependencies and apt repositories, etc. This got very messy, very quickly. That’s when I discovered Docker, which was exactly the magic I needed. I use it to simplify installing and running third party software, while all my own code still runs directly on the server.

Fast forward around a year, I’m hosting some projects that actually have users (like Quickz and a social media platform I made) - and my server crashes while I’m at school. No big deal, I’ll just ssh in and see what’s wrong. Except I kept getting weird disk errors before finally getting locked out.

It turns out, I had simply run out of storage, deleting a few files at home bought me some more time. Moving forward, I had two options: replace the hard drive with something bigger, or let that be a problem for future-me.

I chose the third: explore getting a new server. At my current usage, the Dell OptiPlex was being pushed to its limits - 8GB of RAM and an i7-3770S weren’t really cutting it anymore.

In May 2022, I finalized the crazy decision to get a real rack-mounted server - I got a great deal on used drives (3x3TB), RAM (128GB of DDR3), and relatively powerful (read: power-hungry) CPUs (2xE5-2690) in a Dell PowerEdge R720XD, which I paid for with some bug bounty money I saved up.

I did not, however, consider the amount of space it would take up, the noise it would make, or the power it would draw. I solved ⅓ of those problems by using an unsupported hack to force iDRAC to limit the fan speed to a constant 10%.

My first impressions went something like this:

My server resting on an IKEA coffee table next to a TV

The server rested precariously on a coffee table next to the TV in the living room for a little bit. I’m sorry to my parents who had to put up with that[3]. It turns out, a rack and mounting equipment would have cost more than the server itself.

This time, I decided to use a hypervisor[4]. The server runs Proxmox, while the majority of the resources are dedicated to an Ubuntu Server VM (where everything runs neatly in Docker now). This gives me the flexibility to easily move things around in the future without having to set up everything again.

A screenshot of my Proxmox interface

It also gives me space to run a Xubuntu VM named ‘backdoor’ that I use Chrome Remote Desktop on. It lets me access my home network in a comfortable workspace from anywhere in the world. Yes, I could set up a VPN (like OpenVPN or WireGuard), but this even works on (artificially) limited devices like the iPad and works on my school’s public WiFi. And as a bonus, I don’t have to worry about bots trying to bruteforce their way in. It might sound crazy, but this approach works really well[5].

Ironically after all of this, I ended up missing something about the Replit experience. I still used Replit fairly often to spin up quick isolated applications for one-off projects/experiments and demos (eg. a tool for my friends to grab their portraits from the school website). Nothing beated the workflow of writing code in the web based IDE and having it live and accessible to everyone on the web immediately.

It was amazing how Replit was free, but (entirely understandably) they started to implement features to actually make money. Inactive repls get disabled if nobody uses them, and as far as I understand, it’s not even possible to host public dynamic websites for free anymore. I also wanted to use my own hardware and domain I controlled.

So I built my own self-hosted Replit clone. Built on Docker, ‘Dock’n’Roll’ is a single-user service where I can code a web app under a private interface at dockn.varun.ch, and have it accessible to the world live under *.varunbiniwale.com. I love ‘dockn’ for its simplicity and versatility, I use it all the time.

Dock’n’Roll’s admin interface, listing projects Dock’n’Roll’s admin interface, showing the IDE

‘Dock’n’Roll’ is also very useful for bug hunting, I use it to host random things I use to help me discover vulnerabilities like blind SSRFs and XSSs. Here’s an autogenerated image hosted at yourip.varunbiniwale.com.

And here’s a (slightly outdated) demo video

In conclusion, that’s my homelab — sure, it might be a little crazy, but it’s mine, and I love it.

One day, I’m going to graduate and move out for university. I don’t know where I’ll go yet, but I probably won’t be taking my servers with me, and I definitely wouldn’t want to burden my parents any more by keeping all my hardware running in their home.

It may not be for everyone, but if you’re a tinkerer (and willing to live with the consequences), I highly recommend trying out a little self hosting.

I’ve learned so much from my servers. Being able to self-host tools and have a place under my control to run my projects is liberating. Yes, it’s stressful at times, and perhaps not the most practical setup ever, but I’ve gained tons of skills that I would have never learned otherwise. Thank you Dell PowerEdge R720XD.

Footnotes

  1. On further thought, surely there were used computers somewhere in Switzerland...
  2. I don’t know why. My ISP offers them under their enterprise plans, but we definitely don’t have one of those. Not complaining though!
  3. It’s now in my sister’s former room (she graduated), but that doesn’t sound as good in a blog post title.
  4. I named the first server ‘box’. I named my laptop ‘rectangle’ (it’s shaped like one). I named my desktop ‘triangle’ (the strongest shape), and so naturally I named the new server ‘hypercube’.
  5. Google does this too! I found hints of an internal ‘Cloudtop’ service in the JavaScript bundle for Chrome Remote Desktop. It’s apparently a way for employees to access internal software remotely. Who’s the crazy one now?

Across the web