Cách cài đặt và tạo máy chủ trò chuyện bằng Matrix Synapse và Element trên Debian 12

theanh

Administrator
Nhân viên
Matrix là một tiêu chuẩn mở cho giao tiếp phi tập trung và được mã hóa đầu cuối. Đây là một tập hợp các máy chủ và dịch vụ giao tiếp với nhau bằng API chuẩn hóa đồng bộ hóa theo thời gian thực. Nó sử dụng máy chủ gia đình để lưu trữ thông tin tài khoản và lịch sử trò chuyện. Nếu một máy chủ gia đình ngừng hoạt động, các máy chủ khác có thể tiếp tục giao tiếp mà không có vấn đề gì do bản chất của sự phi tập trung. Bạn có thể sử dụng máy chủ gia đình Matrix do người khác lưu trữ hoặc máy chủ của riêng bạn để duy trì quyền kiểm soát dữ liệu của mình.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt và tạo máy chủ trò chuyện bằng Synapse, một triển khai máy chủ gia đình của Matrix. Element là một máy khách web Matrix được xây dựng bằng Matrix React SDK. Điều này sẽ cho phép bạn cung cấp trò chuyện Matrix trên web. Bạn cũng có thể sử dụng máy chủ bằng bất kỳ máy khách Matrix nào khác mà bạn chọn. Chúng tôi cũng sẽ cài đặt máy chủ Coturn để kích hoạt tính năng gọi thoại và gọi video. Dịch vụ Coturn là tùy chọn trong trường hợp bạn không muốn sử dụng dịch vụ này.

Điều kiện tiên quyết​


  1. Máy chủ chạy Debian 12.

  2. Người dùng không sử dụng sudo có quyền root.

  3. Tường lửa đơn giản (UFW) được bật và đang chạy.

  4. Tên miền đủ điều kiện (FQDN) cho Matrix, Element và Coturn trỏ đến máy chủ của bạn. Chúng tôi sẽ sử dụng matrix.example.com, element.example.comcoturn.example.com tương ứng cho ba dịch vụ.

  5. Đảm bảo rằng mọi thứ đều được cập nhật.
    Mã:
    $ sudo apt update && sudo apt upgrade

Bước 1 - Cấu hình Tường lửa​

Trước khi cài đặt bất kỳ gói nào, bước đầu tiên là cấu hình tường lửa để mở các cổng cho HTTP, HTTPS và Synapse.

Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo ufw status
Bạn sẽ thấy nội dung tương tự như sau.
Mã:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Mở các cổng HTTP, HTTPS và Synapse trong tường lửa.
Mã:
$ sudo ufw allow 8448
$ sudo ufw allow http
$ sudo ufw allow https
Kiểm tra lại trạng thái để xác nhận.
Mã:
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
8448 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
8448 (v6) ALLOW Anywhere (v6)

Bước 2 - Cài đặt Matrix Synapse​

Thêm khóa Matrix GPG.
Mã:
$ sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
Thêm kho lưu trữ Matrix APT.
Mã:
$ 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
Cập nhật danh sách kho lưu trữ hệ thống.
Mã:
$ sudo apt update
Cài đặt Matrix Synapse.
Mã:
$ sudo apt install matrix-synapse-py3
Trong quá trình cài đặt, bạn sẽ được yêu cầu nhập tên máy chủ, đây là một phần của Matrix ID của bạn. Hãy nhập tên miền Matrix của bạn vào đó. Địa chỉ này sẽ đóng vai trò là địa chỉ máy chủ tại nhà của bạn.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22317%22%3E%3C/svg%3E


Bạn cũng sẽ được hỏi xem có muốn gửi số liệu thống kê ẩn danh về máy chủ tại nhà của mình trở lại Matrix hay không. Nhập N để từ chối.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22318%22%3E%3C/svg%3E


Bạn có thể thay đổi các thiết lập này sau trong tệp /etc/matrix-synapse/conf.d/server_name.yaml.

