Getting On with GoToSocial

Posted on Dec 14, 2023

As an avid self-hoster, having my own Mastodon instance has been high on my list for some time. Last week I finally got my things together and stood up a single user instance of GoToSocial and I’ve been generally happy with the results.

Motivation

I’ve been using mstdn.social since I joined the Fediverse in 2021 and I have no complaints. Stux is an awesome host of many things in the Fediverse and I trust them. I want to make clear I don’t have any issues with using a public Mastodon instance.

Yet, I always felt guilty using it without helping them cover the costs of running the service. We barely squeak by financially and I can’t afford to take on another bill. I’d be more than happy to keep using mstdn.social if I could kick them $5/mo. for the service. But spending any money is off the table, especially for something as trivial as social media. If I could self-host my own instance I wouldn’t be a cost burden on any public instance.

The second reason I wanted my own instance was data control. I don’t think mstdn.social is going anywhere since they are one of the largest public instances out there. However, I don’t want my posts to disappear should something happen and I don’t get a chance to migrate.

The last reason is I love to run my own server and Mastodon would be a fun because I’m a weirdo.

Choices and GoToSocial

For the last few months I’ve been looking at my options for a single user instance. I was looking for these features:

  • Easy to deploy with a Docker container with as few dependencies as possible.
  • Designed for low resource as I will be hosting here at the house in a VM.
  • Relatively easy to maintain. In the winter I have a lot of extra time, but I can’t let that fool me into taking on big projects. Once we get to February my free time will be scarce as I will go back to my contracting business. I need to be able to maintain my instance even in the busiest of times.

That last bullet point is why I decided against running an official Mastodon install. There are lots of turnkey containers out there that try to make it as easy as possible. They were just all too much for a single user. I don’t need everything Mastodon has to offer with the full instance.

All this to say I decided to use GoToSocial. They have an easy to deploy compose file and is purpose-built to use low resources. It is still very early in development and is missing many features (more on that down below). Yet it is just enough for me. The GoToSocial folks say it can run on a Raspberry Pi quite easily and may even work on a Pi Zero 2 W. On the GoToSocial docs they list running a single user instance on Debian with as little as 768 MB of RAM.

Needless to say, it checked all the boxes.

GoToSocial experience

So far I have very little to complain about. Everything just… works. After setting up I logged in with the Tusky Android app and started reading my followers feeds and posting. The service is snappy and I didn’t have any federation issues.

Currently I am federated with about 1,300 other instances. I barely notice it running on my hypervisor and is using about 3 GB of space in the VM. The storage requirements are probably the thing I’m most concerned about in the long run. Right now I’ve given it 100 GB of space and will keep an eye on it over the next few months to see how fast it grows.

The only real issue I’ve had is that some apps won’t login to my instance. For example, I tried using Whalebird on the desktop and it will only tell me that my URL isn’t valid. I personally think this is because they only index large public instances. My instance URL isn’t on their list, so it won’t even try to login. Tusky has worked great on mobile and on the desktop I’ve been using Tuba.

Missing features, but not dealbreakers

Going to say right out of the gate there are several features missing, which is to be expected of alpha level software. The biggest one for me is there is no mechanism to import who you follow from another instance. It is something they are working on, its just not ready yet.

Luckily I found a workaround. Using this comment I used the toot command line client and the script in the comment to mass import follows.

Essentially:

  • Install toot with sudo apt install toot
  • Login with the new account and exit.
  • Run the script pointing at the csv downloaded from another instance (mstdn.social for me). It will go through and import all the accounts on the list.

The script looks like this:

#!/bin/env bash
while read LINE; do
	user=${LINE%%,*}
	toot follow $user
done < following_accounts.csv

The other main issue for me is that it doesn’t backfill previous posts from the accounts you follow. You will only see new posts from those accounts. This also means that there is no way to migrate bookmarks from another account. I use the bookmark feature frequently and I really, really want to migrate those.

The good news is that I could export my bookmarks from mstdn.social so I have them when that feature is ready in GoToSocial. For the time being I’ve added my bookmarks to my webpage archiving system so I have them no matter what.

Setup

For those that are wondering, here is how I setup everything. I like to keep things compartmentalized and all my self-hosted services run inside a container, inside its own virtual machine.

The virtual machine has these specs:

  • 3 CPU cores
  • 4 GB of RAM
  • 100 GB of storage

These specs are more than enough for a single user instance. I just peeked at the resource allocation and it is currently using 1% CPU utilization and 780 MB of RAM.

I also set rules to block certain pages from being available outside my LAN, specifically the admin and settings panel.

I am using sqlite as my database, which I know a bunch of people just cringed. But, I only post a few times a week and browse about a hundred accounts I follow. I have no need for anything more than what sqlite offers. Yes, I might pay for that decision later but that’s a risk I’m willing to take. I’ve been using many other apps with sqlite as a single user and never had an issue.

My setup is using their Docker compose configuration with some tweaks for my specific system and proxy.

All in all it took my about 2 hours to get everything setup and send my first post.

- - - - -

Did you like this post? Give it an upvote by clicking on the arrows below! Sending me an upvote is like you and I giving each other a high five.

🙏 😎

Thank you for reading! If you would like to comment on this post you can start a conversation on the Fediverse. Message me on Mastodon at @cinimodev@masto.ctms.me. Or, you may email me at blog.discourse904@8alias.com. This is an intentionally masked email address that will be forwarded to the correct inbox.

If you enjoy the random stuff I write here, post to Mastodon, or watch on YouTube, and are feeling generous, I am open to tips of Ko-fi.