Yang Dihasilkan
Sebuah homeserver di example.com, berjalan di atas matrix.example.com, berfederasi dengan benar terhadap semua orang. Postgres sebagai basis data, nginx di depan, delegasi ditangani oleh dua file JSON kecil, dan pendaftaran ditutup sehingga server Anda tidak menjadi relay gratis milik orang lain dalam seminggu.
Federasi adalah tempat pemasangan ini biasanya gagal, dan hampir tidak pernah karena Synapse. Server berjalan, pesan lokal berfungsi, tetapi tidak ada apa pun dari luar yang masuk. Dalam praktiknya, penyebabnya hampir selalu delegasi: identitas server dan alamat tempat ia berada adalah dua hal yang berbeda, dan mekanisme yang menghubungkan keduanya mudah salah diatur secara halus.
Sebelum Anda Mulai
- Sebuah R-4 cukup untuk beberapa lusin pengguna. Synapse lebih boros memori daripada boros CPU, dan bergabung dengan ruang federasi yang besar adalah satu-satunya hal yang akan membuatnya bekerja keras.
- Dua nama di DNS:
example.com, yang merupakan identitas server Anda dan muncul di setiap id pengguna, danmatrix.example.com, tempat perangkat lunak sebenarnya mendengarkan. - Sertifikat untuk keduanya. Yang pertama hanya perlu menyajikan dua file statis.
1. Basis Data, dengan Kolasi yang Tepat
apt update && apt install -y postgresql matrix-synapse nginx certbot
sudo -u postgres psql -c "CREATE USER synapse_user WITH PASSWORD '<a long password>';"
sudo -u postgres psql -c "CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' TEMPLATE=template0 OWNER synapse_user;"Kolasi bukanlah detail. Synapse menolak untuk dimulai pada basis data yang dibuat dengan kolasi selain C, dan error yang dicetaknya ketika Anda salah mengaturnya muncul setelah Anda mengimpor data. Lakukan sekarang, dengan benar, sekali.
2. Konfigurasi Homeserver
Paket Debian menanyakan nama server saat pemasangan; jawab example.com, bukan hostname mesin. Jawaban itu menjadi bagian dari setiap id pengguna dan id ruang di server dan tidak dapat diubah setelahnya tanpa meninggalkan server.
Kemudian sunting /etc/matrix-synapse/homeserver.yaml:
server_name: "example.com"
public_baseurl: "https://matrix.example.com/"
pid_file: /run/matrix-synapse.pid
listeners:
- port: 8008
tls: false
type: http
x_forwarded: true
bind_addresses: ['127.0.0.1']
resources:
- names: [client, federation]
compress: false
database:
name: psycopg2
args:
user: synapse_user
password: "<a long password>"
database: synapse
host: 127.0.0.1
cp_min: 5
cp_max: 10
enable_registration: false
registration_shared_secret: "<a long random string>"
report_stats: false
suppress_key_server_warning: true
url_preview_enabled: false
media_store_path: /var/lib/matrix-synapse/media
max_upload_size: 100M
media_retention:
remote_media_lifetime: 30d
rc_message:
per_second: 0.5
burst_count: 15Dua pengaturan tersebut akan menghemat disk dan masalah Anda. Retensi media jarak jauh membuang salinan cache file server lain setelah satu bulan, dan tanpanya penyimpanan media Anda akan tumbuh selamanya dengan konten yang tidak pernah Anda minta. Pratinjau URL dimatikan karena membuat server Anda mengambil alamat arbitrer atas nama siapa pun yang dapat memposting tautan, yang merupakan mesin pemalsuan permintaan dengan antarmuka obrolan.
x_forwarded: true juga penting: tanpa itu Synapse membatasi kecepatan setiap pengguna di dunia seolah-olah mereka satu klien, karena setiap permintaan tampak berasal dari nginx.
3. Delegasi
Identitas Anda adalah example.com dan server Anda berada di matrix.example.com. Dua file menjembatani kesenjangan tersebut. Sajikan keduanya dari example.com, melalui HTTPS, dengan tipe konten yang benar.
/.well-known/matrix/server:
{ "m.server": "matrix.example.com:443" }/.well-known/matrix/client:
{ "m.homeserver": { "base_url": "https://matrix.example.com" } }Port pada file pertama bersifat wajib. Jika Anda menghilangkannya, server lain akan kembali ke port 8448, tidak menemukan apa pun yang mendengarkan, dan menyerah secara diam-diam; kemudian pengguna Anda melaporkan bahwa federasi rusak sementara setiap log di mesin Anda terlihat sehat.
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location /.well-known/matrix/ {
root /var/www/wellknown;
default_type application/json;
add_header Access-Control-Allow-Origin *;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name matrix.example.com;
ssl_certificate /etc/letsencrypt/live/matrix.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.example.com/privkey.pem;
client_max_body_size 100m;
location ~ ^(/_matrix|/_synapse/client) {
proxy_pass http://127.0.0.1:8008;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
}
}Header Access-Control-Allow-Origin pada lokasi well-known diperlukan oleh klien web dan dilupakan oleh hampir semua orang. Tanpanya, klien desktop berfungsi dan klien browser tidak dapat menemukan server Anda sama sekali.
mkdir -p /var/www/wellknown/.well-known/matrix
systemctl restart matrix-synapse nginx4. Seorang Pengguna
register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://127.0.0.1:8008Jawab prompt, jadikan akun pertama sebagai admin, dan biarkan pendaftaran terbuka dimatikan. Homeserver dengan pendaftaran terbuka akan menjadi sumber spam dalam hitungan hari, dan server lain akan mulai menolak lalu lintas Anda jauh sebelum Anda menyadarinya.
Verifikasi
Kerjakan dari luar ke dalam. Pertama, apakah perangkat lunak merespons sama sekali:
curl -s https://matrix.example.com/_matrix/client/versions | head -c 200
curl -s https://matrix.example.com/_matrix/federation/v1/versionKemudian, apakah delegasi disajikan dengan benar, dengan port yang ada dan tipe konten yang tepat:
curl -si https://example.com/.well-known/matrix/server | grep -E "content-type|m.server"
curl -s https://example.com/.well-known/matrix/clientKemudian, apakah kunci penandatanganan Anda dapat diselesaikan. Server lain mengambil ini sebelum mereka mau berbicara dengan Anda sama sekali:
curl -s https://matrix.example.com/_matrix/key/v2/server | head -c 300Terakhir, satu-satunya tes yang penting. Masuk dengan klien, bergabung dengan ruang publik yang dihosting di homeserver yang bukan milik Anda, dan kirim pesan. Kemudian baca status federasi dari API admin, menggunakan token akses yang ditampilkan klien Anda di pengaturannya:
curl -s -H "Authorization: Bearer <admin token>" \
"https://matrix.example.com/_synapse/admin/v1/federation/destinations" | head -c 400Setiap tujuan harus menunjukkan transaksi sukses terbaru dan tidak ada interval percobaan ulang. Tujuan dengan retry_interval yang terus bertambah adalah server yang tidak dapat Anda jangkau; jika setiap tujuan terlihat seperti itu, masalahnya adalah delegasi daripada jaringan, dan langkah ketiga adalah tempat untuk melihat.
journalctl -u matrix-synapse --since "10 min ago" | grep -i "federation" | tail -20Setelahnya
Menggabung ruang yang sangat besar untuk pertama kalinya akan membuat satu inti bekerja penuh selama beberapa menit dan menarik banyak status. Itu normal, terjadi sekali per ruang, dan itu adalah alasan utama orang menyimpulkan Synapse lambat. Suara dan video membutuhkan server TURN di samping server ini; coturn pada instance yang sama menangani komunitas kecil, meskipun ia menginginkan rentang port UDP sendiri di firewall. Federasi banyak bicara di kedua arah, yang perlu diingat ketika memilih situs: indeks lokasi kami mencantumkan waktu bolak-balik yang kami ukur sendiri.