Mastodon adalah CMS jejaring sosial free and open-source, terdesentralisasi, yang dibuat sebagai alternatif untuk Twitter. Seperti halnya di Twitter, kita dapat saling mengikuti, memposting pesan, gambar, dan video. Tetapi tidak seperti Twitter, tidak ada store atau otoritas untuk konten.

Sebagai gantinya, Mastodon beroperasi di ribuan server yang berbeda yang masing-masing menjalankan berbagai anggota komunitas. Pengguna yang mendaftar di satu server dapat dengan mudah terhubung ke pengguna di jaringan lain dan mengikuti satu sama lain di seluruh instance.

Siapa pun dapat install instance mereka sendiri dari server Mastodon. Tutorial ini akan mengajarkan Anda cara install dan konfigurasi instance Mastodon Anda pada server dengan Ubuntu 18.04 menggunakan Docker.

Prasyarat

  • Server berbasis Ubuntu 18.04
  • Masuk sebagai user non root dengan hak sudo
  • update sistem Anda
    sudo apt update && sudo apt upgrade
  • Kami merekomendasikan Anda untuk menggunakan layanan surat Transaksional pihak ke-3 seperti Mailgun, Sendgrid, Amazon SES atau Sparkpost. Instruksi dalam panduan ini akan menggunakan Mailgun sebagai penyedia SMTP Anda.
  • Pastikan Anda memiliki nama domain yang menunjuk ke server. Untuk tutorial ini, kita akan menggunakan example.com sebagai domain

Langkah 1 – Install Dependensi

Sebelum kita install Mastodon, kita perlu memastikan server kita memiliki perangkat lunak tertentu yang harus diinstal dengan benar. Jalankan perintah berikut untuk install dependensi.

sudo apt update
sudo apt install ca-certificates curl ufw apt-transport-https software-properties-common git -y

Beberapa perangkat lunak di atas mungkin sudah diinstal sebelumnya untuk Anda.

Karena kita install Git, kita harus mengkonfigurasinya sebelum melanjutkan.

git config --global user.name "Nama Anda" 
git config --global user.email "[email protected]"

Langkah 2 – Konfigurasi Firewall

Pada langkah Kita sebelumnya, kita telah install ufw (Uncomplicated Firewall). Sebelum kita dapat melanjutkan untuk install Mastodon, kita perlu mengkonfigurasinya.

Aktifkan SSH dan port yang baru saja kita buat sehingga kita tidak terkunci.

sudo ufw allow OpenSSH

Aktifkan ufw firewall.

sudo ufw enable

Kita juga perlu mengaktifkan http dan https agar Mastodon dapat beroperasi.

sudo ufw allow http
sudo ufw allow https

Periksa status firewall.

sudo ufw status

Anda akan melihat output seperti berikut

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             

Langkah 3 – Install Docker

Tambahkan GPG key Docker ke sistem Anda.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Verifikasi fingerprint dari key yang diunduh.

sudo apt-key fingerprint 0EBFCD88

Anda akan melihat output seperti berikut.

pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <[email protected]>
sub   rsa4096 2017-02-22 [S]

Tambahkan repositori Docker.

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Update package database Anda.

sudo apt update

Instal Docker-CE. CE adalah singkatan dari Community Edition

sudo apt install docker-ce -y

Docker akan diinstal sekarang. Periksa apakah docker telah berjalan.

sudo systemctl status docker

Outputnya kurang lebih seperti berikut ini.

? docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-10-22 18:26:29 UTC; 25min ago
     Docs: https://docs.docker.com
 Main PID: 3574 (dockerd)
    Tasks: 8
   CGroup: /system.slice/docker.service
   ??3574 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Tekan q untuk keluar.

Tambahkan pengguna Linux yang hanya terbatas pada grup docker, sehingga Anda dapat menjalankan docker tanpa sudo.

sudo usermod -aG docker $USER

Variabel $USER  akan memilih dan menambahkan pengguna login saat ini ke grup docker. Ganti $USER dengan nama user lain jika Anda menginginkannya.

Beralih ke pengguna yang baru saja kita tambahkan dengan perintah su. Meskipun sudah masuk, Anda masih harus beralih lagi untuk memuat ulang izin.

su - ${USER}

Periksa apakah semuanya berjalan baik dengan menjalankan program bawaan “Hello World“.

docker run hello-world

Anda akan melihat output berikut yang akan memberi tahu Docker diinstal dan berfungsi dengan baik.

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

Langkah 4 – Instal Docker Compose

