SSD Nodes Learn 🎉 VPS mulai $5.50/bln
Panduan Matt ConnorOleh Matt Connor

Cara Menjalankan Matrix Synapse di VPS

Pelajari kebutuhan nyata untuk menjaga homeserver Matrix Synapse di VPS: ukuran 1 vCPU dan 2 GB RAM, PostgreSQL, media, registrasi, serta backup.

Hal yang diperlukan untuk menjaga homeserver Matrix Synapse tetap berjalan

Matrix Synapse mudah diinstal dan mudah diabaikan setelahnya. Instalasinya terdiri atas satu repositori apt, satu file konfigurasi, satu blok reverse proxy, dan satu DNS record. Menjaga homeserver tetap sehat selama satu tahun memerlukan pekerjaan yang berbeda: database sungguhan, media store yang dibersihkan secara berkala, registrasi yang tidak dapat digunakan oleh orang asing, serta backup yang mencakup kedua bagian server.

Panduan ini ditujukan untuk Ubuntu 24.04 LTS dan menginstal Synapse dari repositori apt matrix.org, yaitu sumber paket yang dikelola proyek Synapse untuk Debian dan Ubuntu. Versi paket berubah setiap beberapa minggu, sehingga nomor versi tidak dicantumkan di sini. Semua path dan opsi di bawah ini berasal dari dokumentasi Synapse saat ini.

Ukuran: apa yang sebenarnya Anda dapatkan dari 1 vCPU dan 2 GB RAM

Halaman ukuran yang diterbitkan, per Agustus 2026, umumnya merekomendasikan 1 vCPU dan 2 GB RAM untuk homeserver Synapse. Rekomendasi itu sesuai untuk satu kondisi: server privat, beberapa pengguna, room kecil, dan tidak ada room publik yang sibuk. Dokumentasi Synapse menjelaskan kondisi lainnya secara langsung. Dokumentasi tersebut menyebutkan, "Setidaknya 1GB RAM bebas jika Anda ingin bergabung ke room publik besar seperti #matrix:matrix.org". RAM bebas ini diperlukan di luar kebutuhan Python, Postgres, dan kernel.

Satu room dapat mengubah kebutuhan ukuran server Anda karena cara proses bergabung bekerja. Saat pengguna lokal bergabung ke sebuah room, homeserver Anda menjadi peserta penuh dalam room tersebut. Server menerima setiap event di dalamnya dari semua server lain yang menjadi anggota room, memverifikasi tanda tangan setiap event, dan menyimpan state room secara lokal. Room publik besar dapat memiliki ribuan anggota yang tersebar di ratusan server. Karena itu, server Anda terus melakukan pekerjaan tersebut, terlepas dari apakah pengguna Anda membuka room itu lagi atau tidak. Jika pengguna kemudian keluar dari room, histori yang sudah tersimpan tidak ikut dihapus.

Sebagian besar RAM Synapse digunakan untuk cache. Bagian caches memiliki global_factor yang mengatur skala semua cache sekaligus, dan variabel lingkungan SYNAPSE_CACHE_FACTOR menetapkan nilai yang sama. Menaikkan nilai tersebut menggunakan lebih banyak RAM untuk mengurangi query database. Menurunkannya menggunakan lebih banyak CPU dan waktu Postgres untuk menghemat RAM. Postgres juga memerlukan memorinya sendiri. Pada server dengan 2 GB RAM, keduanya harus berbagi megabyte yang sama.

Untuk paket kecil, terapkan dua aturan praktis. Tambahkan swap. Swap tidak akan membuat Synapse berjalan cepat, tetapi dapat mencegah kernel menghentikan proses saat proses bergabung ke room besar berlangsung. Selanjutnya, pantau disk sejak minggu pertama. Dua hal yang dapat terus bertambah tanpa batas adalah media store dan tabel state room, dan keduanya tersimpan di disk.

Mengapa Postgres, dan mengapa SQLite tidak lagi menjadi pilihan

