Tag: Tech

High availability DNS with Adguard Home and keepalived

Compared to your average home internet user I (and lets face it probably you, the reader) have a way more complicated home network than necessary;

  • I don’t just have an ISP supplied router, I’ve got Omada network switches and routers and access points.
  • I’ve got multiple small servers running network services like DNS or VPN tunnels.

I thought I’d been a good little IT professional and had ensured that my maintenance (unplanned or otherwise) wouldn’t affect my families Netflix or Paramount+ streaming by having not one but two synchronised Adguard Home powered DNS servers. I’d ensured both were communicated out via DHCP (or statically configured) as the primary and secondary DNS services so that no matter what I was doing no one would be stuck without working entertainment.

But then the RaspberryPi powered device died a death, and my network fell over1; because, as it turns out, not all devices do the sensible thing and what “secondary DNS server” actually means is “try this one after 30 seconds of hanging about”.

Populating my single user Mastodon instance

Problem:
Your single user (or otherwise small) Mastodon server doesn’t have much content on it. Your followed #hashtags don’t seem to bring in much and you resort to browsing big instances to find new people or content that you’re interested in.

Solution:
This post.

I recently toot’d1 that despite having a decent set of “followed” hashtags on my instance I just wasn’t seeing any content coming in for them. This was frustrating me and having done a bit of investigation into how ActivityPub functions turns out is just the way it is ™️.

As I scroll through my feed seeing the same old faces (love y'all) I've come to the realisation that my subscribed hashtags are doing very little.

Guess that's a "running my own" instance thing. 😢

I've got relays, but those seem to be mostly made up of other small instances. relay.fedi.buzz could have helped but doesn't seem to add anything new.

seems hard work if you're not on a big instance. My posts feed up, others don't feed down all that much.

Some shortcode magic for embedding toots in Hugo posts.

After a bit of work with Hugo’s templating functions, namely the exceedingly useful getJSON I can now embed Mastodon posts directly in my page!

If you’ve looked at this before you might be thinking “Gee, this is easy, you just use the Oembed API”. Well, I didn’t want to use that so this does it properly, with building actual content out of JSON responses. It does mean I’m in way more control of the behaviour.

S3 and S3-compatible bucket proxy in Dokku

It turns out that running a Mastodon instance, and hooking that instance up to a couple of relays will very quickly fill up the measly storage space on your VPS. To combat that you’ve got 2 options; 1) add more space1 or, 2) hook up some object storage like Amazon’s S3 or Vultr’s, err, Object Storage. Since Mastodon natively supports the latter it seemed like a no brainer to me so I followed the official documentation and in doing so found instructions on setting up an Nginx proxy. To do this optional bit I needed to come up with a Dokku based solution, and this is it.

This deployable Dokku project implements a proxying service that allows you to front S3 Object storage served files from the configured domain. You may want to do this to, for example, retain control of your files apparent storage location and therefore allowing you to move your files later without having to implement redirects to the old content.

It also acts as a content cache and provides a 48 hour TTL. Additionally it implements cache locking to prevent cache slams/stampedes

Finally, it has inbuilt filtering that only allows GET operations to reach the bucket, therefore acting as a rudimentary firewall.