Install Mastodon Tanpa Docker (Ubuntu 20.04)

Cara menginstal Mastodon beserta dependensi yang diperlukan seperti PostgreSQL, Ruby, dan NodeJS, meng-konfigurasi Mastodon dan SystemD service di Ubuntu 20.04.
On this page

Mastodon adalah software media sosial (seperti Twitter) yang sifatnya free dan open-source. Keunikan dari Mastodon adalah terdesentralisasi, banyak orang menginstall Mastodon dan masing-masing installasi Mastodon (yang bisa kita sebut node atau instance) dapat saling berkomunikasi dan dapat memiliki syarat dan ketentuan, kebijakan privasinya masing-masing.

Artikel ini membahas mengenai cara menginstal Mastodon di Ubuntu 20.04 beserta dependensi yang diperlukan seperti PostgreSQL, Ruby, dan NodeJS, meng-konfigurasi Mastodon dan SystemD service supaya dapat auto-start setelah server booting.

Catatan: saya menggunakan self-signed SSL certificate karena instance yang akan saya jalankan akan berada dibalik Cloudflare reverse proxy.

Video saat proses installasi dan konfigurasi Mastodon dapat dilihat dibawah ini:

Pre-requisites

Sebelum memulai, ada beberapa syarat yang harus dipenuhi untuk dapat menjalankan Mastodon, yaitu:

  • Ubuntu Server 20.04 (fresh) dengan akses root.
  • Sebuah domain (atau sub-domain) untuk Mastodon instance (dalam hal ini saya menggunakan domain vr4.me dan instance Mastodon nantinya akan dapat diakses melalui https://social.vr4.me).
  • SMTP server untuk pengiriman email.

Menyiapkan Sistem

Pertama, pastikan server Ubuntu yang digunakan sudah up-to-date:

1apt update && apt upgrade

Install curl, wget, gnupg, apt-transport-https, lsb-release dan ca-certificates:

1apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates

Install NodeJS 16:

1curl -sL https://deb.nodesource.com/setup_16.x | bash -

Gunakan repositori official PostgreSQL:

1wget -O /usr/share/keyrings/postgresql.asc https://www.postgresql.org/media/keys/ACCC4CF8.asc
2echo "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

Update dan install system package yang dibutuhkan:

1apt update
2apt install -y \
3  imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core \
4  g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf \
5  bison build-essential libssl-dev libyaml-dev libreadline6-dev \
6  zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev \
7  nginx redis-server redis-tools postgresql postgresql-contrib \
8  certbot python3-certbot-nginx libidn11-dev libicu-dev libjemalloc-dev

Aktifkan fitur NodeJS corepack dan set versi Yarn ke classic:

1corepack enable
2yarn set version classic

Install Ruby dengan rbenv.

Catatan: rbenv harus diinstall melalui single Linux user, maka kita perlu membuat linux user yang nantinya service Mastodon akan berjalan atas user tersebut. (di artikel ini kita akan buat user mastodon) :

1adduser --disabled-login mastodon

Kemudian, login sebagai mastodon user:

1su - mastodon

Dan sebagai mastodon user, install rbenv dan rbenv-build:

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

Setelah proses setup Ruby environment selesai, baru kita dapat menginstall versi Ruby dan bundler yang diperlukan:

1RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.0.4
2rbenv global 3.0.4
3gem install bundler --no-document

kemudian kembali sebagai root user untuk melakukan setting PostgreSQL.

1exit

Setting PostgreSQL

Untuk performa yang optimal, kita bisa menggunakan pgTune untuk menggenerate konfigurasi sesuai resource server kita. Edit /etc/postgresql/15/main/postgresql.conf dan masukkan setting rekomendasi dari situs pgTune diatas sebelum merestart service PostgreSQL dengan perintah systemctl restart postgresql.

Sekarang, buat PostgreSQL user yang nantinya akan digukakan. Hal paling mudah adalah menggunakan ident authentication menggunakan user yang sama dengan linux username mastodon.

Bukan promt PostgreSQL:

1sudo -u postgres psql

pada command promt psql, jalankan perintah berikut:

1CREATE USER mastodon CREATEDB;
2\q

Sampai disini, kebutuhan sistem utama sudah siap, saatnya untuk melanjuktan ke tahap berikutnya yaitu mensetup Mastodon dan dependency-nya.

Setting Mastodon

Login sebagai mastodon user dan download source code Mastodon menggunakan git (pilih stable release):

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

Install Ruby and JavaScript dependencies untuk aplikasi Mastodon:

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

jalankan Mastodon interactive setup wizard:

1RAILS_ENV=production bundle exec rake mastodon:setup

Perintah diatas akan :

  • Membuat konfigurasi file (.env.production)
  • Menjalankan pre-compilation asset website
  • Membuat skema database

Di kasus saya, saya ingin Mastodon dapat diakses melalui https://social.vr4.me, tetapi tetap menggunakan main domain vr4.me sebagai identitas usernya (@[email protected], dan bukan @[email protected]).

Agar hal tersebut dapat dicapai, saya perlu menambahkan konfigurasi WEB_DOMAIN=social.vr4.me dan mengubah value dari LOCAL_DOMAIN menjadi vr4.me di file konfigurasi mastodon (.env.production). Silahkan kunjungi halaman dokumentasi konfigurasi untuk informasi lebih detail.

Setelah konfigurasi Mastodon dirasa sudah benar, kita bisa kembali sebagai user root:

1exit

Setting Nginx

Copy sample konfigurasi Nginx yang ada di repositori Mastodon:

1cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
2ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon

kemudian edit /etc/nginx/sites-available/mastodon dan ubah example.com ke domain yang digunakan (dalam kasus ini social.vr4.me).

Seperti yang sudah saya informasikan sebelumnya, instance Mastodon yang saya jalankan akan berada dibalik Cloudflare reverse proxy sehingga saya hanya akan menggunakan self-signed certificate.

Jika Anda ingin menggunakan Certbot untuk mendapatkan SSL certificate:

1systemctl reload nginx
2certbot --nginx -d social.vr4.me

Ubah social.vr4.me dengan nama domain Anda.

Setting Mastodon SystemD Service

Copy template systemd service dari repositori Mastodon ke /etc/system/systemd:

1cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/

kemudian start dan enable Mastodon services:

1systemctl daemon-reload
2systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming

Tunggu beberapa menit dan coba akses Mastodon dari web broser dan selamat menikmati!

Resources