GoToSocial on Fly.io

more hosting options

SEAN K.H. LIAO

GoToSocial on Fly.io

more hosting options

GoToSocial running on fly.io

There's been a recent trend of people turning from Twitter to the Fediverse, mostly mastodon, but since it's an open ecosystem centered around the ActivityPub protocol, there are other options, like plemora.

Mastodon is a Rails app with lots of dependencies, Plemora is an Elixir app that's not much better.

GoToSocial is a project that covers just the server side of ActivityPub, exposing client side communications via a Mastodon compatible API. Deployment is easy-ish, a single binary + web assets.

fly.io

fly.io takes your container image and runs it as a firecracker-based vm. It's an interesting halfway point in between VMs and containers in terms of deployment. What's more attractive though is their 3x 256MB shared cpu vm free tier.

To run GoToSocial, we're taking their prebuilt docker image, and deploying it.

Create the fly.io app and volume

1$ fly apps create estherian
2$ fly volumes create gotosocial_data -s 1 -r lhr

Flip GTS_LETSENCRYPT_ENABLED to false in the below config, then run fly deploy.

Get the IP address, set the DNS A/AAAA records, flip the GTS_LETSENCRYPT_ENABLED back to true and redeploy.

 1app = "estherian"
 2
 3[build]
 4  image = "superseriousbusiness/gotosocial:latest"
 5
 6[env]
 7  GTS_PORT = "8443"
 8  GTS_HOST = "estherian.liao.dev"
 9  GTS_ACCOUNT_DOMAIN = "liao.dev"
10  GTS_DB_TYPE = "sqlite"
11  GTS_DB_ADDRESS = "/gotosocial/storage/db.sqlite"
12  GTS_ACCOUNTS_REGISTRATION_OPEN = "false"
13  GTS_LETSENCRYPT_ENABLED = "true"
14  GTS_LETSENCRYPT_PORT = "8080"
15  GTS_LETSENCRYPT_EMAIL = "estherian@liao.dev"
16
17[mounts]
18  source = "gotosocial_data"
19  destination = "/gotosocial/storage"
20
21[[services]]
22  internal_port = 8080
23  protocol = "tcp"
24  [[services.ports]]
25    port = 80
26[[services]]
27  internal_port = 8443
28  protocol = "tcp"
29  [[services.ports]]
30    port = 443

Once it's running, create your user following the standard documentation.

1$ fly ssh console
2# gotosocial admin account create --username some_username --email someone@example.org --password 'some_very_good_password'
3# gotosocial admin account confirm --username some_username
4# gotosocial admin account promote --username some_username

And done. Find a frontend, use the actual hosting domain to login.