Paket Debian menggunakan SQLite saat pertama kali dijalankan. Ini sesuai untuk boot pertama, tetapi tidak tepat untuk server yang digunakan orang lain. SQLite hanya mengizinkan satu proses penulis pada satu waktu. Trafik federasi dan permintaan klien dapat menulis pada saat yang sama. Akibatnya, permintaan sederhana harus menunggu permintaan yang lambat. Gejala yang dilaporkan pengguna adalah aplikasi tiba-tiba tidak merespons selama beberapa detik.

Alasan kedua berkaitan dengan struktur. Proses worker Synapse adalah cara yang didukung untuk menggunakan lebih dari satu inti CPU, dan worker memerlukan Postgres. Tetap menggunakan SQLite berarti mengorbankan jalur peningkatan sekaligus performa.

Migrasi di kemudian hari didukung, tetapi prosesnya menyebabkan downtime. Karena itu, lakukan sebelum Anda memiliki pengguna. Synapse menyediakan synapse_port_db, yang menyalin database SQLite ke database Postgres yang telah disiapkan:

synapse_port_db --sqlite-database homeserver.db --postgres-config homeserver-postgres.yaml

Jika Anda lebih memilih menjalankan database dalam container di samping Synapse, lihat perbandingan pada menjalankan database di Docker atau pada host.

Instal Synapse di Ubuntu 24.04

sudo apt install -y lsb-release wget apt-transport-https
sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/matrix-org.list
sudo apt update
sudo apt install matrix-synapse-py3

Pada Ubuntu 24.04, lsb_release -cs menampilkan noble, dan repositori matrix.org menyediakan suite noble. Jangan gunakan paket matrix-synapse dari arsip bawaan Ubuntu. Proyek Synapse tidak menyarankan hal tersebut karena build itu tertinggal dari rilisnya dan memiliki bug keamanan yang telah diketahui.

Installer meminta nama server dan menulis jawaban tersebut ke /etc/matrix-synapse/conf.d/server_name.yaml. Jawab dengan cermat. server_name adalah bagian setelah titik dua pada setiap ID pengguna (@alice:example.com) dan disematkan dalam setiap room yang dibuat server Anda. Mengubahnya nanti tidak memindahkan apa pun: tindakan tersebut menghasilkan homeserver yang berbeda. Gunakan domain tanpa subdomain, yaitu example.com, meskipun Synapse sendiri akan berjalan pada matrix.example.com. Delegasi menghubungkan keduanya, dan itulah bagian berikutnya.

Paket menjalankan Synapse sebagai pengguna matrix-synapse, menyimpan datanya di /var/lib/matrix-synapse, dan membaca /etc/matrix-synapse/homeserver.yaml lalu setiap file di /etc/matrix-synapse/conf.d/. Simpan pengaturan Anda sendiri dalam file-file kecil di conf.d. Upgrade paket tidak mengubah file-file tersebut.

sudo systemctl restart matrix-synapse
systemctl status matrix-synapse
sudo journalctl -u matrix-synapse -n 100 --no-pager

Jika berhasil berjalan, service akan mengaktifkan listener lalu tidak menampilkan keluaran lagi. Unit systemd me-restart service beberapa detik setelah setiap proses berhenti. Karena itu, konfigurasi yang ditolak Synapse akan terlihat sebagai unit yang start lalu berhenti berulang kali. Baris terakhir journal menyebutkan key yang ditolak.

Arahkan Synapse ke Postgres

sudo apt install -y postgresql
sudo -u postgres createuser --pwprompt synapse_user
sudo -u postgres createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user synapse

Locale bukan sekadar kosmetik. Synapse tidak dapat dijalankan pada database yang dibuat dengan nilai COLLATE dan CTYPE yang berbeda, kecuali Anda menetapkan allow_unsafe_locale dalam konfigurasi database. Perbaikan yang didokumentasikan setelahnya adalah melakukan dump lalu memuatnya kembali ke database yang dibuat dengan benar. Buat database dengan benar sejak awal.

database:
  name: psycopg2
  txn_limit: 10000
  args:
    user: synapse_user
    password: secretpassword
    dbname: synapse
    host: localhost
    port: 5432
    cp_min: 5
    cp_max: 10

