Epiktistes

Epiktistes is my home in the Fediverse. It is an instance of Ktistec, a single-user ActivityPub server like Mastodon, but with fewer users and fewer commits. Here's my introduction (last updated early-2025).

I wrote a series of posts about optimizing the performance of the Ktistec server, its build time, and its executable size: part 1, part 2, part 3, part 4, and part 5.

Some things I regularly write about, organized by hashtag:

I also wrote some #pointfreeverse.

Todd Sundsted

Configure SMTP or users won't be able to activate new accounts. Definitely configure S3 for file storage, or your uploads (uploaded to `tmp`) will disappear every time the Heroku dyno restarts!

Todd Sundsted

Finish by configuring the Heroku environment (using `.env.production.sample` as a guide). Definitely configure `LOCAL_DOMAIN` and `LOCAL_HTTPS` correctly. (I didn't do this immediately and as a consequence the first handful of people I followed saw me as a user on an instance running on `localhost`.) For `PAPERCLIP_SECRET` and `SECRET_KEY_BASE` I ran `rake secret` in another Rails project to generate the secret keys.

Todd Sundsted

Fix Paperclip by changing `s3_permissions` from "public" to "public-read" in `config/initializers/paperclip.rb`. I'm pretty sure this is a bug. I need to investigate a bit more and then submit a PR.

Todd Sundsted

Create a `Procfile`:

web: bundle exec puma -C config/puma.rb
worker: bundle exec sidekiq -c 5 -v -q default -q mailers -q push

Todd Sundsted

Fix the Redis configuration throughout the code. Heroku wants to specify the Redis connection as a URL, so find `REDIS_HOST` and `REDIS_PORT` pairs and replace them with something like `url: ENV['REDIS_URL']`. Do this in `config/cable.yml`, `config/environments/production.rb`, `config/initializers/redis.rb` and `config/initializers/sidekiq.rb`.

Todd Sundsted

In the `Gemfile`, explicitly specify the Ruby version: `ruby '2.3.3'` -- the Mastodon code uses the Ruby safe-navigation operator and Heroku otherwise defaults to an earlier version of Ruby that doesn't support this feature.

Todd Sundsted

In `package.json`, change `devDependencies` to `dependencies`. The Heroku build will run the Node.js toolchain to build the assets. After you make this change, add *two* buildpacks: first `heroku buildpacks:add heroku/nodejs` and then `heroku buildpacks:add heroku/ruby`. In that order.

Todd Sundsted

(The following steps assume you are familiar with Heroku, GitHub, Ruby on Rails, Mastodon, etc.)

Todd Sundsted

Mastodon runs on Heroku with just a few minor tweaks. I intend to run a solo instance of Mastodon, and these changes allowed me to run this instance for free [on their free tier] and then upgrade [to their hobby tier or beyond] once it was clear everything was going to work out. My bill is currently $15/month.

Todd Sundsted

now how do I migrate my Twitter tweets...! :-)