For many years now I’ve always had some form of personal server - at first it was an old midi tower computer standing in my childhood bedroom, later it became a cheap VPS, and since a few years ago it’s an Intel NUC sitting on a desk in my office.

The primary use and paradigm of these servers has shifted over time, depending on my current needs and interests.

Initially it was simply to have a persistent IRC shell I could reconnect to from wherever I was, at times it’s been game servers or home entertainment systems, one time I even ran it as a Proxmox host for several micro-services.

In essence, it’s been some level of equipment for “Home Lab” use.

Present Day Setup

Today the server is running Ubuntu 24.04.5 on an Intel NUC with a i5-1340P, 32GB of RAM and a 1TB NVMe SSD. It’s using my residential internet connection at 250/250 mbit, and I’ve got a dynamic DNS setup so that my domain (ahlgren.io) always points to it.

I’ll list the somewhat more interesting services I’m hosting and explain a bit on each below, but in general this server is used for three reasons:

  1. To reduce my reliance on external services.
  2. Give me some level of control over my data and use patterns.
  3. Teach me more about things which interest me.

nginx

Probably the center point of the server, nginx fulfills two purposes:

  1. Hosting webpages, like this one.
  2. Acting as a reverse proxy for services running on the server or elsewhere on my local network.

I’m vaguely aware that there might be more modern solutions to solve the use case nowadays, but I’m very used to nginx and know how to configure it for my needs.

Coupled with Certbot to automate SSL cert renewals via Let’s Encrypt, setting up a new subdomain for whatever service I’m currently adding is very quick and painless.

Forgejo

I’ve gone back and forth over the years, between hosting my own code on GitHub, self-hosting a Gitlab instance, going to the public Gitlab site, back to GitHub and then to a self-hosted Gitea - and now finally a self-hosted Forgejo instance.

My own Forgejo instance was very easy to set up (single binary) and took minimal effort to get exactly how I wanted it. While I’m not very prolific in personal projects, it’s nice to feel I have some control over what I have and what’s available publicly.

A later addition has been to set up a Forgejo Runner to perform actual CI/CD actions on my own server. Setting it up was actually a lot more work than the Forgejo instance itself, mainly because I got stuck on how to have it run with docker images instead of the actual server hosting it.

But now I’m able to do anything I used GitHub actions (or other CI solutions) for previously - for example this website is generated and deployed on each commit to a private git repository. It takes under a minute from pushing a commit to the site being updated.

NextCloud

There’s been many variants of this over the years: Dropbox, Google Drive, OneDrive, OwnCloud… Now I’ve used NextCloud for several years and it’s worked very well for my use cases. Mostly I use it to upload photos (as opposed to iCloud or Google Photos), and store some documents - but primarily I use it to sync my KeePass .kdbx file across my personal computer, work computer, and phone (previously Android, now iPhone).

A few years ago I also chose to liberate my contacts from Google and set up a CalDAV with a NextCloud plugin (though I’m no longer sure if it’s a plugin or part of NextCloud itself now…). This syncs contacts on my phone and also to my Thunderbird mail client.

Home Assistant

This started out since I wanted to find a good way to schedule some lights turning on and off in our home during my parental leave - since I walked around and turned on/off the same lights every day. It started with buying some cheap Z-Wave enabled light bulbs, and setting up a Raspberry Pi with Home Assistant.

It has since grown to a number of light bulbs, connected power switches, the Netatmo indoor and outdoor sensors, and Ubiquiti surveillance cameras. While I haven’t made any big automations out of this, it has released me from the Christmas lights timer hell scape I feared each year.

The next step, which has remained in the planning stages for well over a year now is to hook up our ceiling fans to Home Assistant so that I can toggle them by indoor temperature - but that has stalled as I’d need to pull out some electronics from the fan to get started and I haven’t had the time (or the nerve) to take that step.

AdGuard Home

For a long time I was running Pi-Hole from a Raspberry Pi, to get a wide low-level net protecting all my home devices from various bad sites and software, and to block various tracking systems in use. The Raspberry Pi ended up dying and when I looked around a bit I found that AdGuard Home gave me equal features but was a bit easier to set up on my own server without colliding with my pre-existing nginx service.

Plex

I’ve had a Plex Pass for quite a while now, and frequently used Plex to stream movies and TV-shows through my Chromecast - as that’s been effectively the only consistent way I’ve found to be able to view my own media on our TV’s at home.

After it became clear that Spotify’s founder was supporting and funding various companies involved in developing drone solutions for wars, mass surveillance, etc. I chose to stop subscribing to Spotify after 10+ years. I’m now using Plex Amp to manage and play my private music collection on my phone, computer, and amplifier at home. It vastly limits the library available to me, as it’s harder to find music to buy outside of streaming services, but I’ve found that I’m much more focused on the music I listen to which does feel nice.

Minecraft Dedicated Server

Over the years I’ve run a number of small private Minecraft servers, for friends and family. Previously it’s been a lot of modded Java servers, but for the last year or so it’s been a single “Bedrock” server - which is for my immediate family only.

To manage it I’ve actually been using a small wrapper application I started writing back in 2021: Minecraft Bedrock Edition Server Wrapper (MCBE-SW). It’s a cross-platform (Windows/Linux, as that’s what the dedicated server is available for) .NET application, published as a single .exe file which will download and update the server files, manage whitelists for allowed users, run backups and even generates a map for the server and uploads it to my web server.