Tag: tech

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.

Running your own Mastodon instance (Using Dokku)

If you’re a Twitter user (and even if you’re not) you may be aware that it was recently acquired by one Elon Musk. You may also be aware that he’s gone on a cost cutting rampage that has left people concerned for the future of the platform as mass layoffs and publicised technical changes have resulted in broken functionality or massive shareholder losses.

There is a Twitter alternative, just one amongst many, called Mastodon. It’s a part of something called the Fediverse; which is a silly word that fundamentally groups a large number of applications around something called the ActivityPub protocol. In brief it’s a well defined method for clients and servers to talk to each other about people and what they’re doing. Which is why, over the last few weeks, Mastodon servers (or instances) have seen a massive spike in new user accounts and usage. People are migrating and instance owners have been scrambling to scale up their infrastructure to cope.

You can always join one of the many instances available, or, like I did you can run your own1.