A personal journal.

Hosting Sendiri Server Fediverse

Published on: 15/11/2023 • Updated on: 14/05/2025 • 4 min read

Saya bukan orang yang suka media sosial, namun terkadang saya ingin bisa menulis seenaknya tanpa harus panjang lebar seperti yang saya tulis di blog ini. Belum lagi, jika kamu mendaftar pada server orang, moderasi server sesuai opini pemilik server.

Langsung saja, saya akan memberikan tips dalam menjalankan server ringan yang dibuat dengan menggunakan bahasa pemrograman Go ini kepada Anda.

Persiapan

Nama Domain

Perlu diperhatikan, sekali pasang GtS (Go to Social) di sebuah domain (maupun subdomain), maka domain tersebut tidak boleh dipasang server fediverse lain.

Sebetulnya boleh saja, masalahnya adalah pada certificate untuk federasi. Jika kita ingin mengganti domain, kita harus menunggu certificate tersebut expired. Padahal, setiap instance yang terfederasi memiliki waktu expiry yang berbeda.

Ibaratnya kamu baru kenalan sama si A, ingatanmu bertahan 1 minggu. 4 hari kemudian kamu kenalan sama B, dan 4 hari selanjutnya kamu sudah lupa sama A, tapi masih ingat sama B. Agar kamu bisa ganti wajah, kamu harus menunggu sampai kamu lupa si B. Kurang lebih begitu perumpamaannya.

It’s not supported across the Fediverse to switch between implementations on the same domain. This means that if you run GoToSocial on example.org, you’ll run into federation issues if you try to switch to a different implementation like Pleroma/Akkoma, Misskey/Calckey etc.

Pilih nama domain yang asyik, anggap saja ini permanen. Jika kamu mau main-main saja, saya sarankan menggunakan domain yang murah.

Docker

Meski GtS memiliki binary build, dan banyak orang beranggapan bahwa Docker memiliki kekurangan seperti membuat lambat, tetapi saya tidak begitu memikirkan masalah ini karena saya sendiri tidak merasakan perbedaan yang signifikan.

Bonus dari docker adalah mudah untuk melakukan update.

Bonus dari static binary adalah ‘file size’-nya kecil.

Keuntungan Docker lainnya adalah kemungkinan kita untuk membatasi RAM yang akan digunakan. Selama percobaan saya, GtS kurang begitu ramah RAM karena RAM yang dipakai masih dipinjam oleh GtS sampai sistem benar-benar kekurangan RAM. Sebagai gambaran, GtS bisa dengan mudah menggunakan 300MB RAM untuk keperluan memproses media, namun akan tetap dipinjam bahkan hingga berganti hari sampai sistem saya terhenti minta RAM.

{{< callout emoji=“💡” >}}

Bagi kamu yang menggunakan binary, ada pengaturan yang tidak terdokumentasi yaitu cache.memory-target. Kamu bisa cek pada example.yml atau lewat link ini.

{{< /callout >}}

Siap - Siap Sepi

GtS bukanlah media sosial seperti Mastodon, jadi jika Anda deploy sendiri, ya pasti sepi, dan pastinya tidak ada fitur discover dan Anda yang harus membentuk circle Anda sendiri.

Belum lagi, sebuah fitur di GtS adalah belum tersedianya backward fill, alias kamu tidak bisa melihat riwayat toot orang jika kamu tidak mem-follow mereka.

{{< callout emoji=“💡” >}}

Kamu bisa mem-follow instance lain dengan memanfaatkan layanan relay, misalnya. Jadi, tidak begitu sepi.

{{< /callout >}}

Oh iya, selain itu, karena masalah federasi, beberapa instance mungkin tidak bisa kamu ikuti, dan komentar saja tidak bisa masuk. Kenapa begini? Alasannya adalah karena GtS mensyaratkan setiap request harus signed, sedangkan pada server lain (seperti Mastodon) tidak memerlukan hal tersebut.