Dimungkinkan untuk melewati langkah ini dan melanjutkan tetapi menginstall Docker Compose akan membuat pengoperasian Mastodon jauh lebih mudah terutama jika Anda ingin melakukannya di lebih dari satu server. Install Docker compose dengan melakukan curl pada github :

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Pada saat menulis tutorial ini, 1.24.1 adalah rilis stabil Docker Compose saat ini. Anda dapat memeriksa versi rilis terbaru dari halaman Github mereka.

Terapkan izin agar dapat dieksekusi ke docker compose binary.

sudo chmod +x /usr/local/bin/docker-compose

Tambahkan Penyelesaian Perintah ke Docker Compose.

sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

Verifikasi apakah instalasi Anda berhasil.

docker-compose --version

perintah akan mencetak output berikut.

docker-compose version 1.24.1, build 4667896b

Langkah 5 – Install Mastodon

Clone repositori Mastodon ke server Anda.

git clone https://github.com/tootsuite/mastodon

masuk ke direktori tempat kita baru saja menyalin file.

cd mastodon

Mastodon hadir dengan file konfigurasi sampel. Kita perlu mengganti nama dengan perintah cp untuk membuat Mastodon berfungsi.

cp .env.production.sample .env.production

Kita perlu membuat secret keys untuk file konfigurasi kita. Tetapi sebelum itu, kita perlu build Docker image.

docker-compose build

Sekarang setelah image berhasil dibangun, Anda perlu membuat beberapa keys yang diperlukan untuk mengkonfigurasi Mastodon.

Hasilkan SECRET_KEY_BASE terlebih dahulu.

SECRET_KEY_BASE=$(docker-compose run --rm web bundle exec rake secret)

Masukkan key di atas dalam file konfigurasi dengan perintah.

sed -i -e "s/SECRET_KEY_BASE=/&${SECRET_KEY_BASE}/" .env.production

Hasilkan dan masukkan OTP_SECRET ke file konfigurasi.

OTP_SECRET=$(docker-compose run --rm web bundle exec rake secret)
sed -i -e "s/OTP_SECRET=/&${OTP_SECRET}/" .env.production

Hasilkan dan masukkan PAPERCLIP_SECRET ke file konfigurasi.

PAPERCLIP_SECRET=$(docker-compose run --rm web bundle exec rake secret)
sed -i -e "s/PAPERCLIP_SECRET=/&${PAPERCLIP_SECRET}/" .env.production

Hasilkan nilai untuk VAPID_PRIVATE_KEY dan VAPID_PUBLIC_KEY.

docker-compose run --rm web bundle exec rake mastodon:webpush:generate_vapid_key

Buka file .env.production dengan text editor nano.

sudo nano ./.env.production

Cari VAPID_PRIVATE_KEY dan VAPID_PUBLIC_KEY dalam file dan copy output dari perintah sebelumnya.

Temukan variabel LOCAL_DOMAIN dan ubah nilainya dari example.com ke nama domain yang Anda pilih untuk instalasi Mastodon Anda.

Masukkan nilai yang Anda dapatkan dari penyedia SMTP Anda.

SMTP_SERVER = smtp.mailgun.org
SMTP_PORT = 587
SMTP_LOGIN = username
SMTP_PASSWORD = password
SMTP_FROM_ADDRESS = [email protected]

Tekan Ctrl + X dan simpan file ketika Anda selesai.

Anda perlu membuat build Docker image lagi untuk menerapkan semua perubahan yang dibuat di atas.

docker-compose build

Siapkan database

docker-compose run --rm web rails db:migrate

Pra-kompilasi aset Mastodon.

docker-compose run --rm web rails assets:precompile

Jalankan perintah berikut untuk menjalankan container.

docker-compose up -d

Langkah 6 – Install dan Konfigurasi Nginx

Langkah selanjutnya dalam panduan kami adalah menginstal server Nginx untuk membuat situs web Mastodon berfungsi.

Jalankan perintah berikut untuk install web server Nginx.

sudo apt install nginx -y

Nginx datang dengan situs default yang dikonfigurasi. Hapus file tersebut .

sudo rm /etc/nginx/sites-available/default

Juga, hapus symlink untuk situs default.

sudo rm /etc/nginx/sites-enabled/default

Buat file Konfigurasi Nginx untuk Mastodon.

sudo touch /etc/nginx/sites-available/mastodon

Buat symlink untuk konfigurasi Mastodon.

sudo ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon

Buka konfigurasi Mastodon di editor Nano. (Anda dapat memilih editor lain yang Anda inginkan)

sudo nano /etc/nginx/sites-available/mastodon

