Always tending towards smaller and stranger software

I replaced Pleroma with GoToSocial as my ActivityPub/fediverse software of choice last weekend; this was something I’d been thinking about for a while, but it ended up being necessary because the Pleroma instance experienced Some Kind Of Issue. I was going to write a bit more about that but it was boring, so tl;dr, if the server suddenly starts receiving like 70GB of incoming traffic per day instead of less than 1 and the CPU is consistently running at over 100%, it’s probably a good idea to stop the service and attempt to investigate sooner rather than later (not that my eventual attempts at investigations achieved very much). Also for reasons that I definitely don’t understand, you can’t make postgres databases smaller without making them bigger first.

GoToSocial has the following nice features:

The installation instructions were fairly piecemeal so I cobbled them together from various pages of documentation before attempting the install, but it all worked well and there was only one minor issue, which I got sorted pretty quickly. I also felt confident enough with setting this stuff up this time to enable split-domain federation, so even though GoToSocial is running on kes.praze.net, my fediverse handle dispenses with the subdomain and is just @tre@praze.net. I think about how cool this is every time I open my profile page! And I bothered to set up a reverse proxy as well, which was … probably a good idea.

Reminding myself what I did and when
  1. make the DNS records
  2. set up TLS for the subdomain, plus the bare domain
  3. make the nginx confs: both redirect http to https, include the location of the Let’s Encrypt certs, add proxy details and X-Robots-Tag for the subdomain; add /.well-known redirects for the bare domain
  4. copy to sites-enabled, restart nginx etc.
  5. make the GoToSocial directory (no need for the certs folder as we’re proxying through nginx/using Let’s Encrypt)
  6. set up the postgres database
  7. wget the amd64 release from https://github.com/superseriousbusiness/gotosocial/releases to the gts directory, extract using tar –zxf
  8. cp example/config.yaml config.yaml and set the variables:
    • host: the subdomain
    • account-domain: the domain
    • storage-local-base-path
    • letsencrypt-enables: false
    • instance-languages: an array based on tags from here
    • instance-federation-mode: allowlist
    • accounts-allow-custom-css: true
    • db-type
    • db-address: localhost
    • db-user, db-password, db-database
    • bind-address: 127.0.0.1
    • port: 8080
    • trusted-proxies: add the IP address of the server to the array
  9. add it as a systemd service, edit the service config file as described, enable the service
  10. this was where the one single problem I encountered came up; some issue with postgres15 that means you have to explicitly grant permission to the postgres user. have to do at least one, possibly both of the following:
    • grant all on all tables in schema public to gotosocial;
    • alter database gotosocial owner to gotosocial;
  11. then create users.

The builtin CSS themes didn’t include anything adaptive so I combined the light and dark “blurple” themes using @media (prefers-color-scheme), and also added a few other things like hiding some of the post statistics and a wee notice imploring visitors to read the about page to understand some of the weirdnesses of GoToSocial. I’m generally a big fan of those weirdnesses; showing boosts on profile pages might have been nice, but they still show up on other instances and in third-party clients, so I’m not too bothered.

Want to respond to this? Want to see other people’s responses?