跳到主內容

BigBlueButton 線上會議系統

  BUBU 因為最近剛好看到某個教師研習剛好在分享這一套線上會議系統,看完內容感覺還不錯而且操作介面感覺還滿直覺得,也因最近疫情狀況一直很不穩定可以讓我老婆試試看看可以讓學生進來上課及互動。官方網站

  另外 BUBU 有試著在 LXC 模式下去安裝這一套系統但是都安裝失敗結果在安裝過程有看到有用到 Docker 方式進行安裝,所以才會一直安裝失敗,那如果需要在 LXC 模式下去安裝此服務需要去調整該 LXC 設定檔及 PVE 設定檔,那由於 BUBU 對 Docker 熟悉度沒有很好因此改用 KVM 模式安裝該服務裝完立刻就可以使用了。

運行環境


  環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式

  • 系統環境: Ubuntu 20.04 (KVM)

安裝過程


  該服務還滿好裝只要照著官方文檔安裝方式

系統需求

  • Ubuntu 20.04
  • 安裝最新版 Docker
  • 記憶體:16G
  • 硬碟空間:500G(錄影)、50G(無錄影)
  • TCP:80、443
  • UDP:16384-32768
  • 網路頻寬:250 Mbits/sec (對稱或更高)
  • TCP:80、443 未被其他 WEB 服務或反向代理使用
  • 設定 SSL 憑證主機名稱(例如:bbb.example.com)
安裝 BigBlueButton 服務

  • 首先到官方文檔參考如何安裝

  • 再來要先把防火牆要開 Port 先設定好

名稱 類別 PORT
WBE TCP 80、443
串流服務 UDP 16384-32768
  • 系統語系要是 en_US.UTF-8
方案一、自動申請憑證

  • 開始安裝 BigBlueButton 服務(自動申請憑證)
wget -qO- https://ubuntu.bigbluebutton.org/bbb-install-2.5.sh | bash -s -- -v focal-250 -s 站台網域名稱 -e 申請憑證電子郵件 -g
  • 參數說明:
    • -w:Ubuntu 的 ufw 防火牆設定是有安裝但沒有啟用服務,此參務會自動啟用並且設定官方所指定 Port (選用)
    • -v focal-250:指定 BigBlueButton 安裝版本,目前官方最新版是 2.5.x
    • -a:安裝 API demos ,用於測試(選用)
    • -s:設定 hostname,例如:bbb.example.com
    • -e:設定E-MAIL,主要是用來申請 Let’s Encrypt 免費憑證用。
    • -g:安裝 GreenLight 視訊管理平台(選用)
方案二、使用已申請好憑證

  • 想要使用自己用憑證的話要先建立目錄,不然在安裝時會出現 Nginx 服務異常
mkdir -p /local/certs/
  • 在這兩個「 fullchain.pemprivkey.pem 」憑證放入到此 /local/certs/ 目錄下即可

  • 開始安裝 BigBlueButton 服務(使用自己申請憑證)

wget -qO- https://ubuntu.bigbluebutton.org/bbb-install-2.5.sh | bash -s -- -v focal-250 -s 站台網域名稱 -d -g
  • 參數說明:

    • -d Skip SSL certificates request (use provided certificates from mounted volume) in /local/certs/ 在 /local/certs/ 中跳過 SSL 證書請求(使用已安裝卷中提供的證書)
  • 安裝完成會看到系統會自動檢查狀況如果有出現以下的畫面表示安裝是成功的

BigBlueButton Server 2.5.5 (3091)
                    Kernel version: 5.4.0-126-generic
                      Distribution: Ubuntu 20.04.5 LTS (64-bit)
                            Memory: 8147 MB
                         CPU cores: 6

/etc/bigbluebutton/bbb-web.properties (override for bbb-web)
/usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties (bbb-web)
       bigbluebutton.web.serverURL: https://bbb.example.com
                defaultGuestPolicy: ALWAYS_ACCEPT
                 svgImagesRequired: true
              defaultMeetingLayout: CUSTOM_LAYOUT

/etc/nginx/sites-available/bigbluebutton (nginx)
                       server_name: bbb.example.com
                              port: 80, [::]:80
                              port: 443 ssl

/opt/freeswitch/etc/freeswitch/vars.xml (FreeSWITCH)
                       local_ip_v4: 133.203.31.211
                   external_rtp_ip: 133.203.31.211
                   external_sip_ip: 133.203.31.211

/opt/freeswitch/etc/freeswitch/sip_profiles/external.xml (FreeSWITCH)
                        ext-rtp-ip: $${external_rtp_ip}
                        ext-sip-ip: $${external_sip_ip}
                        ws-binding: 133.203.31.211:5066
                       wss-binding: 133.203.31.211:7443

/usr/local/bigbluebutton/core/scripts/bigbluebutton.yml (record and playback)
                     playback_host: bbb.example.com
                 playback_protocol: https
                            ffmpeg: 4.2.7-0ubuntu0.1

/usr/share/bigbluebutton/nginx/sip.nginx (sip.nginx)
                        proxy_pass: 133.203.31.211
                          protocol: http