Dịch vụ Matrix Synapse được bật và bắt đầu trong quá trình cài đặt. Kiểm tra trạng thái của dịch vụ.
Mã:
$ sudo systemctl status matrix-synapse
? matrix-synapse.service - Synapse Matrix homeserver Loaded: loaded (/lib/systemd/system/matrix-synapse.service; enabled; preset: enabled) Active: active (running) since Mon 2023-10-02 07:47:43 UTC; 1min 33s ago Process: 1558 ExecStartPre=/opt/venvs/matrix-synapse/bin/python -m synapse.app.homeserver --config-path=/etc/matrix-synapse/homeserver.yaml --config-path=/etc/matrix-synapse/conf.d/ --generate-keys (code=> Main PID: 1563 (python) Tasks: 8 (limit: 2315) Memory: 102.7M CPU: 3.609s CGroup: /system.slice/matrix-synapse.service ??1563 /opt/venvs/matrix-synapse/bin/python -m synapse.app.homeserver --config-path=/etc/matrix-synapse/homeserver.yaml --config-path=/etc/matrix-synapse/conf.d/
Oct 02 07:47:41 lomp matrix-synapse[1558]: Generating signing key file /etc/matrix-synapse/homeserver.signing.key
Oct 02 07:47:43 lomp matrix-synapse[1563]: This server is configured to use 'matrix.org' as its trusted key server via the
Oct 02 07:47:43 lomp matrix-synapse[1563]: 'trusted_key_servers' config option. 'matrix.org' is a good choice for a key
Oct 02 07:47:43 lomp matrix-synapse[1563]: server since it is long-lived, stable and trusted. However, some admins may
Oct 02 07:47:43 lomp matrix-synapse[1563]: wish to use another server for this purpose.
Oct 02 07:47:43 lomp matrix-synapse[1563]: To suppress this warning and continue using 'matrix.org', admins should set
Oct 02 07:47:43 lomp matrix-synapse[1563]: 'suppress_key_server_warning' to 'true' in homeserver.yaml.
Oct 02 07:47:43 lomp matrix-synapse[1563]: --------------------------------------------------------------------------------
Oct 02 07:47:43 lomp matrix-synapse[1563]: Config is missing macaroon_secret_key
Oct 02 07:47:43 lomp systemd[1]: Started matrix-synapse.service - Synapse Matrix homeserver.

Bước 3 - Cài đặt và cấu hình PostgreSQL​

Chúng tôi sẽ sử dụng kho lưu trữ APT chính thức của PostgreSQL để cài đặt phiên bản PostgreSQL mới nhất. Chạy lệnh sau để thêm khóa GPG PostgreSQL.
Mã:
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null
Thêm kho lưu trữ APT vào danh sách nguồn của bạn.
Mã:
$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
Cập nhật hệ thống kho lưu trữ.
Mã:
$ sudo apt update
Bây giờ, bạn có thể cài đặt PostgreSQL bằng lệnh sau.
Mã:
$ sudo apt install postgresql postgresql-contrib
Tại thời điểm viết hướng dẫn này, PostgreSQL 16 là phiên bản mới nhất. Để cài đặt phiên bản khác, hãy sửa đổi lệnh như sau để cài đặt PostgreSQL 14 thay thế.
Mã:
$ sudo apt install postgresql-14 postgresql-contrib-14
Kiểm tra trạng thái của dịch vụ PostgreSQL.
Mã:
$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled) Active: active (exited) since Mon 2023-10-02 07:51:10 UTC; 13s ago Main PID: 4001 (code=exited, status=0/SUCCESS) CPU: 1ms
Oct 02 07:51:10 lomp systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Oct 02 07:51:10 lomp systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.
Bạn có thể thấy dịch vụ được bật và chạy theo mặc định.

Đăng nhập vào postgres tài khoản hệ thống.
Mã:
$ sudo -su postgres
Tạo người dùng cơ sở dữ liệu mới và cơ sở dữ liệu cho PostgreSQL.
Mã:
$ createuser --pwprompt synapse
$ createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse synapsedb
Thoát khỏi postgres tài khoản.
Mã:
$ exit

Bước 4 - Cài đặt Nginx​

Đối với môi trường sản xuất, bạn nên chạy máy chủ Synapse bằng proxy Nginx.

