A deep dive into Mastodon

Setting Up Ruby

Mastodon is written in Ruby, and in the next steps, you will create a mastodon user and install the tools to build and set up a Ruby environment. In this environment, you will install and run Mastodon.

Make sure you create the user without password access, so you can only access it via root:

adduser --disabled-login mastodon

Log into the new mastodon user:

su - mastodon

Install the tools to set up the Ruby environment (Listing 2).

Listing 2

Tools for Ruby Environment

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec bash
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

Finally, install the correct version of Ruby:

RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.0.4
rbenv global 3.0.4

You will also need to install Bundler, a package manager for Ruby gems:

gem install bundler --no-document

Configuring PostgreSQL

Exit the mastodon user to go back to root and configure your database manager. Tweak the file located at /etc/postgresql/VERSION NUMBER/main/postgresql.conf to best adapt it to your hardware. Then restart the server with:

systemctl restart postgresql

Next you need to create a database user for your instance, so log into PostgreSQL:

sudo -u postgres psql

And run the following at the psql prompt:

CREATE USER mastodon CREATEDB;

This creates both a mastodon user and a mastodon database associated with the user.

To exit psql type \q and press Enter.

Setting Up Mastodon

To download and install the actual Mastodon code, you again switch to the mastodon user:

su - mastodon

and clone and check out the latest version of the Mastodon server code (Listing 3).

Listing 3

Getting the Mastodon Code

git clone https://github.com/mastodon/mastodon.git live && cd live
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

Install some more dependencies for Ruby and JavaScript (Listing 4).

Listing 4

Ruby and JS Dependencies

bundle config deployment 'true'
bundle config without 'development test'
bundle install -j$(getconf _NPROCESSORS_ONLN)
yarn install --pure-lockfile

And you can now run Mastodon's built-in configuration wizard:

RAILS_ENV=production bundle exec rake mastodon:setup

The configuration wizard will ask you whether you want to run your instance for only one person (supposedly you) or if you will be accepting other users. It will also ask you to provide details about an email address for the maintainers. With this information, the wizard will set up an admin user and give you a one-time, randomly generated password so you can log in.

Note that all the info created by the wizard is stored in a hidden file called .env.production in the top Mastodon directory. You can change any of the values by editing that file.

Buy this article as PDF

Express-Checkout as PDF
Price $2.95
(incl. VAT)

Buy Linux Magazine

SINGLE ISSUES
 
SUBSCRIPTIONS
 
TABLET & SMARTPHONE APPS
Get it on Google Play

US / Canada

Get it on Google Play

UK / Australia

Related content

  • Social Skills

    Creating a custom application that toots text to Mastodon (the Fediverse's version of Twitter) is simple and straightforward. But we can mix it up by adding images and video, scheduling posts, and changing privacy settings.

  • Mastodon Clients Post Line

    The open and simple Mastodon API makes it easy to create applications to interact with this federated microblogging platform. Here are some of the clients that the community has come up with and how you can use them.

  • toot

    If you are looking for a Twitter alternative, toot lets you interact with Mastodon from the command line.

  • Tutorial – Fediverse

    If you're looking for social media options where the user has more control, you'll find a range of options to explore in the Fediverse, including the popular Mastodon.

  • Status Quo

    Creating your own clients to interact with your friends in the Fediverse is easy. A bit of Python and an off-the-shelf module will do the trick.

comments powered by Disqus
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters

Support Our Work

Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.

Learn More

News