GNU/Linux >> Belajar Linux >  >> Linux

Cara Menginstal Homeserver Matrix Synapse Menggunakan Docker

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 dan jrcs/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:

  1. 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.
  2. 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 perintah docker 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 lingkungan SYNAPSE_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.


Linux
  1. Cara Menginstal Docker di Ubuntu 18.04 / Ubuntu 18.10 / Ubuntu 19.04

  2. Cara Menginstal Docker menggunakan Ansible [Debian/Ubuntu]

  3. Cara menginstal WordPress menggunakan Docker

  1. Cara Menginstal Docker di CentOS

  2. Bagaimana Cara Menginstal Docker di Ubuntu 18.04?

  3. Cara Menginstal Docker di Ubuntu 22.04

  1. Cara Menginstal Docker di CentOS 7

  2. Cara Menginstal Docker di Raspberry Pi

  3. Cara Menginstal Docker di CentOS 8