[Jitisi-Meet] Phần 1 – Xây dựng hệ thống Jitsi-Meeting cho doanh nghiệp.
Tiếp nối thành công của talkshow “WORK FROM HOME” và “GIẢI PHÁP VỀ HỘI NGHỊ TRỰC TUYẾN CHO DOANH NGHIỆP”. Xin chân thành cảm ơn bạn “Nguyễn Văn Long” có bài viết hướng dẫn mọi người cài đặt Jitsi trên Azure.
Ở đây, em chia sẽ về project “Jitsi Meeting” em đang xây dựng cho công ty của em (khoảng 350 user). Trong bài viết này mình sẽ không đề cập đến cách sử dụng Jitsi Meeitng, mà ở đây mình muốn hướng dẫn các bạn xây dựng một hệ thống meeting miễn phí trong nội bộ dựa vào Open-Source. Hy vọng mọi người đón nhận và góp ý chân thành. “Nếu ai thấy hay xin góp về thêm về tính năng”, mình sẽ R&D để hoàn thiện giải pháp.
Bài toán doanh nghiệp
Doanh nghiệp bạn không dùng Office 365 hay google mail mà lại đang cần một giải pháp meeting online tiết kiệm chi phí?
Sự cố về Zoom giá rẻ khiến cho các ông chủ doanh nghiệp hoang mang.
Không lo ngại về vấn đề internet, meeting miễn phí mà hiệu năng lại cao.
Người dùng dễ dàng sử dụng mà không cần trải qua các bước training phức tạp.
Người dùng phải chứng thực vào meeting qua Active Directory.
Chốt lại: Jitsi sẽ là một giải pháp tuyệt vời hội đủ những tiêu chí ngon, bổ và rẻ trong trường hợp này.
Jitsi là gì?
Jitsi là một tập hợp các dự án open-source cho phép xây dựng một giải pháp video conference một cách đơn giản và dễ dàng nhất.
Những thành phần tạo thành Jitsi
- Web UI: Nginx.
Jitsi sử dụng nginx để build thành web UI.
- Prosody: the XMPP server
Prosody / XMPP đóng vai trò xác thực người dùng và giúp cung cấp dịch vụ nhắn tin và trò chuyện.
- Jitsi meet: the core of Jitsi
Jitsi Meet is an open-source (Apache) WebRTC JavaScript application.
Nhiệm vụ của nó là:
- Tạo một lớp cho tín hiệu XMPP.
- Tạo các connection peer.
- Accepting media/ messages and files.
Khi ứng dụng bắt đầu thực thi và xử lý tín hiệu, người dùng có thể giao tiếp qua Jicofo vì nó chịu trách nhiệm truyền tín hiệu và chuyển tiếp JVB.
- Jicofo: the XMPP focus component.
Nó là thành phần bắt buộc của Jitsi Meet bên cạnh Jitsi Videobridge (JVB). Nó chịu trách nhiệm quản lý các sesion truyền thông giữa mỗi người tham gia và JVB.
Jicofo hiện có các trách nhiệm sau:
- Quản lý hội nghị: ai tham gia phòng, ai ra khỏi phòng.
- Quản lý các kênh Colibri cho người tham gia và thiết lập luồng truyền thông tới JVB.
- Cân bằng tải cầu video Jitsi dựa trên số lượng hội nghị.
- Xử lý xác thực ứng dụng khách (tùy chọn).
- Tham gia thực hiện một số tính năng như tắt âm thanh, ghi âm, vv Jicofo là thành phần báo hiệu trung tâm trong hệ thống.
- Jvb: Jitsi Videobridge, the video router.
Đây là một thành phần core, cho phép nhiều user giao tiếp với nhau qua video conferance. Không giống như phần cứng chuyên dụng đắt tiền, Jitsi Videobridge SFU(Selective Forwarding Units) để phân phối media, không trộn các kênh video thành một luồng video tổng hợp, mà chỉ chuyển tiếp các kênh video nhận được cho tất cả những người tham gia cuộc gọi. Do đó, trong khi nó không cần phải chạy trên một server có bang thông cao, hoặc CPU cao cũng không ảnh hưởng đến hiệu năng.
Hình 01: So sánh SFU và MCU
Nguồn: https://developer.atlassian.com/blog/2015/07/video-conferencing/mcu-sfu.png
MCU (Đơn vị điều khiển đa điểm): Trong trường hợp này, các luồng video nhận được được giải mã đầu tiên, được tạo thành một hỗn hợp và sau đó được mã hóa lại. Điều này không chỉ làm giảm chất lượng của video do mã hóa bị mất mà còn tăng tải xử lý trên bộ trộn phương tiện theo cấp số nhân.
Chuyển tiếp nội dung video / SFU (Đơn vị chuyển tiếp chọn lọc): Trong phần này, các luồng video mà bộ trộn phương tiện nhận được được chuyển tiếp đến những người tham gia hội nghị.
- Jigasi: the SIP (audio only) gateway.
Một ứng dụng liên kết cho phép các SIP client thông thường tham gia các hội nghị Jitsi Meet do Jitsi Videobridge tổ chức.
- Jibri: the broadcasting infrastructure.
Jibri cung cấp dịch vụ recording or streaming trong Jitsi Meet conference.
- Etherpad: shared document editing addon.
Ngoài ra còn một vài thành phần nhỏ khác mình không liệt kê trên đây.
Hướng dẫn cài đặt và tích hợp Jitsi Meeting vào Active Directory.
1. Hướng dẫn cài đặt Jitsi
Mô hình triển khai
Hình 02: Mô hình triển khai Jitsi-Meeting
Chuẩn bị
Ubuntu 18.04 | Jitsi Meeting | 172.16.111.35/24 |
MS AD | User có quyền domain admin | 10.10.10.10/24 |
Mở các port trên Ubuntu Firewall, chúng ta sử dụng lệnh sau:
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
ufw allow 10000:20000/udp
ufw enable
Cuối cùng là restart services và kiểm tra lại rule
service ufw restart
ufw status
Hình 03: Rule ufw
Tiếp đến chúng ta sẽ update và upgrade cho Ubuntu server
sudo apt update && sudo apt upgrade -y
Cài đặt Jitsi
Đầu tiên chúng ta tiến hành thêm jitsi package repository
wget -qO – https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add –
sudo sh -c “echo ‘deb https://download.jitsi.org stable/’ > /etc/apt/sources.list.d/jitsi-stable.list”
Nếu add không được thì bạn thêm bằng tay với câu lệnh sau:
wget https://download.jitsi.org/jitsi-key.gpg.key
sudo apt-key add jitsi-key.gpg.key
sudo sh -c “echo ‘deb https://download.jitsi.org stable/’ > /etc/apt/sources.list.d/jitsi-stable.list”
Tiếp tục update package chúng ta vừa thêm vào ở trên
sudo apt-get -y update
Tiến hành cài đặt Jitsi-meet bằng lệnh sau:
sudo apt-get -y install jitsi-meet
Sau khi cài đặt xong, hệ thống sẽ yêu cầu bạn cài đặt hostname cho jitsi meeting – bạn sẽ đặt tên tương ứng với public dns mà bạn sẽ sử dụng, cho thuận tiện với các bạn nào ko biết nhiều về nginx: meeting.xxx.com.vn
Tiếp tục chọn:
Generate a new self-signed certificate (You will later get a chance to obtain a Let’s Encrypt certificate).
Sau khi quá trình cài đặt hoàn tất, bạn có thể chạy script để cài đặt SSL Let’s Encrypt miễn phí.
sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
Trong quá trình cài đặt, bạn sẽ được yêu cầu nhập email. Phần còn lại script sẽ tự động cài cho bạn.
Chúng ta sẽ restart và enable nginx
service nginx restart
systemctl enable nginx
Tích hợp Jitsi vào MS AD
Để kết nối được với MS AD bạn cần phải cài đặt những package sau:
apt install sasl2-bin lua-cyrussasl
Vào file config của Jitsi edit lại phương pháp chứng thực:
vi /etc/prosody/conf.avail/meeting.xxx.com.vn.cfg.lua
authentication = “cyrus”
Thêm các tham số sau như hình bên dưới.
cyrus_application_name = “xmpp”
thêm “auth_cyrus” vào modules_enabled;
Hình 04: Cấu hình prosody authen MS AD
Tạo folder chứa xmpp.conf
mkdir /etc/sasl
vi /etc/sasl/xmpp.conf
Thêm cấu hình vào file xmpp.conf như sau:
pwcheck_method: saslauthd
mech_list: PLAIN
Tạo file /etc/saslauthd.conf để thực hiện kết nối đến MS AD
vi /etc/saslauthd.conf
Nếu sử dụng none TLS thì dùng config sau:
ldap_servers: ldap://10.10.10.10:389
ldap_search_base: dc=xxx,dc=local
ldap_bind_dn: xxx\userauthen
ldap_bind_pw: password
ldap_filter: (samAccountName=%u)
ldap_auth_method: bind
ldap_use_sasl: no
ldap_start_tls: no
Nếu muốn thêm ssl, tls vào kết nối thì thêm vào config trên những dòng sau:
Bỏ dòng ldap_start_tls: no
ldap_tls_key: /etc/ssl/meeting.xxx.com.vn.key
ldap_tls_cert: /etc/ssl/meeting.xxx.com.vn.crt
ldap_tls_check_peer: yes
ldap_tls_cacert_file: /etc/ssl/certs/ca-certificates.crt
ldap_tls_cacert_dir: /etc/ssl/certs
Tiếp tục edit saslauthd file
vi /etc/default/saslauthd
START=yes
MECHANISMS=ldap
MECH_OPTIONS=”/etc/saslauthd.conf”
Prosody mặc định không thể giao tiếp với saslauthd chính vì vậy cần phải phân quyền thêm:
chmod 777 /var/run/saslauthd
usermod -aG sasl prosody
Cuối cùng chúng ta sẽ restart service
service saslauthd restart
service prosody restart
Test saslauthen bằng câu lệnh sau:
testsaslauthd -u user -p pass -s xmpp
Nếu output là : 0: OK “Success.” Thì thành công.
Nếu output là : 0: NO “authentication failed” làm lại hehe.
Mặc định user trong MS AD sẽ có quyền authen create và join meeting.
Công ty mình public cho guest sử dụng thì bên mình sẽ tạo 1 User domain – (giới hạn thời gian active).
Khi đó guest bên mình sẽ dung user này đăng nhập vào meeting.
Note : nhiều người dùng chung 1 user vẫn dùng để join vào meeting.
Fix lổi NAT trên Jitsi Meeting
Chắc hẳn nhiều bạn thấy lạ. NAT thôi mà, làm gì mà phải xoắn.
- Đúng NAT thôi mà, các bạn chỉ cần NAT trên Firewall giống như public các dịch vụ web bình thường thôi.
Nhưng như thế thì chưa đủ, nếu các bạn không thực hiện 1 bước NAT SIP nữa, thì ở ngoài internet public các thiết bị mobile sẽ không có sound + media.
Chính vì vậy mình phải hướng dẫn các bạn phần này.
Thêm dòng NAT này vào file sip-communicator.properties
vi /etc/jitsi/videobridge/sip-communicator.properties
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=172.16.111.35 => IP local
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=112.109.94.66 => IP public của Firewall
Cuối cùng là restart services:
service jitsi-videobridge2 restart
Đến đây là kết thúc rồi. Các bạn chỉ cần tạo User trên MS AD và test meeting, chúc các bạn thành công!
Mình xin chân thành nhận các đóng góp của các bạn về những tính năng của Jitsi meeting này, mình sẽ cố gắng R&D để hoàn thiện và sẽ chia sẽ với các bạn trong thời gian tới.
Chân thành cảm ơn các bạn. Nếu mọi người thấy có ích xin hãy share bài viết này để tạo động lực giúp mình nhé.
Tác giả: Nguyễn Hiếu – ITFORVN.COM
To you support to be access : Group Facebook ITFORVN
Nguồn tham khảo:
https://jitsi.org/
https://github.com/jitsi
https://prosody.im/
https://github.com/jitsi/jitsi-meet/wiki/LDAP-Authentication