Gunakan tepat satu kunci database: di semua file konfigurasi Anda. Ganti blok SQLite di dalam homeserver.yaml, bukan menambahkan salinan kedua di bawah conf.d, agar tidak ada keraguan tentang konfigurasi yang sedang digunakan. Mulai ulang, lalu pastikan Synapse benar-benar menggunakan Postgres:

sudo -u postgres psql synapse -c "SELECT count(*) FROM users;"

Angka menunjukkan bahwa Synapse telah membuat skemanya di database ini. Error tentang relation yang tidak ditemukan berarti Synapse masih menulis ke file SQLite, sehingga konfigurasi yang Anda edit bukan konfigurasi yang dibaca.

Reverse proxy, TLS, dan file .well-known yang diperlukan federation

Synapse mendengarkan HTTP biasa pada port 8008 dan terikat ke localhost. TLS dan port publik ditangani oleh reverse proxy di depannya.

listeners:
- port: 8008
  tls: false
  type: http
  x_forwarded: true
  bind_addresses:
  - '::1'
  - '127.0.0.1'
  resources:
  - names:
    - client
    - federation
    compress: false

x_forwarded: true memberi tahu Synapse untuk memercayai header X-Forwarded-For yang ditetapkan oleh proxy. Tanpa header ini, setiap client terlihat seolah-olah berasal dari 127.0.0.1. Akibatnya, rate limiting melihat satu pengguna lokal yang sangat sibuk dan membatasi semua pengguna secara bersamaan.

location ~ ^(/_matrix|/_synapse/client) {
    proxy_pass http://localhost:8008;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $host:$server_port;
    client_max_body_size 50M;
    proxy_http_version 1.1;
}

Dokumentasi Synapse memberikan satu peringatan tentang blok ini yang telah membuat banyak orang menghabiskan waktu berhari-hari. Jangan menambahkan path, bahkan satu / pun, setelah port dalam proxy_pass. nginx kemudian melakukan canonicalisasi URI. Proses ini mengubah byte yang ditandatangani oleh server pengirim, sehingga permintaan federation gagal dalam verifikasi signature, sementara permintaan client biasa tetap berfungsi.

client_max_body_size harus setidaknya sama besar dengan max_upload_size milik Synapse. Jika nginx menggunakan nilai yang lebih kecil, upload yang melebihi nilai tersebut ditolak oleh nginx dengan 413 Request Entity Too Large sebelum Synapse menerimanya. Karena itu, tidak ada baris log Synapse yang dapat menjelaskan kegagalan tersebut.

Untuk sertifikat, ikuti Certbot dan Let's Encrypt pada Ubuntu 24.04. Jika proxy belum ditentukan, perbandingan reverse proxy menjelaskan proxy mana yang menangani TLS untuk Anda.

Delegation memungkinkan server_name tetap berada pada example.com sementara Synapse berjalan pada matrix.example.com. Sajikan dua file dari bare domain:

location /.well-known/matrix/server {
    default_type application/json;
    return 200 '{"m.server": "matrix.example.com:443"}';
}

location /.well-known/matrix/client {
    default_type application/json;
    add_header Access-Control-Allow-Origin '*';
    return 200 '{"m.homeserver": {"base_url": "https://matrix.example.com"}}';
}

File server memberi tahu homeserver lain ke mana harus mengirim trafik federation. Dengan cara ini, federation berjalan melalui 443, bukan port default 8448. File client memberi tahu client Matrix URL yang mendukung @alice:example.com. Header Access-Control-Allow-Origin penting pada file client karena client berbasis browser mengambilnya secara cross-origin. Tanpa header tersebut, browser memblokir respons dan client melaporkan bahwa homeserver Anda tidak dapat ditemukan.

Kedua file harus disajikan melalui TLS yang valid langsung dari example.com. Periksa file tersebut, lalu periksa apa yang terlihat dari luar:

curl -s https://example.com/.well-known/matrix/server
curl -s https://matrix.example.com/_matrix/federation/v1/version

