Matrix adalah standar open source (protokol) untuk VoIP, pesan instan dan panggilan video, yaitu komunikasi real-time. Ini menyediakan enkripsi ujung ke ujung bersama dengan dukungan untuk menjembatani ke berbagai alternatif perpesanan lain seperti Slack, IRC, Telegram atau klien XMPP lainnya. Ini dapat bekerja dengan koneksi bandwidth rendah juga.
Dalam tutorial ini, saya akan menunjukkan cara menginstal Matrix homeserver Synapse menggunakan wadah Docker.
Apa itu homeserver Matrix?
Matrix itu sendiri hanyalah sebuah spesifikasi dan ada banyak implementasi dari protokol Matrix yang tersedia untuk umum.
Homeserver pada dasarnya adalah salah satu implementasi yang diterapkan di server, yang dapat Anda akses melalui klien Matrix apa pun seperti Elemen.
Pertanyaan yang mungkin muncul adalah mengapa mengatur homeserver pribadi jika beberapa sudah tersedia untuk umum?
Nah, sebagai permulaan, Anda dapat membagikan homeserver pribadi Anda di antara teman, keluarga, atau kolega Anda dan menggunakannya sebagai media komunikasi Anda sehari-hari. Kecuali Anda terlibat dalam percakapan dengan beberapa pengguna dari server rumah lain, semua data akan aman dan terlindungi di server Anda.
Ini memberi Anda kendali atas setiap aspek yang tidak dapat disediakan oleh server rumah publik.
Menerapkan implementasi homserver Synapse Matrix menggunakan wadah Docker
Saya akan menggunakan Synapse, implementasi homeserver Matrix yang populer dalam tutorial ini. Ditulis dengan Python, Synapse dikembangkan oleh tim inti Matrix.
Kami di Linux Handbook lebih memilih buruh pelabuhan daripada penyebaran asli, jadi bagian berikut akan mencakup penyebaran Synapse yang dilakukan menggunakan Docker.
Prasyarat
- Sistem/server Linux. Sebaiknya gunakan Linode untuk menerapkan server Linux di cloud dengan cepat.
- Domain yang berfungsi dan akses ke catatan DNS-nya (kecuali jika Anda ingin menyiapkannya di localhost)
- Anda harus menginstal docker &docker-compose. Anda dapat mengikuti panduan kami tentang menginstal Docker dan Docker Compose di CentOS.
- Saya yakin Anda memiliki pengetahuan tentang perintah penting Linux dan Anda tidak takut menggunakan terminal untuk mengedit file konfigurasi.
- Pengetahuan dasar tentang Docker akan membantu Anda, tetapi Anda juga dapat mengikuti tutorial tanpanya.
Langkah 1:Siapkan proxy terbalik
Sebelum mengotori tangan Anda dengan Synapse, pertama-tama, Anda harus menyiapkan wadah proxy terbalik dan wadah pendampingnya Let's Encrypt untuk sertifikat TLS (Anda memang menginginkan https, percayalah pada saya).
Mengonfigurasi penampung proxy terbalik
Pada lingkungan produksi, Anda tidak menggunakan docker run ...
, Anda menggunakan docker-compose
. Jadi, mari konfigurasikan jwilder/nginx-proxy
sebagai proxy terbalik.
Buat direktori bernama reverse-proxy dan alihkan ke direktori yang baru dibuat ini:
mkdir reverse-proxy && cd reverse-proxy
Sekarang buka editor teks favorit Anda, buat file bernama docker-compose.yml
, dan tambahkan konten berikut:
version: "3.3"
services:
proxy:
image: "jwilder/nginx-proxy"
container_name: "proxy"
volumes:
- "certs:/etc/nginx/certs"
- "vhost:/etc/nginx/vhost.d"
- "html:/usr/share/nginx/html"
- "/run/docker.sock:/tmp/docker.sock:ro"
networks: ["server"]
restart: "always"
ports:
- "80:80"
- "443:443"
Jadi di sini, pertama-tama Anda mendefinisikan layanan Anda, bernama proxy
. Karakteristik utama yang perlu diingat adalah:
- Serts volume, vhost, dan html akan dibagikan antara
jwilder/nginx-proxy
danjrcs/letsencrypt-nginx-proxy-companion
kontainer. - Soket buruh pelabuhan dipasang hanya baca di
/tmp/docker.sock
. - Ini menggunakan jaringan selain jaringan jembatan default.
- Port 80 dan 443 terikat, masing-masing untuk http dan https.
Konfigurasi letsencrypt-nginx-proxy-companion
Tambahkan yang berikut ini di akhir file penulisan yang sama
letsencrypt:
image: "jrcs/letsencrypt-nginx-proxy-companion"
container_name: "letsencrypt"
volumes:
- "certs:/etc/nginx/certs"
- "vhost:/etc/nginx/vhost.d"
- "html:/usr/share/nginx/html"
- "/run/docker.sock:/var/run/docker.sock:ro"
environment:
NGINX_PROXY_CONTAINER: "proxy"
networks: ["server"]
restart: "always"
depends_on: ["proxy"]
Di sini Anda memiliki layanan lain yang ditentukan, bernama letsencrypt. Mari kita lihat yang ini juga:
- Semua volume dari layanan sebelumnya juga dipasang di lokasi yang sama di sini.
- Soket buruh pelabuhan terikat hanya baca di
/var/run/docker.sock
. - Variabel lingkungan
NGINX_PROXY_CONTAINER
disetel ke nama wadah dari wadah proxy terbalik, yang dalam kasus kami adalah "proxy". - Ini berbagi jaringan "server" yang sama.
Di akhir kedua deskripsi layanan ini, tambahkan definisi volume dan definisi jaringan, seperti di bawah ini:
networks:
server:
external: true
volumes:
certs:
vhost:
html:
Dua hal penting yang perlu diperhatikan di sini:
- Anda akan menggunakan file penulisan terpisah untuk Synapse. Dengan cara ini, Anda akan memiliki penerapan modular, dan Anda akan dapat dengan mudah menghentikan satu layanan, tanpa memengaruhi yang lain, dengan menerapkan proxy terbalik dan pengiring menggunakan file YAML yang berbeda.
- Jaringannya eksternal. Itu untuk menghindari masalah apa pun dengan wadah lain yang tidak berbagi jaringan yang sama karena cara
docker-compose
beri nama volume dan jaringannya ketika dibiarkan dibuat secara otomatis. Jadi yang membawa kita untuk membuat jaringan. Gunakan perintahdocker network create server
untuk membuat jaringan.
Sekarang setelah semuanya selesai, simpan file dan keluar dari editor.
Sekarang saatnya untuk memulai server proxy terbalik Anda.
docker-compose up -d
Langkah 2:Siapkan Sinaps
Sekarang saatnya Anda akhirnya mulai fokus pada bagian yang baik. Jadi menyebarkan sinapsis benar-benar merupakan proses dua langkah.
Pertama, Anda memerlukannya untuk menghasilkan konfigurasi, selanjutnya, Anda merapikan konfigurasi dan menyebarkan homeserver kami.
Mari kita mulai dengan mendapatkan file penulisan.
Buat konfigurasi
Buat direktori terpisah bernama "sinaps" dan alihkan ke direktori tersebut.
mkdir synapse && cd synapse
Buat file bernama docker-compose.yml
dan buka, Anda tahu latihannya, bukan?
Pastikan Anda menggunakan nilai yang benar untuk sub.domain.com
dalam file yml di sini:
version: "3.3"
services:
synapse:
image: "matrixdotorg/synapse:latest"
container_name: "synapse"
volumes:
- "./data:/data"
environment:
VIRTUAL_HOST: "sub.domain.com"
VIRTUAL_PORT: 8008
LETSENCRYPT_HOST: "sub.domain.com"
SYNAPSE_SERVER_NAME: "sub.domain.com"
SYNAPSE_REPORT_STATS: "yes"
networks: ["server"]
networks:
server:
external: true
Ini adalah file penulisan standar dari tampilannya, tetapi masih ada beberapa opsi menonjol yang dijelaskan di bawah ini:
- Anda menggunakan bind mount alih-alih volume, itu karena file konfigurasi akan dibuat di sana dan Anda harus mengeditnya. Anda pasti dapat menggunakan volume, tetapi kemudian Anda harus mengedit file yang terletak di
/var/lib/docker/volumes/<name>/_data
. - Variabel lingkungan
VIRTUAL_HOST
&LETSENCRYPT_HOST
adalah untuk letsencrypt dan reverse proxy container, yang akan menghasilkan perubahan konfigurasi yang diperlukan bersama dengan sertifikat, tanpa Anda campur tangan secara manual. - Pastikan
SYNAPSE_SERVER_NAME
menunjuk ke FQDN server Synapse Anda (Bersama dengan subdomain). - Setel
VIRUAL_PORT
ke 8008. Kontainer sinapsis memperlihatkan port HTTP 8008 agar kliennya dapat berkomunikasi dengannya. - Terakhir, pastikan penampung ini menggunakan jaringan yang sama dengan penampung proxy terbalik, atau penampung tidak akan dapat berkomunikasi, yang pada gilirannya akan merusak seluruh proses.
Konfirmasikan bahwa Anda memiliki IP server yang ditambahkan ke catatan A DNS Anda dan catatan CNAME menunjuk ke subdomain yang tepat.
Buat data
direktori dan jalankan perintah berikut
docker-compose run --rm synapse generate
Ini akan menghasilkan file konfigurasi di dalam ./data, bernama "homeserver.yaml".
Konfigurasikan sinapsis
Ada banyak opsi yang dapat dikonfigurasi di homeserver.yaml
file, yang berada di luar cakupan tutorial ini. Saya sarankan Anda membaca komentar di file itu dan membaca di sini.
Untuk saat ini, pastikan perubahan berikut:
server_name
variabel disetel ke subdomain pilihan Anda, seperti yang disetel dalam variabel lingkunganSYNAPSE_SERVER_NAME
.- TLS disetel ke false. Anda menggunakan proxy terbalik, jadi TLS ditangani melalui server web Anda. Biarkan portnya.
- Pastikan
enable_registration
disetel ke true, sehingga Anda dapat mendaftar dan menggunakan server rumah Anda.
Simpan file dan keluar.
Menerapkan server rumah Synapse Matrix
Sekarang semuanya sudah siap, Anda dapat memulai sinapsis menggunakan perintah sesederhana
docker-compose up -d
Sekarang homeserver Anda siap digunakan. Jika Anda mengunjungi subdomain di browser web, Anda akan melihat pesan seperti ini:
Menggunakan PostgreSQL untuk database [opsional]
Secara default, sinapsis menggunakan SQLite untuk databasenya. Itu bagus untuk pengujian dan penggunaan biasa, tetapi untuk kasus penggunaan yang lebih penting, saya sarankan menggunakan PostgreSQL.
Tambahkan PostgreSQL ke file penulisan sinaps
Buka direktori sinapsis jika Anda belum membukanya, dan buka docker-compose.yml
. Tambahkan baris berikut ke file penulisan ini.
postgresql:
image: postgres:latest
restart: always
environment:
POSTGRES_PASSWORD: somepassword
POSTGRES_USER: synapse
POSTGRES_DB: synapse
POSTGRES_INITDB_ARGS: "--encoding='UTF8' --lc-collate='C' --lc-ctype='C'"
volumes:
- "postgresdata:/var/lib/postgresql/"
networks: ["server"]
POSTGRES_INITDB_ARGS
variabel sangat diperlukan. Ini mengatur collation, ctype dan encoding yang digunakan untuk database postgres. Ini adalah kebutuhan mutlak untuk sinapsis untuk bekerja. Tambahkan volume ke bagian volume:
volumes:
postgresdata:
Konfigurasikan Sinapsis
Sekarang Anda harus memberi tahu sinapsis tentang database postgresql. Anda melakukannya dengan mengedit homeserver.yaml
yang lama mengajukan. Buka file itu, dan temukan baris berikut:
database:
name: sqlite3
args:
database: /path/to/homeserver.db
Hapus ini karena kami tidak membutuhkannya lagi. Tambahkan yang berikut ini sebagai gantinya:
database:
name: psycopg2
args:
user: synapse
password: somepassword
host: postgresql
database: synapse
cp_min: 5
cp_max: 10
Nama databasenya adalah psycopg2, yang merupakan adaptor PostgreSQL untuk python.
Perhatikan baik-baik, Anda akan melihat kesamaan antara ini, dan variabel lingkungan yang telah Anda siapkan untuk wadah postgresql.
Adapun Host, karena Anda menggunakan docker-compose
dan jaringan khusus, sinapsis akan dapat menyelesaikan nama layanan secara otomatis. Anda tidak perlu khawatir tentang itu.
Simpan file dan keluar.
Terapkan
Nah, apa yang tersisa untuk dilakukan benar-benar? Terapkan.
docker-compose up -d
Uji penerapan homeserver Synapse Matrix
Server rumah Anda sudah siap. Mari kita uji. Matrix hanyalah sebuah protokol, Synapse hanyalah sebuah implementasi. Anda memerlukan klien Matrix untuk dapat menggunakannya seperti alat perpesanan.
Berikut adalah daftar berbagai klien Matrix yang tersedia. Element mungkin adalah salah satu klien Matrix paling populer yang dapat Anda gunakan.
Saat Anda menginstal klien Matrix, jalankan. Buat akun di sini.
Pada halaman registrasi, isikan semua detail dan pada homeserver, masukkan subdomain yang telah Anda gunakan sebelumnya. Klik daftar.
Sekarang Anda memiliki penerapan Synapse yang berfungsi sempurna yang dapat Anda gunakan dengan keluarga atau teman Anda tanpa harus khawatir tentang di mana data Anda disimpan atau semacamnya.
Menyiapkan federasi di Synapse dengan Docker [opsional]
Federasi pada dasarnya adalah kemampuan untuk berkomunikasi dengan pengguna di server rumah yang berbeda.
Misalnya, jika userid Anda adalah @coolguy:coolserver.me Anda dapat mengundang seseorang seperti @Greatme:awesome.us ke sebuah ruangan di homeserver Anda.
Demikian pula, Anda juga dapat bergabung dengan ruang yang dihosting di server rumah lain.
Jika Anda sudah menjalankan sinapsis, tidak perlu menghentikan wadah. Anda hanya perlu membuat perubahan pada wadah proxy NGINX Anda. Ini terdiri dari tidak lebih dari tiga langkah singkat dan mudah.
Ada beberapa cara untuk membuat Federasi bekerja, tetapi di antara itu, salah satu yang menurut saya sangat mudah diikuti, dan memerlukan sedikit perubahan pada pengaturan yang ada, disebut delegasi port.
Secara default, setiap server matriks mencoba menjangkau server matriks lain melalui port 8443. Proses berikut pada dasarnya memberitahu server lain untuk menggunakan port yang berbeda. Karena https sudah bekerja di port 443, Anda cukup mendelegasikan port komunikasi matriks default ke 443.
Langkah 1:Buat file konfigurasi untuk proxy terbalik kami
Masuk ke direktori proxy terbalik Nginx. Buat file, bernama synapse-federation
. Tambahkan teks berikut ke file ini:
location /.well-known/matrix/server {
return 200 '{"m.server": "$VIRTUAL_HOST:443"}';
}
Ubah $VIRTUAL_HOST
ke nilai yang sesuai, yang pada dasarnya adalah domain tempat instance matriks Anda disajikan (diatur menurut file komposisi buruh pelabuhan sinaps).
Langkah 2:Edit docker-compose.yml
Buka docker-compose.yml
. Anda file dan tambahkan entri lain ke larik volume:
- ./synapse-federation:/etc/nginx/vhost.d/$VIRTUAL_HOST
Sekali lagi, ubah $VIRTUAL_HOST
ke nilai yang sesuai.
Langkah 3:Mulai ulang server proxy
Sekarang Anda perlu me-restart server proxy.
docker-compose up -d proxy
Ini akan membuat ulang penampung proxy terbalik. Anda tidak perlu khawatir tentang konfigurasi sebelumnya yang hilang, kecuali jika Anda mengubah apa pun secara manual pasca penerapan. Konfigurasi bersifat dinamis, sehingga semuanya akan baik-baik saja.
Uji perubahan
Anda dapat menguji perubahan dengan dua cara.
Coba bergabung dengan ruang seperti #servers:matrix.org
. Jalankan perintah berikut, jika Anda memiliki jq
terpasang:
curl https://federationtester.matrix.org/api/report?server_name=$VIRTUAL_HOST --silent | jq -r '.FederationOK'
Atau gunakan yang lebih hack-y ini:
curl https://federationtester.matrix.org/api/report?server_name=$VIRTUAL_HOST --silent | awk '/FederationOK/ {print $2}'
Ini harus menampilkan 'benar'. Dan jelas ubah $VIRTUAL_HOST
ke domain yang melayani instance sinapsis Anda.
Apakah itu membantu?
Saya harap ini bermanfaat bagi Anda seperti halnya pengalaman itu bagi saya. Jika Anda ingin lebih banyak artikel seperti ini, jangan ragu untuk berkomentar di bawah. Jika Anda menghadapi masalah apa pun, tinggalkan komentar dan saya akan mencoba membantu Anda.