Skip to main content

2024 Server Update

A stock photo of a server room
A stock photo of a server room by Brett Sayles from Pexels

Roughly every two years I move my website and private web-based tools to a new server to conincide with the latest Ubuntu Server LTS release. It’s not really that important anymore, since I’m running everything in Docker containers anyway, but it gives me a great chance to review my setup and make improvements. I’ve had a couple of huge changes this year, including this very site.

Goodbye Nginx Proxy Manager, Hello Traefik

Nginx Proxy Manager is pretty easy to use, but as I got further and further into my two years using it, I lost confidence in it. They’ve been working for years on a fully rebuilt version, but progress was very slow. The most concerning part was a relative lack of regular maintenance updates. It felt like the underlying software (like plain-vanilla nginx) wasn’t updated in the official Nginx Proxy Manager releases very quickly when new versions were released. I could have tried to switch to a plain nginx Docker container, but then I’d still be managing a bunch of nginx configuration files for the various websites and tools. I decided to switch to Traefik instead.

My primary reason for going with Traefik is that it can be configured entirely using labels in Docker Compose files. This allows me to manage web applications and their reverse proxy settings within the same file! The worst thing about Traefik is the learning curve. It is not a beginner-friendly reverse proxy. Additionally, while it is growing in popularity, Traefik is still not particularly popular so it can be hard to find examples and support. I spent a number of nights trying to track down various issues, particularly around figuring out how to make redirects work. (I redirect andybell.xyz to this domain, and I also use a redirect to make my Mastodon username be @[email protected] even though the Mastodon instance is located at fediverse.andy-bell.com.)

Funnily enough, despite changing over to Traefik for my reverse proxy I’m actually still using a ton of nginx! And that’s because of the other massive change I made this year…

Goodbye WordPress, Hello Static Sites

The past week or two, there’s been quite a lot of drama going on around the WordPress open-source software, its closely-entwined commercial affiliate WordPress.com/Automattic, and a third-party hosting provider known as WP Engine. Frankly though, the switch to a static website has been a long time coming. I’ve had off-and-on thoughts for a couple of years now about switching to a static site generator, since a full-blown dynamic CMS like WordPress seems like quite a heavy thing to run (and a lot of patching and maintenance) for a site that only gets updated once-or-twice a year on average. I had been putting it off for a while though, since it seemed like it was going to be quite a chore.

It was a chore, but also not as big an effort as I thought it would be. I went from having not even chosen a static site generator to fully launching this site (and a couple other even smaller ones) in just five days. There are several major static site generators out there, but I ended up choosing Hugo for… no particular reason. Honestly, I pretty much just searched for static site generators, saw it, and went “that looks like it’ll do what I want it to.” After a quick browse of Hugo’s theme gallery, I saw Congo and went “yeah, that looks clean, simple, and with enough features.”

The other big thing that made the migration easier was just deciding to let go of some old, outdated content. Frankly, I found there was a bunch of broken content on the old site due to plugins not making it over from prior migrations, and there’s other decade-old creative portfolio content that I ditched because it’s so old and doesn’t line up with what I’m doing for work now anyway. I’ve backed everything up in case I want to restore any old content later down the line, but I’m happy with the new trimmed-down content of the site. Unfortunately, the content migration was mostly manual because it seems the WordPress theme I had been using didn’t want to play nice with the content converter plugin I used to export it into a Hugo-compatible form. This meant I ended up doing a lot of copying and pasting from the old site to the new one. It was a blessing in disguise though: in the process I found a lot of links that became broken over time, so I was able to replace a lot of those with archived versions from the Wayback Machine.

The raw markdown and other files to generate the site are in a private GitHub repository. I was originally planning to just manually upload the files to my VPS whenever I made a change. That wouldn’t have been too bad, since I already mentioned that I usually only update the site once-or-twice a year anyway, but then I thought “what if I want to make a post when I’m not at my primary computer?” That’s when I decided to set up GitHub Actions so that when I push an update to the repo, a new version of the site is automatically built and uploaded to my VPS. I was worried this was going to be another “spend a couple of days figuring out what I’m doing wrong” thing, like some of my troubles when figuring out Traefik, but it turns out it only took a couple of hours to go from having never used GitHub Actions to having it fully working. With the automatic pushes working, I was ready to launch!

I mentioned a few paragraphs before that I’m actually still using nginx - that’s because each website (this one, my gaming username site lazyrivr.com, my very short-lived game review site Indie Game Rewind, and my testing website andybell.app that will probably never be used for anything but testing) uses a separate nginx Docker container that has essentially no setup - it just points to where the static files are on the server and serves things up for the reverse proxy to do it’s thing. I use a different container for each site to allow the flexibility to take them down separately if needed. It’s not like an nginx Docker container has a lot of overhead anyway.

The App Rundown