Perintah pertama mengembalikan JSON yang Anda tulis. Perintah kedua mengembalikan objek JSON yang mencantumkan implementasi server dan versinya. Ini membuktikan bahwa proxy dapat menjangkau Synapse melalui path federation. Selanjutnya, jalankan domain tersebut melalui Matrix federation tester di https://federationtester.matrix.org. Pengujian ini mengikuti rute yang sama seperti server remote sebenarnya.

Federasi atau tidak: tentukan dengan sengaja

Federasi adalah inti dari Matrix sekaligus sumber sebagian besar biayanya. Homeserver yang menggunakan federasi menerima koneksi dari server yang belum pernah Anda kenal, menerima event dari server tersebut, melakukan cache media, dan menyimpan state untuk setiap room yang diakses pengguna Anda. Ini adalah keputusan terkait model ancaman, bukan pengaturan default.

Gunakan federasi jika pengguna perlu berkomunikasi dengan pengguna di homeserver lain, atau jika identitas portabel adalah alasan Anda memilih Matrix. Jangan gunakan federasi jika server hanya digunakan oleh satu tim dan semua akun di dalamnya adalah milik Anda. Server tertutup menyimpan lebih sedikit data, menerima lebih sedikit koneksi, dan jauh kurang menarik bagi pihak yang menyalahgunakannya.

Untuk membatasi federasi tanpa menonaktifkannya, Synapse menggunakan daftar izin:

federation_domain_whitelist:
- lon.example.com
- nyc.example.com

Dokumentasi juga merekomendasikan agar listener federasi dibatasi dengan firewall, sehingga trafik yang tidak diinginkan dihentikan di jaringan, bukan di dalam Python. Untuk menonaktifkan federasi sepenuhnya, hapus federation dari daftar listener resources, jangan publikasikan /.well-known/matrix/server, dan biarkan port 8448 tetap tertutup.

Jika alasan Anda menjalankan Matrix adalah chat privat untuk tim dan federasi tidak pernah menjadi bagian dari kebutuhan tersebut, bandingkan biaya operasionalnya dengan alternatif Slack yang di-host sendiri lainnya sebelum memilih Synapse. Rocket.Chat di Docker Compose dapat menyediakan chat tim pada mesin yang lebih kecil karena tidak perlu menyimpan state room organisasi lain.

Repositori media yang diam-diam memenuhi disk

File yang diunggah pengguna Anda sendiri akan tetap berada di disk secara permanen. File yang diposting pengguna di homeserver lain akan diambil dan di-cache di disk Anda segera setelah salah satu klien Anda menampilkannya. Synapse juga membuat thumbnail untuk gambar, sehingga satu foto dapat menjadi beberapa file. Secara default, tidak ada yang kedaluwarsa.

Temukan lokasi penyimpanan dan ukur ukurannya:

grep media_store_path /etc/matrix-synapse/homeserver.yaml
sudo du -sh /var/lib/matrix-synapse/media_store

Ukur path yang dicetak oleh konfigurasi Anda sendiri. Paket Debian menyimpan data Synapse di bawah /var/lib/matrix-synapse, sehingga penyimpanan biasanya berada di sana. Selanjutnya, tetapkan kebijakan retensi di conf.d:

media_retention:
  local_media_lifetime: 90d
  remote_media_lifetime: 14d

Baca kedua baris tersebut dengan saksama karena keduanya bukan jenis pengaturan yang sama. remote_media_lifetime menghapus cache yang kedaluwarsa. Data yang dihapus dapat diambil kembali dari server yang memiliki file tersebut. local_media_lifetime menghapus unggahan pengguna Anda sendiri secara permanen setelah mencapai usia tersebut. Tim yang berbagi dokumen dalam chat dan berharap dapat menemukannya tahun depan akan kehilangan dokumen tersebut. Banyak server hanya menetapkan nilai remote.

Untuk pembersihan satu kali, admin API menerima Unix timestamp dalam milidetik:

BEFORE_TS=$(date -d '30 days ago' +%s%3N)
curl -X POST -H "Authorization: Bearer $ADMIN_TOKEN" \
  "https://matrix.example.com/_synapse/admin/v1/purge_media_cache?before_ts=$BEFORE_TS"

