-- Leo's gemini proxy

-- Connecting to r.bdr.sh:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini; lang=en

Notes on Setting Up a Mastodon Server


Last week I decided to migrate my account to my own mastodon server [1], and I was surprised at how easy it was, but it wasn't without hiccups so I'm writing down some notes on my experience on here. It's not meant to be an in-depth tutorial, but a rough overview on what I had to do to get the server to work.


[1] my profile @ friendship.quest


First, some information on my setup: I have a VPS on digitalocean running arch linux, so I went directly to the Arch Wiki [2] which provides great documentation. I had my mind set on using the glitch fork of mastodon [3], so I went with the mastodon-git [4] package. I only had 1G of RAM, which absolutely won't work: some dependencies won't even compile without running out of memory. I decided to upgrade to an instance with 4GB, and this was enough though I did have to tweak some values.


[2] Arch Wiki entry on Mastodon.

[3] Mastodon Glitch Edition

[4] mastodon-git AUR package.


Then onto the setup itself. Starting with the clone:


% git clone https://aur.archlinux.org/packages/mastodon-git

Then changed PKGBUILD to use the glitch-soc version.


# -source=("git+https://github.com/tootsuite/${pkgname%-git}.git#branch=$_branch"
# +source=("git+https://github.com/glitch-soc/${pkgname%-git}.git#branch=$_branch"

Installed some dependencies.


% pacman -Sy imagemagick libpqxx postgresql redis protobuf nodejs icu cmake base-devel

At this point I ran into issues with yarn when running makepkg as I use asdf [5] to control my environment. The dependencies above install nodejs, but I wanted to use the one from asdf, so I had to make sure the paths were correct, otherwise I ran into issues with the right version of yarn. Eventually corepack enable did work. I'm skipping this here because I don't really remember and I don't think most people will haver these issues.


[5] asdf-vm


But then we were able to makepkg


% makepkg -si

The post-install instructions didn't run for me, so I read them from the file [6].


[6] mastodon.git post-install file


Before running the mastodon rake file, I made sure to have the s3 bucket and smtp configuration ready (Will post the pulumi recipe for this in another post), and then the mastodon:setup rake task ran *almost* entirely, but failed during the assets:precompile phase so I had to continue from where it stopped by reading the source [7]. Since only setting up the admin user was left, I removed the rest of the code temporarily to run just that part of the task.


[7] mastodon:setup rake task source


With that, all that was left was to set up nginx, so I used the file included in the repo [8] to set it up.


[8] nginx.conf from mastodon repo.


And that was pretty much it. I did have to make some changes to reduce memory usage and have sidekiq run correctly. On /lib/systemd/system/mastodon-sidekiq.service, I replaced -c 5 with -c 3 and made sure to include -q ingress and -q scheduler as they weren't included.


I won't go into detail here on the full text search setup, but I did have to reduce the max heap size on opensearch + reduce the sidekiq workers to 3 to avoid running out of memory. In /etc/opensearch/jvm.options you can set -Xms1g and -Xmx1g or whatever value works for you.


Finally, before migrating I imported a couple of ready-made blocklists and went over information on moderation.


[9] fedi.tips info on blocklists


The server worked well, though it did take about a day for federation to work reliably with some instances. I believe it had to do mostly with DNS propagation. Eventually I was able to migrate and so far it seems to be going well! I am now the proud owner of my personal mastodon instance.

-- Response ended

-- Page fetched on Mon May 20 20:07:17 2024