Here’s what I’m currently running on my Virtual Private Servers, and why I’m using them (in alphabeical order):

  • Actual Budget - I love YNAB and used it for years - it’s the budgeting approach that works for me and that I’ve actually been able to stick with. The problem is that they increased their prices yet again at the end of last year, and it was the final straw. The last time they raised their prices I had looked around at self-hosted alternatives, but nothing looked good enough. This time around though, there was Actual Budget. It is very, very similar to YNAB, except that I can self host it. Pairing it with a $15-per-year SimpleFIN Bridge subscription, I can even get automatic and reliable bank and credit card transaction import!
  • FreshRSS - FreshRSS is still around as my self-hosted RSS reader, for all the RSS feeds I don’t bother reading. Last time I had paired it with a self-hosted instance of RSS-Bridge, but I’m using a public instance of RSS-Bridge this time around because I got a bit annoyed at just how often RSS-Bridge updates.
  • Home Assistant - I use Home Assistant on a Raspberry Pi at home to control my smart lights. The Home Assistant OS image also allows you to easily run some other stuff on the same system, so I run a Tailscale node to act as a VPN that exits via my home internet connection and an Uptime Kuma (see below) instance that monitors my main Uptime Kuma instance.
  • My idlers - A simple web app to store information about my servers and domains. I have enough servers and domains that hopefully this will help me keep track of it all, and in particular make sure I can easily figure out what bill is coming due next!
  • Mastodon - A distributed social network (that can also interface with other, different distributed social network software in the “Fediverse”), this fills the same niche for me that Twitter did, before I abandoned Twitter following Elon Musk’s purchase of the service. For most people, I’d just recommend joining one of the many high-quality public instances instead of trying to host your own. It’s not an easy piece of software to self-host and it can be pretty storage hungry.
  • Nextcloud - Honestly, Nextcloud might be next to get cut from my tool list, as it does so much more than I really use it for. I pretty much just want file syncing, but Nextcloud tries to be so much more than just that. It might be time to look fore a more focused tool to replace it with.
  • nginx - I use the Docker Official Image for nginx to serve up the static websites I have, like this one, my links page, and a placeholder page for some parked domains of mine.
  • offen/docker-volume-backup - This is a relatively simple Docker container that allows me to set up a schedule to backup my data. At scheduled times, I have it automatically stop the relevant Docker containers (so that the data’s not changing as it’s being backed up), create a compressed backup, and save it both locally and to an S3-compatible storage service. It also takes care of deleting old backups.
  • Plausible Analytics - I’m still enjoying Plausible Analytics. It doesn’t do much more than just pageviews, but that’s all I really care about. I don’t even particularly care about page views, but I still want to have the data so I can see if anything on this site ever blows up in popularity.
  • Portainer - I use Portainer to easily view Docker container logs across all my servers at once. It also makes it easy for me to clean up old, outdated Docker images before they start taking up too much space.
  • Traefik - Traefik acts as the reverse proxy for all my other containers. It also handles getting my Let’s Encrypt certificates and wrapping everything up in HTTPS form.
  • Uptime Kuma - Uptime Kuma is a self-hosted uptime monitoring service that I use to check all my other services that are directly accessible via the web. It also monitors my Home Assistant instance and its Uptime Kuma instance. I have it configured to check all my services once every minute, and to notify me on Discord if something isn’t working for two checks in a row. I have the notifications go to Discord rather than a self-hosted service of some kind because I figure if I did something to cause a monitored service to not work, there’s a chance I would have screwed up the self-hosted service that should notify me too. Because my Home Assistant instance is hosted at home, Uptime Kuma also serves as a great way to know if my home internet is working or not. Shoutout to my ISP, Ziply Fiber, for having only a single outage I’ve detected in the entire year I’ve had the service, and the issue was fixed with just a simple equipment reboot, so the entire outage only lasted five or ten minutes for me.
  • wallabag - I don’t know for sure yet if I’m going to give Wallabag a permanent spot in my tools. It’s a read later tool like Pocket that makes it easier to see an interesting article now, but actually read it later. If only I actually read more articles, I’d probably get more use out of this tool.
  • Watchtower - While Watchtower is primarily intended for automatically updating Docker containers to the newest version, but I just use it to send me a notification via Discord when there is a container update available. Just getting a notification allows me to check the latest release notes to make sure there’s no manual upgrade steps needed.
  • Your Spotify - A self-hosted app that polls the Spotify API every few minutes to save my listening history. It makes it easy to explore my listening history and see stats over any time period I want. (At least, any time period since I started using the tool in about 2022, since I never really got the all-time-history exports from Spotify to load into Your Spotify correctly. In the end, it’s OK. I don’t think I really need to know what I was listening to back in 2011, and there was a large gap from about 2013-2020 where I was using Google Play Music instead.)

What’s Next

There’s not much I want to change about my stuff right now. I am going to change my social media links page to a more attractive template than the current one, but that’s going to be a minor change. My current white whale for a self-hosted service is a journal app. I want something that works on both mobile and desktop, and is nice and private. Unfortunately, I haven’t found anything that really seems like what I want yet, but I’ll keep looking!

Andy Bell
Author
Andy Bell
Currently working at an insurance agency, I have about a decade of customer service experience. In my free time, I love video games, technology, and messing about with self-hosted services. Even this very website is hosted on my own rented cloud server, rather than using a ready-built hosting provider.