Copy-paste teks berikut ini ke dalamnya.

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 80;
  listen [::]:80;
  server_name example.com;
  root /home/user/mastodon/public;
  # Useful for Let's Encrypt
  location /.well-known/acme-challenge/ { allow all; }
  location / { return 301 https://$host$request_uri; }
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name example.com;

  ssl_protocols TLSv1.2;
  ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;

  ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

  keepalive_timeout    70;
  sendfile             on;
  client_max_body_size 80m;

  root /home/user/mastodon/public;

  gzip on;
  gzip_disable "msie6";
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

  add_header Strict-Transport-Security "max-age=31536000";

  location / {
    try_files $uri @proxy;
  }

  location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {
    add_header Cache-Control "public, max-age=31536000, immutable";
    try_files $uri @proxy;
  }
  
  location /sw.js {
    add_header Cache-Control "public, max-age=0";
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";
    proxy_pass_header Server;

    proxy_pass http://127.0.0.1:3000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  location /api/v1/streaming {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Proxy "";

    proxy_pass http://127.0.0.1:4000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }

  error_page 500 501 502 503 504 /500.html;
}

Konfigurasi di atas mengasumsikan Anda menggunakan Let’s encrypt sebagai penyedia SSL. Jika Anda menggunakan layanan SSL lain, maka Anda perlu mengedit lokasi dari keys dan melewatkan bagian tutorial selanjutnya.

Langkah 7 – Install dan Konfigurasi Let’s Encrypt

Mengamankan situs web Anda dengan HTTPS sangat penting, ini adalah praktik yang baik untuk mengamankan lalu lintas situs Anda. Untuk mendapatkan sertifikat SSL dari Let’s Encrypt, kita akan menggunakan klien Acme.sh.

Acme.sh adalah perangkat lunak unix shell murni untuk mendapatkan sertifikat SSL dari Let’s Encrypt dengan tanpa dependensi.

Pertama pastikan nginx tidak berjalan

sudo service nginx stop

Download dan install Acme.sh:

sudo su - root
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh 
./acme.sh --install --accountemail [email protected]
source ~/.bashrc
cd ~

periksa versi Acme.sh :

acme.sh --version
# v2.0.2

Dapatkan sertifikat RSA dan ECC/ECDSA untuk domain/hostname Anda:

# RSA 2048
acme.sh --issue --standalone -d example.com --keylength 2048
# ECDSA
acme.sh --issue --standalone -d example.com --keylength ec-256

Jika ingin membuat sertifikat palsu untuk pengujian, Anda dapat menambahkan flag --stagingke perintah di atas.

Setelah menjalankan perintah di atas, certificates dan keys akan berada di:

  • untuk RSA di direktori : /home/username/example.com.
  • untuk ECC/ECDSA di direktori : /home/username/example.com_ecc.

Untuk list semua sertifikat, jalankan perintah :

acme.sh --list

Buat direktori untuk menyimpan sertifikat Anda. Kita akan menggunakan direktori /etc/letsencrypt

mkdir -p /etc/letsecnrypt/example.com
sudo mkdir -p /etc/letsencrypt/example.com_ecc

Install/copy sertifikat ke direktori /etc/letsencrypt.

# RSA
acme.sh --install-cert -d example.com --cert-file /etc/letsencrypt/example.com/cert.pem --key-file /etc/letsencrypt/example.com/private.key --fullchain-file /etc/letsencrypt/example.com/fullchain.pem --reloadcmd "sudo systemctl reload nginx.service"

# ECC/ECDSA
acme.sh --install-cert -d example.com --ecc --cert-file /etc/letsencrypt/example.com_ecc/cert.pem --key-file /etc/letsencrypt/example.com_ecc/private.key --fullchain-file /etc/letsencrypt/example.com_ecc/fullchain.pem --reloadcmd "sudo systemctl reload nginx.service"

Semua sertifikat akan diperpanjang secara otomatis setiap 60 hari.

Setelah mendapatkan sertifikat, keluar dari user root dan kembali ke user biasa dengan hak sudo :

exit

Langkah 8 – Buat User Mastodon

Kunjungi situs mastodon Anda di browser. Anda akan melihat layar berikut.

Page 1 - Add Mastodon user

Masukkan nama, alamat email, dan kata sandi yang Anda inginkan untuk membuat akun baru pada instance Mastodon Anda. Mastodon akan mengirimi Anda email konfirmasi untuk memverifikasi pendaftaran.

Anda juga dapat mengonfirmasi pendaftaran secara manual. Untuk itu, Anda perlu SSH ke instance Docker Anda. List semua instance Docker saat ini.

docker ps

Anda akan melihat output seperti di bawah ini.

CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                  PORTS                      NAMES
32f2c4cd2598        tootsuite/mastodon    "/tini -- bash -c 'r…"   16 hours ago        Up 16 hours (healthy)   127.0.0.1:3000->3000/tcp   mastodon_web_1
76beca2b858d        tootsuite/mastodon    "/tini -- node ./str…"   16 hours ago        Up 16 hours (healthy)   127.0.0.1:4000->4000/tcp   mastodon_streaming_1
08f7a42b75ac        tootsuite/mastodon    "/tini -- bundle exe…"   16 hours ago        Up 16 hours                                        mastodon_sidekiq_1
bacaa8c09a85        redis:5.0-alpine      "docker-entrypoint.s…"   17 hours ago        Up 17 hours (healthy)                              mastodon_redis_1
62e9b2175a53        postgres:9.6-alpine   "docker-entrypoint.s…"   17 hours ago        Up 17 hours (healthy)                              mastodon_db_1

Untuk melakukan perubahan yang diperlukan, kita perlu mengakses streaming container. SSH ke container mastodon_streaming_1.

docker exec -it mastodon_streaming_1 /bin/bash

Ini akan meluncurkan Bash shell di dalam container Anda.

Jalankan perintah berikut untuk menyetujui nama pengguna Anda yang baru dibuat.

mastodon@76beca2b858d:~RAILS_ENV=production bin/tootctl accounts modify howtoforge --confirm

Jalankan perintah berikut untuk menjadikan akun Anda yang baru dibuat sebagai administrator.

mastodon@76beca2b858d:~RAILS_ENV=production bin/tootctl accounts modify howtoforge --role admin

Keluar dari container.

mastodon@76beca2b858d:~exit

Masuk ke instance Anda dengan nama pengguna dan kata sandi dan Anda akan disambut dengan layar berikut.

Page 2 - Mastodon first steps

Klik Let’s Go dan Anda akan melanjutkan ke halaman-halaman berikut yang akan memberi tahu Anda tentang beberapa dasar cara kerja Mastodon.

Page 3 -How Mastodon works

Page 4 - Mastodon Reply - Boost - Favourite

Klik pada Finish Tutorial, dan Anda akan disambut dengan beranda Mastodon di mana Anda dapat mulai memposting pertama kali.

Page 5 - Mastodon Dashboard

Anda dapat mengakses pengaturan dan area administrasi dari menu Preferences.

Langkah 9 – Maintenance

Untuk melihat kinerja dan log instance Mastodon, kunjungi https://example.com/sidekiq/

Di sini Anda dapat melihat daftar berbagai proses dan tugas terjadwal yang terkait dengan instance Mastodon. Anda juga dapat memeriksa tugas yang gagal di bawah bagian Dead or Retries. Ini juga akan memberi tahu penggunaan memori instance.

Page 6 - Mastodon maintenance

Anda dapat memeriksa kesehatan basis data instance Anda dari https://example.com/pghero/

Page 7 - pghero

Anda dapat melakukan pemeliharaan database, menjalankan query SQL dan menghapus indeks yang tidak digunakan.

Jika situs Anda tidak load sama sekali untuk beberapa alasan, Anda dapat memeriksa log yang dihasilkan oleh Docker.

Untuk itu, tutup container Anda terlebih dahulu.

docker-compose down

Jalankan Docker compose dalam keadaan terlampir sehingga Anda dapat melihat log yang dihasilkan oleh setiap container.

docker-compose up

Langkah 10 Upgrade Mastodon

Beralih ke direktori mastodon Anda.

cd /home/user/mastdon

Download updates dari repositori

git fetch

Jika Anda telah mengubah file docker-compose.yml karena alasan tertentu, Anda harus menjalankan perintah berikut terlebih dahulu.

git status

Ini akan memberi tahu Anda semua perubahan yang dilakukan untuk itu. Jika file diubah, maka simpan/backup perubahan Anda terlebih dahulu.

git stash

Lihat versi Mastodon terbaru. Periksa versi terbaru dari halaman releases di github.

git checkout <version/tag>

Jika Anda menjalankan git stash sebelumnya, kemudian jalankan perintah berikut untuk mengulang perubahan Anda ke file docker-compose.yml.

git stash pop

Build docker image.

docker-compose build

Lakukan migrasi database.

docker-compose run --rm web rails db:migrate

Pra-kompilasi aset Mastodon.

docker-compose run --rm web rails assets:precompile

Jalankan perintah berikut untuk menjalankan container.

docker-compose up -d

Untuk mempelajari lebih lanjut tentang Mastodon, ikuti dokumen mereka.