Debian 12 đi kèm với phiên bản Nginx cũ hơn. Để cài đặt phiên bản mới nhất, bạn cần tải xuống kho lưu trữ Nginx chính thức.

Nhập khóa ký của Nginx.
Mã:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Thêm kho lưu trữ cho phiên bản ổn định của Nginx.
Mã:
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Cập nhật hệ thống kho lưu trữ.
Mã:
$ sudo apt update
Cài đặt Nginx.
Mã:
$ sudo apt install nginx
Xác minh cài đặt. Vì chúng ta đang sử dụng Debian, lệnh sau cần được chạy với quyền sudo.
Mã:
$ sudo nginx -v
nginx version: nginx/1.24.0
Khởi động Nginx máy chủ.
Mã:
$ sudo systemctl start nginx
Kiểm tra trạng thái của dịch vụ.
Mã:
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled) Active: active (running) since Mon 2023-10-02 07:59:12 UTC; 1s ago Docs: https://nginx.org/en/docs/ Process: 5767 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 5768 (nginx) Tasks: 2 (limit: 2315) Memory: 1.7M CPU: 7ms CGroup: /system.slice/nginx.service ??5768 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??5769 "nginx: worker process"

Bước 5 - Cài đặt SSL​

Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL miễn phí do Let's Encrypt cung cấp. Bạn có thể cài đặt Certbot bằng kho lưu trữ của Debian hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng tôi sẽ sử dụng phiên bản Snapd.

Debian 12 không cài đặt Snapd. Phát hành lệnh sau để cài đặt Snapd.
Mã:
$ sudo apt install snapd -y
Chạy các lệnh sau để đảm bảo phiên bản Snapd của bạn được cập nhật.
Mã:
$ sudo snap install core
$ sudo snap refresh core
Cài đặt Certbot.
Mã:
$ sudo snap install --classic certbot
Sử dụng lệnh sau để đảm bảo lệnh Certbot có thể chạy được bằng cách tạo liên kết tượng trưng đến /usr/bin thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Kiểm tra phiên bản Certbot.
Mã:
$ certbot --version
certbot 2.6.0
Chạy lệnh sau để tạo SSL Chứng chỉ.
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d matrix.example.com
Lệnh trên sẽ tải chứng chỉ xuống thư mục /etc/letsencrypt/live/matrix.example.com trên máy chủ của bạn.

Tạo nhóm Diffie-Hellman chứng chỉ.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Kiểm tra dịch vụ lập lịch gia hạn Certbot.
Mã:
$ sudo systemctl list-timers
Bạn sẽ tìm thấy snap.certbot.renew.service là một trong những dịch vụ được lên lịch chạy.
Mã:
NEXT LEFT LAST PASSED UNIT ACTIVATES
.....
Mon 2023-10-02 16:33:00 UTC 8h left - - snap.certbot.renew.timer snap.certbot.renew.service
Tue 2023-10-03 00:00:00 UTC 15h left - - dpkg-db-backup.timer dpkg-db-backup.service
Tue 2023-10-03 00:00:00 UTC 15h left Mon 2023-10-02 07:38:16 UTC 26min ago exim4-base.timer exim4-base.service
Thực hiện chạy thử quy trình để kiểm tra xem việc gia hạn SSL có hoạt động không tốt.
Mã:
$ sudo certbot renew --dry-run
Nếu bạn không thấy lỗi nào, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.

Bước 6 - Cấu hình Matrix Synapse​

Bạn có thể cấu hình máy chủ Matrix thông qua tệp /etc/matrix-synapse/homeserver.yaml nhưng không khuyến khích vì tệp sẽ bị ghi đè sau mỗi lần nâng cấp. Đối với mục đích sử dụng sản xuất, bạn nên đặt các tệp cấu hình trong thư mục /etc/matrix-synapse/conf.d.