Adakah solusi untuk ini? Jawabannya tidak. Kita harus menunggu pengembang dari GtS (atau bahkan server lainnya yang membuat bypass masalah ini) untuk mencari jalan keluarnya. Ya, wajar saja, ini adalah perangkat lunak alpha. Jika kamu ingin tahu status terakhir masalah ini, bisa cek issues di GitHub mereka.

Database

Untuk ukuran single-user, saya memilih untuk penggunaan Sqlite dibanding PostgreSQL. Alasannya mudah untuk dipakai dan lebih ramah CPU dibanding harus menjalankan service lain. Namun tentu saja pilihan ada di tangan Anda, Anda bebas memilih jenis database apa untuk dipakai di GtS.

{{< callout emoji=“💡” >}}

Bagi kamu yang menggunakan perangkat dengan spesifikasi rendah seperti saya (CPU dan RAM yang minim) dan bermaksud untuk mengikuti banyak orang yang sangat aktif, atau karena perangkat terlalu lemah, saya sarankan kamu untuk menggunakan database Postgres pada perangkat terpisah, seperti penyedia DBaaS.

{{< /callout >}}

Storage

Bagi kamu yang deploy di perangkat dengan memori minim, kamu bisa memanfaatkan Storj.io untuk menggunakan fasilitas S3 bucket yang kompatibel. Untuk ukuran gratis, Storj.io sangat dermawan; kamu akan mendapatkan kapasitas penyimpanan 25GB, transfer data 25GB per bulan dengan total file 10.000 file (yang mungkin terlalu sedikit). Sebagai alternatif lain, kamu bisa menggunakan Tebi.io dengan rincian limit gratisnya adalah 25GB storage dan 250GB outbound.

Reverse Proxy?

Apakah kamu menggunakan reverse proxy atau tidak? Ada beberapa konfigurasi yang perlu kamu perhatikan.

Deploy!

Karena saya menggunakan Docker, jadi saya langsung tuliskan saja isi dari docker-compose.yml saya. Perlu diingat, saya berpatokan pada perangkat saya yang minim. Seperti yang sudah dituliskan pada official GoToSocial Documentation, baiknya kamu menempatkan data dari GtS di direktori tersendiri, misalnya adalah ~/gotosocial/data.

version: "3.3"

services:
  gotosocial:
    image: superseriousbusiness/gotosocial:latest
    container_name: gotosocial
    user: 1000:1000
    networks:
      - gotosocial
    #membatasi resource yang boleh dipakai gts, hati - hati untuk penggunaannya atau gts bisa di kill oleh OOM.
    mem_limit: 150m
    environment:
      #ganti nama host, ingat permanen!
      GTS_HOST: example.org

      #single user bisa sqlite atau postgre
      GTS_DB_TYPE: sqlite
      GTS_DB_ADDRESS: /gotosocial/storage/sqlite.db

      #default info menurut saya terlalu chatty
      GTS_LOG_LEVEL: warn

      #disable registrasi
      GTS_ACCOUNTS_REGISTRATION_OPEN: false

      #setup s3 compatible bucket
      GTS_STORAGE_BACKEND: "s3"
      GTS_STORAGE_S3-ENDPOINT: "endpointtanpahttps"
      GTS_STORAGE_S3_ACCESS_KEY: "accesskey"
      GTS_STORAGE_S3_SECRET_KEY: "secretkey"
      GTS_STORAGE_S3_BUCKET: "namabucket"

      # wajib diisi jika kamu menggunakan reverse proxy
      GTS_TRUSTED_PROXIES: "" # isi dengan ip host dari docker, misal 172.20.0.1

    # perlu disesuaikan jika kamu ingin menggunakan reverse proxy
    ports:
      - "443:8080"
    volumes:
      - ~/gotosocial/data:/gotosocial/storage
    restart: "always"

networks:
  gotosocial:
    ipam:
      driver: default

Pengalaman ketika menggunakan GtS pada Pi Zero W saya tidaklah begitu mengecewakan, paling terasa adalah ketika kita ingin mengunggah media, dan beberapa media yang diunggah orang lain juga tertinggal dari tampilan kita sehingga tidak tampil di instance kita. Namun secara keseluruhan, masih bisa digunakan, selamat mencoba!