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:
- set language per post (I know Mastodon has this, but Pleroma doesn’t, which was a missed opportunity for me, læ grand·e plurilingue);
- admin-definable CSS themes, plus user-definable CSS on profiles (very Dreamwidth-esque);
- extreme legerity with no inbuilt web frontend other than static profile pages that don’t even show anything but original public posts;
- optional allowlist mode – I’ve turned this on and reached hitherto unparalleled depths of obscurity! We are federated with a whole 75 other instances!
- the next release will have per-post reply controls, which I’m very excited about.
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
- make the DNS records
- set up TLS for the subdomain, plus the bare domain
- 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
- copy to
sites-enabled
, restart nginx etc. - make the GoToSocial directory (no need for the certs folder as we’re proxying through nginx/using Let’s Encrypt)
- set up the postgres database
wget
the amd64 release from https://github.com/superseriousbusiness/gotosocial/releases to the gts directory, extract usingtar –zxf
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
- add it as a systemd service, edit the service config file as described, enable the service
- 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;
- 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.