/usr/local/bigbluebutton/bbb-webrtc-sfu/config/default.yml (Kurento SFU)
/etc/bigbluebutton/bbb-webrtc-sfu/production.yml (Kurento SFU - override)
                        kurento.ip: 133.203.31.211
                       kurento.url: ws://127.0.0.1:8888/kurento
                    kurento.sip_ip: 133.203.31.211
               recordScreenSharing: true
                     recordWebcams: true
                  codec_video_main: VP8
               codec_video_content: VP8

/usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml (HTML5 client)
/etc/bigbluebutton/bbb-html5.yml (HTML5 client config override)
                             build: 2846
                        kurentoUrl: wss://bbb.example.com/bbb-webrtc-sfu
                  enableListenOnly: true
                    sipjsHackViaWs: true

/usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml (STUN Server)
                              stun: stun.l.google.com:19302


# Potential problems described below
  • 設定 Greenlight 系統管理員,切換到 cd ~/greenlight 目錄
docker exec greenlight-v2 bundle exec rake user:create["name","email","password","admin"]
  • 簡單說明:

    • 其中name改為名稱、email改為登入信箱、password改為你的密碼、admin不用動(系統管理者權限)
  • 圖示一:設定失敗時所出現的訊息,密碼官方有設定規則需要 八位元以上密面要有大小寫及符號

warning: parser/current is loading parser/ruby27, which recognizes2.7.6-compliant syntax, but you are running 2.7.5.
Please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.
Invalid Arguments
{:password=>["is too short", "did not meet complexity requirements"]}
 The password must:
    1. Be 8 charachters in length.
    2. Have at least 1 lowercase letter.
    3. Have at least 1 upercase letter.
    4. Have at least 1 digit.
    5. Have at least 1 non-alphanumeric character

bbb-01.png

  • 圖示二:設定成功時所出現的訊息

bbb-02.png

  • 在網頁上輸入該站台位置 bbb.example.com 所出現的畫面

bbb-03.png

  • 登入後畫面

bbb-04.png

  • 設定站台相關服務點選系統管理員名稱,系統會帶出選單要選擇網站管理

bbb-05.png

  • 設定站台註冊問題,目前 BUBU 是先設定人工方式來開放人員使用,如果是公司站台建議在這裡設定為人工審核比較安全

bbb-06.png

  • 帳號管理方式可以透過第三方來進行管理 官方文檔 此段 BUBU 日後會在抽空測試到時會在分享。
設定 Nginx Proxy 代理

  如果您跟 BUBU 一樣只有一個固定 IP 的話可以透過 Nginx Proxy 方式來處理,以下是 BUBU 設定檔請參考有如有問題可以到粉專提出討論

  • Nginx Proxy 代理設定如下
server {
    listen 80;
    server_name bbb.example.com;
    rewrite ^(.*)$ https://${server_name}$1 permanent;
}
#
server {
    # 使用 https 和 http/2 協定
    listen 443 ssl http2;
    # 上述的 IPv6 方式
    listen [::]:443 ssl http2;
    server_name bbb.example.com;
    #
    # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
    #
    # SSL 憑證證書路徑
    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    # 私鑰路徑
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;
    # 緩存有效期
    ssl_session_timeout 1d;
    # 緩存憑證類型和大小
    #    ssl_session_cache shared:SSL:50m;
    # about 40000 sessions
    ssl_session_cache shared:MozSSL:50m;
    ssl_stapling on;
    ssl_stapling_verify on;
    #
    # intermediate configuration. tweak to your needs.
    #
    # 使用的加密協定
    ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1;
    # 加密演算法,越前面的優先級越高
    ssl_ciphers 'TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5';
    # 交握過程使用 Server 的首選加演算法,這裡使用 Client 為首選
    ssl_prefer_server_ciphers on;
    #
    access_log /var/log/nginx/bbb_access.log;
    error_log /var/log/nginx/bbb_error.log;
    #
    ## for big blue button
    location / {
        proxy_pass https://站台位置;
        tcp_nodelay on;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $remote_addr;
        # proxy_set_header X-Forwarded-Host $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        # recommended with keepalive connections
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Ssl on;
        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;
        proxy_buffering off;
        keepalive_requests 1000000000;
    }
    #
    location ~ ^/(open|close|idle|send|fcs|deskshare|html5client|_timesync|client|demo|pad|static|playback|presentation|bigbluebutton|screenshare|ws|verto|bbb-webrtc-sfu) {
        proxy_pass https://站台位置;
        tcp_nodelay on;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $remote_addr;
        # proxy_set_header X-Forwarded-Host $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        # recommended with keepalive connections
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Ssl on;
        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;
        proxy_buffering off;
        keepalive_requests 1000000000;
    }
}

補充說明


  • 錄影檔存放位置(建議先目錄可以試著掛在檔案伺服器上先暫時記錄) BUBU 之後會測試,測試成功到時會在寫一篇教怎麼設定
cd /var/bigbluebutton/recording/

備註





參考相關網頁