POST /_synapse/admin/v1/purge_media_cache menghapus media remote yang terakhir diakses sebelum timestamp tersebut dari cache. POST /_synapse/admin/v1/media/delete?before_ts=<ms> menghapus media lokal dengan aturan yang sama. Jalankan pembersihan remote terlebih dahulu, lalu ukur kembali karena pada server yang melakukan federasi, cache remote biasanya merupakan bagian yang lebih besar.

Dua pengaturan menggunakan disk yang sama. max_upload_size membatasi ukuran satu unggahan dan harus diselaraskan dengan client_max_body_size di nginx. url_preview_enabled: true membuat server Anda mengambil halaman remote agar klien dapat menampilkan pratinjau tautan. Proses ini menggunakan bandwidth dan menyimpan thumbnail konten yang tidak diunggah oleh siapa pun kepada Anda.

Tutup pendaftaran sebelum pihak lain menemukan homeserver Anda

Pemindai dapat menemukan homeserver yang terbuka dalam hitungan hari. Setelah pembuatan akun dibuka untuk umum, server Anda menjadi sumber spam di setiap room yang terhubung melalui federasi, dan administrator di sisi lain memblokir seluruh domain Anda. Dampak reputasi tersebut bertahan lebih lama daripada proses pembersihan karena daftar blokir dikelola secara manual.

Synapse dikirimkan dalam keadaan tertutup. enable_registration secara default bernilai false dan registration_requires_token secara default bernilai false. Synapse juga menolak untuk berjalan jika pendaftaran diaktifkan tanpa langkah verifikasi, kecuali Anda juga menetapkan enable_registration_without_verification: true. Penolakan tersebut disengaja. Karena itu, jangan aktifkan opsi tersebut hanya untuk menghilangkan error saat startup.

Buat akun yang diperlukan secara manual:

sudo register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008

Perintah tersebut meminta nama pengguna, password, dan apakah akun tersebut merupakan administrator server. Perintah tersebut membaca registration_shared_secret dari konfigurasi yang Anda berikan melalui -c. Jika muncul laporan bahwa shared secret tidak ditemukan, arahkan -c ke file yang menyimpannya.

Jika pembuatan akun secara manual tidak lagi efisien, gunakan token pendaftaran. Token adalah string yang harus diberikan pengguna baru saat mendaftar. Setiap token dapat memiliki batas jumlah penggunaannya:

enable_registration: true
registration_requires_token: true
curl -X POST -H "Authorization: Bearer $ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"uses_allowed": 1}' \
  https://matrix.example.com/_synapse/admin/v1/registration_tokens/new

Jangan masukkan token ke dalam body. Synapse akan membuatnya dan mengembalikannya. GET /_synapse/admin/v1/registration_tokens menampilkan token yang masih aktif. Kedua pemanggilan tersebut memerlukan access token dari akun administrator server. Anda dapat memperolehnya dengan login sebagai pengguna administrator yang dibuat sebelumnya.

Organisasi yang sudah mengelola akun di tempat lain dapat sepenuhnya meniadakan password lokal karena Synapse dapat mendelegasikan login ke penyedia OIDC (OpenID Connect), misalnya Authentik sebagai penyedia SSO yang di-host sendiri. Proses penambahan dan penghapusan pengguna kemudian dikelola di satu tempat.

Cadangan yang benar-benar dapat membangun ulang server

Cadangan Synapse memiliki tiga bagian. Jika salah satunya tidak ada, pemulihan akan menghasilkan server yang tidak dapat digunakan.

  • Database Postgres, yang menyimpan setiap event, akun, dan room.
  • Direktori media store, yang menyimpan setiap file yang diunggah.
  • /etc/matrix-synapse, yang menyimpan konfigurasi dan signing key server.

Signing key adalah bagian yang sering terlupakan. Ini adalah private key yang digunakan homeserver untuk menandatangani event. Server jarak jauh memverifikasi event menggunakan public key yang sesuai. Jalankan grep signing_key_path /etc/matrix-synapse/homeserver.yaml untuk melihat lokasinya. Jika key ini hilang, Anda memulihkan server yang tidak dapat membuktikan bahwa server tersebut adalah server yang sama dengan yang sudah dikenal oleh room Anda.

