The Mastodon featured in this issue is a free and open source social networking server based on ActivityPub, where users can follow friends and discover new ones.
On Mastodon, users can post anything they want: links, pictures, text, videos. All Mastodon servers interoperate as a federated network (users on one server can communicate seamlessly with users on another, including non-Mastodon software that implements ActivityPub)!
Mastodon feature
- No vendor lock-in: Fully interoperable with any standards-compliant platform
- Real-time, chronological timeline updates
- Media attachments such as pictures and short videos
- Security and Auditing tools
- OAuth2 and simple REST API
Mastodon deployment
Technical stack:
- Ruby on Rails Support for REST apis and other web pages
- React.js and Redux for the dynamic part of the interface
- Node.js Provides support for streaming apis
< p class = “PGC – h – arrow – right” data – track = “23” > < strong > requirement: < / strong > < / p >
-
- PostgreSQL 9.5+
- Redis 4+
< li data – track = “26” > < strong > Ruby < / strong > 2.5 + < / li >
- Node.js 12+
Run Mastodon
1 Prepare your machine
- Password-based SSH login not allowed \(key only \)
- Update system package
- Install fail2ban to block repeated login attempts
- Install firewall and whitelist only SSH, HTTP, and HTTPS ports
First make sure that you are actually logging into the server with a key and not through a password, otherwise this will lock you out. Many hosting providers support uploading a public key and automatically setting up a key-based root login for you on your new machine.
Edit /etc/ssh/sshd_config and look for PasswordAuthentication. Make sure it is uncommented and set to no. If you make any changes, restart sshd:
systemctl restart ssh.service
2 Update system package
apt update & & apt upgrade -y
3 Install fail2ban to prevent repeated login attempts
apt install fail2ban
Edit /etc/fail2ban/jails.local and put it in:
[DEFAULT]
destemail = your@email.here
sendername = Fail2Ban
[sshd]
enabled = true
port = 22
[sshd-ddos]
enabled = true
port = 22
fail2ban:
systemctl restart fail2ban
Installation from source
Prerequisites
- A machine running Ubuntu 20.04 or Debian 11 and you have root access
- Domain name (or subdomain) of the Mastodon server, such as example.com
- Email delivery service or other SMTP server
You will run these commands as root. If you are not already root, switch to root:
System repository
Make sure to install curl, wget, gnupg, apt-transport-https, lsb-release, and ca-certificates first:
apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates
Node.js
curl -sL https://deb.nodesource.com/setup_16.x | bash -
PostgreSQL
wget -O /usr/share/keyrings/postgresql.asc https://www.postgresql.org/media/keys/ACCC4CF8.asc
echo "deb [signed-by=/usr/share/keyrings/postgresql.asc] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/postgresql.list
< Installing Ruby
We’ll use rbenv to manage the Ruby version because it’s easier to get the correct version and update it when the new version is released. rbenv must be installed for a single Linux user, so first we have to create a user Mastodon will run as:
adduser --disabled-login mastodon
Then we can switch to the user:
su - mastodon
and proceed to install rbenv and rbenv-build:
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
Once this is done, we can install the correct Ruby version:
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.0.3
rbenv global 3.0.3
We also need to install the bundler:
gem install bundler --no-document
Return to root user:
exit
Upgrade to new version
First, switch to mastodon user:
su - mastodon
and navigate to the Mastodon root directory:
cd /home/mastodon/live
Download the version of the code, assuming the version is called v3.1.2:
git fetch --tags
git checkout v3.1.2
Now execute the upgrade instructions included in the release notes for this version on GitHub. Since different versions require different instructions, we have not included any on this page.
Switch back to root after executing the instructions in the release notes:
exit
Restart Background worker:
systemctl restart mastodon-sidekiq
and reload the network process:
systemctl reload mastodon-web
Open source protocol: AGPL-3.0 license