Cài đặt Synapse đã tạo hai tệp cấu hình trong /etc/matrix-synapse/conf.d thư mục.
Mã:
$ ls /etc/matrix-synapse/conf.d
report_stats.yaml server_name.yaml
Tạo tệp cấu hình mới cho cơ sở dữ liệu và mở tệp đó để chỉnh sửa.
Mã:
$ sudo nano /etc/matrix-synapse/conf.d/database.yaml
Dán các dòng sau vào trình chỉnh sửa. Thay thế trường your-password bằng mật khẩu người dùng PostgreSQL mà bạn đã tạo ở bước 3. Thay thế localhost bằng địa chỉ IP của máy chủ của bạn, nếu bạn đang lưu trữ cơ sở dữ liệu nơi khác.
Mã:
database: name: psycopg2 args: user: synapse password: 'your-password' database: synapsedb host: localhost cp_min: 5 cp_max: 10
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tạo khóa đăng ký bí mật. Khóa này phải được bảo mật vì nó sẽ cho phép bất kỳ ai đăng ký người dùng mới, ngay cả khi đăng ký bị vô hiệu hóa.
Mã:
$ echo "registration_shared_secret: '$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)'" | sudo tee /etc/matrix-synapse/conf.d/registration_shared_secret.yaml
registration_shared_secret: 'vgd73p26ZDaFExpX4OPv45DsA2ZMAxiVZR7um9fBoBoFESmg5MSs68xAMUhwQ8Zn3NqcZMRSqxLeIFatppfne7xD2RHL16YfuIKmNeJ1FClQszO1SZknUVwOPyDiPe5gCCWgD9cHfa3dLTdZND5Y0SdH7GBkwYqKjibAe0JoQc8mKty3HWd6uIga3QewhtXr3b3Hpk8sr6zYpXvaBtWRHwaSWcLooqbWF8LPbSyrC0BVAKzXObUwqRGyDpkrnMiY'
Theo mặc định, Synapse bật các chỉ báo hiện diện cho biết một người có trực tuyến hay không. Nó có thể gây ra tình trạng sử dụng CPU cao, do đó bạn có thể tắt nó. Tạo một tệp cấu hình mới cho cùng một tệp.
Mã:
$ sudo nano /etc/matrix-synapse/conf.d/presence.yaml
Dán dòng sau vào trình chỉnh sửa.
Mã:
presence: enabled: false
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Khởi động lại dịch vụ Synapse để áp dụng thay đổi.
Mã:
$ sudo systemctl restart matrix-synapse
Tạo người dùng ma trận mới. Bạn sẽ được yêu cầu nhập tên người dùng và mật khẩu. Vì đây là người dùng đầu tiên chúng ta tạo, hãy nhập yes khi được hỏi có muốn biến người dùng thành quản trị viên hay không.
Mã:
$ register_new_matrix_user -c /etc/matrix-synapse/conf.d/registration_shared_secret.yaml http://localhost:8008
New user localpart [navjot]: navjot
Password:
Confirm password:
Make admin [no]: yes
Sending registration request...
Success!
Nếu bạn muốn mở đăng ký công khai, hãy tạo cấu hình mới tệp.
Mã:
$ sudo nano /etc/matrix-synapse/conf.d/registration.yaml
Dán các dòng sau vào đó.
Mã:
enable_registration: true
Theo mặc định, Synapse không cho phép đăng ký mà không xác minh email. Để bật xác minh email, hãy dán các dòng sau.
Mã:
registrations_require_3pid: - email
email: smtp_host: mail.example.com smtp_port: 587 # If mail server has no authentication, skip these 2 lines smtp_user: '[emailprotected]' smtp_pass: 'password' # Optional, require encryption with STARTTLS require_transport_security: true app_name: 'HowtoForge Example Chat' # defines value for %(app)s in notif_from and email subject notif_from: "%(app)s "
Để tắt xác minh email, hãy dán dòng sau.
Mã:
enable_registration_without_verification: true
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Khởi động lại Synapse để áp dụng cấu hình.
Mã:
$ sudo systemctl restart matrix-synapse