sudo -u postgres pg_dump --format=custom --file=/var/backups/synapse-$(date +%F).dump synapse
sudo tar czf /var/backups/synapse-etc-$(date +%F).tgz -C /etc matrix-synapse

Dump database terlebih dahulu, lalu salin media store. File media ditulis satu kali dan dirujuk berdasarkan ID. Dengan demikian, salinan media yang dibuat setelah dump hanya dapat berisi file tambahan, bukan file yang hilang. Urutan sebaliknya dapat membuat database hasil pemulihan merujuk ke file yang tidak pernah dicadangkan.

Kirim ketiga bagian tersebut keluar dari VPS. restic dengan snapshot di lokasi terpisah cocok untuk pola ini karena media store merupakan bagian yang besar dan hampir tidak berubah di antara proses pencadangan. Deduplication membuat setiap snapshot tetap kecil.

Selanjutnya, lakukan latihan pemulihan karena cadangan yang belum pernah dipulihkan hanya merupakan asumsi. Siapkan VPS kedua, instal package yang sama, pulihkan konfigurasi, buat database dengan encoding dan locale yang sama, pg_restore dump ke dalamnya, salin kembali media store, lalu login. Catat durasinya. Angka tersebut adalah waktu pemulihan Anda yang sebenarnya.

Saat tabel state membesar: compaction

Synapse menyimpan state room sebagai state group. Pada server federasi, state_groups_state sering menjadi objek terbesar dalam database. Lakukan pengukuran sebelum mengubah apa pun:

sudo -u postgres psql synapse -c "SELECT pg_size_pretty(pg_database_size('synapse'));"
sudo -u postgres psql synapse -c "SELECT pg_size_pretty(pg_total_relation_size('state_groups_state'));"

Jika tabel tersebut mencakup sebagian besar database, proyek ini menyediakan compressor untuk tabel itu, yaitu rust-synapse-compress-state. Alat ini menulis ulang hierarki state group menjadi lebih sedikit baris tanpa mengubah makna state room apa pun. Alat ini dibuat dengan Rust:

sudo apt install -y build-essential libssl-dev pkg-config git
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
git clone https://github.com/matrix-org/rust-synapse-compress-state.git
cd rust-synapse-compress-state/synapse_auto_compressor
cargo build --release
./target/release/synapse_auto_compressor -p postgresql://synapse_user:secretpassword@localhost/synapse -c 500 -n 100

-c menentukan jumlah state group yang diproses sekaligus, sedangkan -n menentukan jumlah chunk yang diproses dalam eksekusi ini. Auto compressor mencatat progresnya. Dengan demikian, eksekusi berikutnya dapat melanjutkan dari posisi tersebut, sehingga alat ini aman dijadwalkan. Dokumentasinya menyebutkan bahwa perubahan diterapkan dalam transaksi pada tabel append-only. Karena itu, alat ini dapat berjalan saat Synapse aktif. Namun, tetap buat backup database sebelum eksekusi pertama.

Ada satu detail PostgreSQL yang sering mengejutkan pengguna. Penghapusan baris mengembalikan ruang kepada PostgreSQL untuk digunakan kembali, bukan kepada file system. Karena itu, df mungkin tidak berubah sama sekali setelah compaction besar. VACUUM FULL mengembalikan ruang tersebut ke file system. Operasi ini mengambil exclusive lock pada tabel dan memerlukan free disk dengan kapasitas kira-kira sebesar ukuran tabel. Jadwalkan operasi ini sebagai maintenance, bukan menjalankannya tanpa perencanaan.

Pemeriksaan yang menunjukkan server dalam kondisi sehat

systemctl status matrix-synapse
curl -s https://example.com/.well-known/matrix/server
curl -s https://matrix.example.com/_matrix/federation/v1/version
sudo -u postgres psql synapse -c "SELECT pg_size_pretty(pg_database_size('synapse'));"
sudo du -sh /var/lib/matrix-synapse/media_store

