Jitsi Meet เป็น platform สำหรับการสื่อสาร แบบ Open Source ที่มีฟีเจอร์ครบถ้วน จุดเด่นก็เป็นการทำ Video Conference คล้ายกับ Google Meet หรือ Zoom และได้รับความนิยมในหมู่นักพัฒนาทั่วโลก เพราะสามารถนำมาติดตั้งเป็น Self-Hosting ได้เอง โดยมีฟีเจอร์หลักๆ ประมาณนี้ครับ
Jitsi Meet Core Feature
- สามารถทำ Video Conferencing, Text Chat, Sip Call ได้
- รองรับการสนทนา (Chat) ได้มากถึง 32 คนพร้อมกันใน 1 ห้อง
- ทำงานได้แบบ Low-Latency ทั้งภาพและเสียง
- สามารถ Share Screen ได้
- บันทึกภาพและเสียงในการสนทนาได้ (Video Recording)
- ปรับความละเอียดของภาพ Video Conference ของตนเองได้
- Video Streaming ออกไปที่ Youtube ได้
- รองรับการส่งไฟล์ media ระหว่างกัน
- เป็น End-to-end encryption ระหว่างผู้สนทนา
- รองรับการใช้งานบนเว็บ Browser, Mobile Application, Desktop clients
- พัฒนาด้วยภาษา Java และใช้มาตรฐาน WebRTC
- เป็น Open Source
Jitsi Architecture Diagram
ตัว Jitsi เอง ประกอบด้วย Module หลายๆ ตัวประกอบกัน เพื่อให้สามารถทำงานเป็น Web Video Conference ได้ ดังนี้
- Jitsi Meet – เป็นหน้าเว็บไซต์ ทำงานกับ WebRTC ผ่าน JavaScript โดยเรียกใช้ Jitsi Videobridge เป็นโมดูลอีกตัวที่ทำเรื่องคุณภาพของภาพ, การสเกล video conferences. โดยตัวเว็บไซต์ใช้ React และ React Native ในการทำ
- Jitsi Videobridge (JVB) – เรียกว่าเป็นตัวหลักเลยก็ได้ ที่เป็นตัวรับสตรีมวีดิโอจากผู้สนทนาทุกคน จาก WebRTC มาตัว server
- Jitsi Conference Focus (jicofo) – โมดูลฝั่ง server-side ที่รับการทำงานจาก Jitsi Meet เพื่อจัดการเรื่อง sessions ต่างๆ ทำหน้าที่เหมือน load balancer ระหว่างผู้สนทนากับ Jitsi Videobridge
- Jitsi Gateway to SIP (jigasi) – โมดูลฝั่ง server-side ที่ทำงานเกี่ยวกับ SIP เพื่อใช้บน Jitsi Meet
- Jitsi Broadcasting Infrastructure (jibri) – เครื่องไม้เครื่องมือต่างๆ สำหรับการทำ Video Recording หรือ Streaming Video ที่รับมาจาก Jitsi Meet ในรูปแบบ virtual framebuffer โดยโมดูลนี้จะคอย Capture ภาพและเสียง จากนั้นไป Encode ด้วย ffmpeg ให้อีกที
Browser Compatible
เรียกว่ารองรับ Browser ได้เกือบครบ ยกเว้น Internet Explorer แต่ เดี๋ยวนี้เราก็คงไม่ค่อยได้ใช้กันแล้วมั้ง? ถึงขนาดที่ว่า ผู้พัฒนากล่าวติดตกตลกว่า “Are you serious?” ซีเรียสหรอ ถ้าจะใช้บน IE ไม่ได้? ฮ่าๆ
Self-Hosting Prerequisites
ในเอกสารไม่ได้บอกชัดเจน แต่ที่ผมทดสอบบน AWS EC2 แบบ free-tier (t2.micro) มี vCPU 1 Core และ Memory 1 GB ก็สามารถติดตั้ง และใช้งานได้ 4 ผู้สนทนา ใน 1 ห้อง สลับไป Share Screen ด้วย ก็ราบรื่นไม่ติดขัดครับ แต่ถ้าจะให้แนะนำก็ยืนพื้นที่มากกกว่าหน่อยจะดีกว่า
General
- สิทธิในการเข้าถึง Root ของ Web Server
- Sub/Domain name จริง
- SSL Certificate (ทำ self-signed certificate ใช้ทดสอบก่อนได้)
Web Server
- CPU 2 Cores +
- Memory 4GB +
- Storage 100 GB
- Dropbox for store record file at least 1 GB (สำหรับ Video Recording 1 ชั่วโมง ความละเอียด 1080p)
Operating System
- Debian 10 (Buster) or newer
- Ubuntu 18.04 (Bionic Beaver) or newer
Core Library
- Gnupg2
- Apache2 แตะแนะนำ Nginx ดีกว่าครับ
- OpenJDK-8 (ในคู่มือเว็บ official ไม่มีบอก แปลกเหมือนกัน)
- Certbot (Jitsi ต้องใช้ SSL เลยต้องมีไว้ใช้หน่อย)
- Prosody (ตัวที่ติดมาตอนผมลง jitsi-meet 2.0 มันเป็น version 0.10.1 แต่ทำงานไม่ได้ ต้องลงอัพเดทใหม่เป็น 0.11.10 ล่าสุด)
วิธีการติดตั้ง Jitsi Meet
ผมจะยืนพื้นจากเอกสาร Jiti Self-Hosting Guide – Debian/Ubuntu server นะครับ โดยไปดูคำอธิบายจากเอกสารนั้นได้ แต่ในโพสต์นี้ผมจะขอบันทึกลำดับการติดตั้ง และคำสั่งไว้ เผื่อเป็นประโยชน์และไว้ดูเองครั้งถัดไป
- หลังสร้าง Server Debian/Ubunru มาใหม่ๆ ให้ทำการ update package ให้เรียบร้อย
- sudo apt update
- sudo apt-add-repository universe
- sudo apt update
- Set Hostname ของ Web Server
- sudo hostnamectl set-hostname meet.example.com
- เพิ่ม FQDN ใน /etc/hosts
- x.x.x.x meet.example.com
- เพิ่ม repository ของ Jitsi
- curl https://download.jitsi.org/jitsi-key.gpg.key | sudo sh -c ‘gpg –dearmor > /usr/share/keyrings/jitsi-keyring.gpg’
- echo ‘deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/’ | sudo tee /etc/apt/sources.list.d/jitsi-stable.list > /dev/null
- sudo apt update
- ติดตั้ง Core Library ซึ่งระบบของ Jitsi จะดูว่าตัวไหนเรามีแล้ว เขาจะไม่ติดตั้งซ้ำซ้อนกัน
- sudo apt install apt-transport-https
- sudo apt install gnupg2 nginx openjdk-8-jre
- เปิด Port Firewall ทั้งใน Server เอง และอย่าลืม Security Group บน Cloud ด้วยนะ
- sudo ufw allow 80/tcp
- sudo ufw allow 443/tcp
- sudo ufw allow 10000/udp
- sudo ufw allow 22/tcp
- sudo ufw allow 3478/udp
- sudo ufw allow 5349/tcp
- sudo ufw enable
- ทำการติดตั้ง Jitsi Meet
- sudo apt install jitsi-meet
- ในขั้นตอนนี้จะมีให้กรอก Hostname ก็กรอกชื่อเดียวกับ ที่ตั้งไว้ในข้อ 2 เช่น meet.example.com
- จากนั้นจะมีให้เลือก SSL Certificate ให้เลือกเป็น “Generate a new self-signed certificate”
- ติดตั้ง Certbot ที่ทาง Jitsi เตรียมสคริ้ปติดตั้งไว้ให้
- sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
- ลองทดสอบเข้าใช้งานดู ที่ https://meet.example.com ถ้าเข้าไม่ได้ ที่ผมเจอมักเป็นปัญหาที่ SSL ไม่ถูกต้อง
- ถ้าเว็บใช้งานได้ดี สามาถเปิดห้องคุยได้ และมีคนแจมเข้ามา สามารถเห็นหน้าเห็นตากันได้ ก็จบ แต่ถ้ามองเห็นแต่หน้าตัวเอง และไม่เห็นหน้าของผู้เข้าร่วมสนทนาในห้อง ให้ทำการ Update Prosody ดังนี้
- echo deb http://packages.prosody.im/debian $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list
- wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add –
- sudo apt-get update
- sudo apt-get install prosody
- Config Prosody
- sudo vi /etc/prosody/prosody.cfg.lua
- เติมข้อความ Include “conf.d/*.cfg.lua” ไว้ท้ายสุดของไฟล์
- ถ้าเจอข้อความ VirtualHost “localhost” ให้ลบออกหรือทำคอมเม้นไว้โดยการเติม — ด้านหน้า
- แก้ไฟล์ config ที่ทำงานกับเว็บ Jitsi โดยการ
- vi /etc/prosody/conf.avail/meet.example.com.cfg.lua
- ตรงไหนมีคำว่า storage = “none” ให้แก้เป็น storage = “memory” ทั้งหมด
- ลองทดสอบเข้าใช้งานดูใหม่อีกครั้ง ที่ https://meet.example.com
ทดสอบJitsi Meet
สรุป
บทจะติดตั้งง่ายก็ง่าย จะยากก็ยาก ซึ่งที่ยาก เพราะ Document อธิบายไม่ค่อยครบถ้วน ในหลายบทก็ไม่มีเขียนบอกไว้ ต้องอาศัยการเข้าไปอ่านการแก้ปัญหาใน Comunity แทน และปัญหาส่วนมากที่เจอตอนติดตั้งเป็นเรื่องของ Network ดังนั้นต้อง Debug ไฟล์ log ทั้ง Jitsi, Nginx, Syslog ดีๆ ว่ามี Error อะไรไหมนะครับ
ส่วนการใช้งาน ในส่วนตัวผม ผมค่อนข้างพอใจนะ สำหรับระบบ Open Source ที่ทำงานได้ดีและครบถ้วนพอๆกับ ยี่ห้อดังๆ เลย