Bước 7 - Cấu hình Nginx​

Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Thêm dòng sau vào trước dòng include /etc/nginx/conf.d/*.conf;.
Mã:
server_names_hash_bucket_size 64;
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tạo và mở tệp /etc/nginx/conf.d/synapse.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/synapse.conf
Dán mã sau vào đó.
Mã:
# enforce HTTPS
server { # Client port listen 80; listen [::]:80; server_name matrix.example.com; return 301 https://$host$request_uri;
}
server { server_name matrix.example.com; # Client port listen 443 ssl http2; listen [::]:443 ssl http2; # Federation port listen 8448 ssl http2 default_server; listen [::]:8448 ssl http2 default_server; access_log /var/log/nginx/synapse.access.log; error_log /var/log/nginx/synapse.error.log; # TLS configuration ssl_certificate /etc/letsencrypt/live/matrix.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/matrix.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/matrix.example.com/chain.pem; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s; resolver_timeout 2s; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; tcp_nopush on; gzip on; location ~ ^(/_matrix|/_synapse/client) { proxy_pass http://localhost:8008; proxy_http_version 1.1; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; # Nginx by default only allows file uploads up to 1M in size # Increase client_max_body_size to match max_upload_size defined in homeserver.yaml client_max_body_size 50M; }
}
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc sau khi hoàn tất. Cấu hình trên hoạt động dựa trên giả định rằng địa chỉ IP của miền example.commatrix.example.com đang trỏ đến cùng một máy chủ. Nếu không, hãy sử dụng tệp cấu hình sau cho máy chủ example.com.
Mã:
server { server_name example.com; listen 443 ssl http2; listen [::]:443 ssl http2; # TLS configuration ssl_certificate /etc/letsencrypt/live/matrix.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/matrix.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/matrix.example.com/chain.pem; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s; resolver_timeout 2s; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; # Redirect location ~ ^(/_matrix|/_synapse/client) { return 301 "https://matrix.example.com$request_uri"; } # Client homeserver autodiscovery 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" } }'; } # Domain delegation location /.well-known/matrix/server { default_type application/json; add_header Access-Control-Allow-Origin *; return 200 '{ "m.server": "matrix.example.com" }'; }
}
Xác minh tệp cấu hình Nginx cú pháp.
Mã:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Khởi động lại dịch vụ Nginx.
Mã:
$ sudo systemctl restart nginx

Bước 8 - Cài đặt Coturn​

Bạn sẽ cần cài đặt Traversal Using Relays xung quanh máy chủ NAT (TURN) để kích hoạt cuộc gọi thoại và video. Với mục đích này, chúng tôi sẽ cài đặt gói Coturn. Nếu bạn không cần chức năng này, bạn có thể bỏ qua bước này.

Cài đặt Coturn.
Mã:
$ sudo apt install coturn
Mở các cổng TURN và UDP.
Mã:
$ sudo ufw allow 3478
$ sudo ufw allow 5349
$ sudo ufw allow 49152:65535/udp
Tạo chứng chỉ SSL cho Turn (turn.example.com).
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d turn.example.com
Tạo bí mật xác thực và lưu vào tệp cấu hình.
Mã:
$ echo "static-auth-secret=$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)" | sudo tee /etc/turnserver.conf
static-auth-secret=OcKBLuwpE6IyMoi9mPccjVFaL7PwJRFUuKh5EvGBVcvB7tunevQ3cpP74we8cF4XSN8lFNrgqxJeyItKOcoOABwjdTNChmJeB4WMrsLV2JNsPs3U61s9rRijj3OxBpZux0CGft8CiyNDweVLqqxNaYphNesoAT4y51RxLVdAP2ros9S3jRR7IYRccJVRMpqTa8USBuBqAkzRRPLbFOHsC6QHur2oiySuW6sqs4YkH65N8kReSzgi7Fq2Zll3RO5e
Mở tệp cấu hình để chỉnh sửa.
Mã:
$ sudo nano /etc/turnserver.conf
Dán các dòng sau vào bên dưới xác thực bí mật.
Mã:
use-auth-secret
realm=turn.example.com
cert=/etc/letsencrypt/live/turn.example.com/fullchain.pem
pkey=/etc/letsencrypt/live/turn.example.com/privkey.pem
# VoIP is UDP, no need for TCP
no-tcp-relay
# Do not allow traffic to private IP ranges
no-multicast-peers
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255
denied-peer-ip=::1
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
# Limit number of sessions per user
user-quota=12
# Limit total number of sessions
total-quota=1200
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Khởi động lại Coturn để áp dụng cấu hình.
Mã:
$ sudo systemctl restart coturn
Tạo tệp cấu hình Synapse mới cho Coturn.
Mã:
$ sudo nano /etc/matrix-synapse/conf.d/turn.yaml
Dán các dòng sau vào đó. Thay thế giá trị turn_shared_secret bằng giá trị của static-auth-secret từ \etc\turnserver.conf tệp.
Mã:
turn_uris: [ "turn:turn.example.com?transport=udp", "turn:turn.example.com?transport=tcp" ]
turn_shared_secret: 'static-auth-secret'
turn_user_lifetime: 86400000
turn_allow_guests: True
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Khởi động lại Synapse để áp dụng thay đổi.
Mã:
$ sudo systemctl restart matrix-synapse

Bước 9 - Truy cập Matrix​

Bạn có thể truy cập Matrix Chat bằng trình duyệt web của Element tại https://app.element.io. Nhấp vào nút Đăng nhập để tiếp tục.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22709%22%20height=%22551%22%3E%3C/svg%3E


Nhấp vào liên kết Chỉnh sửa bên dưới Máy chủ gia đình. Nhập matrix.example.com làm máy chủ gia đình của bạn.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22514%22%20height=%22435%22%3E%3C/svg%3E


Nếu máy khách phát hiện đúng máy chủ gia đình của bạn, ranh giới và văn bản sẽ chuyển sang màu xanh lá cây, nếu không sẽ hiển thị màu đỏ. Nhấp vào Tiếp tục để tiếp tục.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22510%22%3E%3C/svg%3E


Nhấp vào nút Đăng nhập để đăng nhập. Bạn sẽ được yêu cầu tạo bản sao lưu an toàn và được mã hóa.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22606%22%20height=%22464%22%3E%3C/svg%3E


Chọn tùy chọn Nhập cụm từ bảo mật để tạo cụm từ bảo mật sẽ được yêu cầu mỗi khi bạn đăng nhập. Nhấp vào Tiếp tục để tiếp tục.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22602%22%20height=%22276%22%3E%3C/svg%3E


Nhập cụm từ bảo mật và nhấp vào nút Tiếp tục để tiếp tục. Bạn sẽ được yêu cầu xác nhận lại ở màn hình tiếp theo.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22607%22%20height=%22254%22%3E%3C/svg%3E


Nhập lại cụm từ và nhấp vào Tiếp tục để tiếp tục.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22603%22%20height=%22376%22%3E%3C/svg%3E


Bạn sẽ được cung cấp một bộ khóa bảo mật mà bạn có thể sử dụng nếu bạn quên cụm từ bảo mật của mình. Nhấp vào nút Tải xuống để lưu chúng.

Nhấp vào nút Tiếp tục để tiếp tục.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22552%22%20height=%22273%22%3E%3C/svg%3E


Bạn sẽ được yêu cầu nhập mật khẩu tài khoản. Nhập mật khẩu và nhấp vào nút Tiếp tục để hoàn tất thiết lập bản sao lưu được mã hóa.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22628%22%3E%3C/svg%3E


Chúng tôi đã tạo một phòng trò chuyện nhóm có tên HowtoForge bằng cách sử dụng nút Tạo trò chuyện nhóm trên trang chủ. Bạn sẽ nhận được cửa sổ bật lên sau khi nhấp vào nút.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22499%22%20height=%22489%22%3E%3C/svg%3E


Bạn có thể hạn chế thành viên vào miền bằng cách mở rộng menu nâng cao và chọn tùy chọn. Hoàn tất việc tạo phòng bằng cách nhấp vào nút Tạo phòng.

Bước 10 - Cài đặt Element​

Cài đặt gói jq để cài đặt trình xử lý văn bản JSON. Chúng tôi sẽ sử dụng nó để lấy phiên bản mới nhất của Element từ kho lưu trữ GitHub của nó mà không cần bạn phải thêm số phiên bản theo cách thủ công và cho phép bạn cập nhật bằng một lệnh duy nhất.
Mã:
$ sudo apt install jq
Tạo một thư mục cho Element.
Mã:
$ sudo mkdir -p /var/www/element
Tạo một tệp mới để lấy Element mới nhất phát hành.
Mã:
$ sudo nano /var/www/element/update.sh
Thêm các dòng sau vào đó.
Mã:
#!/bin/sh
set -e
install_location="/var/www/element"
latest="$(curl -s https://api.github.com/repos/vector-im/element-web/releases/latest | jq -r .tag_name)"
cd "$install_location"
[ ! -d "archive" ] && mkdir -p "archive"
[ -d "archive/element-${latest}" ] && rm -r "archive/element-${latest}"
[ -f "archive/element-${latest}.tar.gz" ] && rm "archive/element-${latest}.tar.gz"
wget "https://github.com/vector-im/element-web/releases/download/${latest}/element-${latest}.tar.gz" -P "archive"
tar xf "archive/element-${latest}.tar.gz" -C "archive"
[ -L "${install_location}/current" ] && rm "${install_location}/current"
ln -sf "${install_location}/archive/element-${latest}" "${install_location}/current"
ln -sf "${install_location}/config.json" "${install_location}/current/config.json"
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tạo tệp có thể thực thi.
Mã:
$ sudo chmod +x /var/www/element/update.sh
Chạy tập lệnh để tải xuống Element.
Mã:
$ sudo /var/www/element/update.sh

Bước 11 - Cấu hình Element​

Sao chép cùng cấu hình element tập tin.
Mã:
$ sudo cp /var/www/element/current/config.sample.json /var/www/element/config.json
Mở tệp cấu hình để chỉnh sửa.
Mã:
$ sudo nano /var/www/element/config.json
Tìm mục sau dòng.
Mã:
"m.homeserver": { "base_url": "https://matrix-client.matrix.org", "server_name": "matrix.org"
},
Thay đổi địa chỉ máy chủ gia đình Matrix mặc định thành máy chủ gia đình của bạn và xóa server_name biến.
Mã:
"m.homeserver": { "base_url": "https://matrix.example.com", "server_name": "example.com"
},
Nếu bạn muốn sử dụng tên của mình thay vì Element trong tiêu đề trang web, hãy thay đổi tên thương hiệu.
Mã:
"brand": "HowtoForge Example Chat",
Đặt Biến disable_guests là true để không cho phép Khách sử dụng Element.
Mã:
"disable_guests": true,
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Tạo chứng chỉ SSL cho Element khách hàng.
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d element.example.com
Tạo và mở tệp /etc/nginx/conf.d/element.conf cho chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/element.conf
Dán các dòng sau vào đó.
Mã:
server { listen 80; listen [::]:80; server_name element.example.com; return 301 https://$host$request_uri;
}
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name element.example.com; root /var/www/element/current; index index.html; access_log /var/log/nginx/element.access.log; error_log /var/log/nginx/element.error.log; add_header Referrer-Policy "strict-origin" always; add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; # TLS configuration ssl_certificate /etc/letsencrypt/live/element.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/element.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/element.example.com/chain.pem; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s; resolver_timeout 2s; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
}
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Xác minh cú pháp tệp cấu hình Nginx.
Mã:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Khởi động lại Nginx dịch vụ.
Mã:
$ sudo systemctl restart nginx
Bạn có thể truy cập vào ứng dụng khách Element thông qua URL https://element.example.com trong trình duyệt của bạn. Đăng nhập và bạn sẽ được đưa đến bảng điều khiển ứng dụng. Trước tiên, bạn sẽ được yêu cầu xác minh ứng dụng bằng https://app.element.io. Đảm bảo rằng bạn đã đăng nhập vào ứng dụng Element gốc và bạn sẽ được yêu cầu khớp các ký tự biểu tượng cảm xúc. Sau khi xác minh, bạn sẽ nhận được bảng thông tin sau.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22517%22%3E%3C/svg%3E

Kết luận​

Bài hướng dẫn này kết thúc về cách cài đặt máy chủ Matrix Synapse Chat cùng với Coturn và máy khách web Element bằng cách sử dụng Nginx làm máy chủ proxy trên máy Debian 12. Nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới.
 
Back
Bên trên