Kondisi sehat berarti unit aktif dan tidak terus-menerus melakukan restart, file delegasi mengembalikan nilai m.server Anda, endpoint versi federation mengembalikan JSON, dan kedua angka ukuran dapat dibandingkan dengan angka bulan lalu. Pemeriksaan ukuran adalah hal yang sering dilewati, padahal disk penuh dapat membuat server Synapse berhenti tanpa peringatan: volume yang penuh menghentikan Postgres saat menulis, lalu Synapse gagal menangani setiap permintaan yang mengakses database.

FAQ

Berapa banyak RAM yang dibutuhkan server Matrix Synapse?

Untuk homeserver pribadi dengan beberapa pengguna, room kecil, dan tanpa room publik besar, 2 GB sudah memadai. Itulah rekomendasi yang tercantum di sebagian besar halaman sizing hingga August 2026. Dokumentasi Synapse meminta setidaknya 1 GB RAM kosong tambahan jika pengguna Anda akan bergabung ke room publik besar seperti #matrix:matrix.org, karena server Anda kemudian menyimpan state room tersebut dan memproses trafiknya secara terus-menerus. Tambahkan swap pada paket 2 GB agar satu proses bergabung ke room besar tidak menyebabkan proses dihentikan oleh kernel.

Apakah saya harus menggunakan PostgreSQL, bukan SQLite?

Jika jumlah pengguna sudah lebih dari beberapa orang, ya. SQLite hanya mengizinkan satu writer pada satu waktu. Akibatnya, trafik federation dan permintaan client saling memblokir saat beban tinggi, dan permintaan dapat menggantung selama beberapa detik. Proses worker Synapse, yang merupakan cara yang didukung untuk menggunakan lebih dari satu core CPU, memerlukan Postgres. Migrasi di kemudian hari dapat dilakukan dengan synapse_port_db dan menyebabkan downtime. Karena itu, buat database dengan --encoding=UTF8 --locale=C --template=template0 sebelum memiliki pengguna.

Mengapa penggunaan disk Synapse terus bertambah?

Ada satu direktori dan satu tabel. Media store menyimpan setiap file yang diunggah ke room tempat server Anda berada, termasuk salinan media pengguna remote yang di-cache dan thumbnail yang dibuat. Tidak ada data yang kedaluwarsa sampai Anda menetapkan media_retention. Tabel state_groups_state bertambah seiring state room pada server yang menggunakan federation, dan rust-synapse-compress-state menguranginya. Ukur keduanya dengan du -sh pada media_store_path Anda dan dengan SELECT pg_size_pretty(pg_total_relation_size('state_groups_state')); sebelum menentukan bagian yang harus ditangani.

Bagaimana cara menghentikan orang asing mendaftar di homeserver saya?

Biarkan enable_registration pada nilai default false dan buat akun dengan register_new_matrix_user. Jika cara ini tidak lagi memadai, tetapkan enable_registration: true bersama registration_requires_token: true, lalu bagikan token yang dibuat melalui POST /_synapse/admin/v1/registration_tokens/new. Jangan menetapkan enable_registration_without_verification: true hanya untuk menghilangkan penolakan startup Synapse, karena homeserver yang terbuka dapat menjadi sumber spam dan administrator lain dapat merespons dengan memblokir seluruh domain Anda.

Apakah homeserver saya sebaiknya menggunakan federation?

Federation adalah keputusan tentang eksposur, bukan pengaturan default. Gunakan federation jika pengguna Anda perlu berkomunikasi dengan orang di homeserver lain. Nonaktifkan federation jika server hanya melayani satu tim, karena server tanpa federation menyimpan lebih sedikit data, menerima lebih sedikit trafik, dan jauh lebih jarang menjadi sasaran penyalahgunaan. Sebagai opsi di antara keduanya, federation_domain_whitelist membatasi federation ke domain partner yang ditentukan. Dokumentasi Synapse juga merekomendasikan firewall pada federation listener, bukan hanya mengandalkan pemeriksaan pada lapisan aplikasi tersebut.

#matrix#synapse#self-hosting#postgresql#federation