在 AWS 上使用 Docker 安裝 Jitsi


為了在 AWS 上安裝 Jitsi 的 Docker 套件,著實的花了不少時間研究和測試,特地記錄一下目前穩定的安裝方法。

安裝 Jitsi

  1. 下載最新的版本,複製預設的 env 檔案,並設定密碼

    git clone https://github.com/jitsi/docker-jitsi-meet && cd docker-jitsi-meet
    cp env.example .env
    ./gen-passwords.sh
    
  2. 修改 .env 部份

  • CONFIG=~/.jitsi-meet-cfg 這裡自己決定想要放 config 的地方,Log 也會放在這
  • HTTP_PORT=8000 預設 HTTP PORT
  • HTTPS_PORT=8443 預設 HTTPS PORT,如果不特別設定的話也會剛好是首頁連接 PORT
  • TZ=Asia/Taipei
  • #PUBLIC_URL=https://meet.jitsi.demo 一定要 mark 起來,因為 nginx 有自己的 httpd reverse proxy,就算 nginx 不用加任何設定也沒關係
  • ENABLE_LETSENCRYPT=1 使用 LETSENCRYPT 加密方式
  • LETSENCRYPT_DOMAIN=meet.jitsi.demo 填入自己這台伺服器的網域名稱
  1. 在 config 裡手動創建其他必要的資料夾,若 jigasi 和 jibri 沒用到的話可以不用開

    sudo mkdir -p ~/.jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody,jicofo,jvb,jigasi,jibri}
    
  2. 修改 docker-compose.yml

         volumes:
             - ${CONFIG}/web:/config
             - /etc/letsencrypt:/etc/letsencrypt //只要修改這裡即可
             - ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts
    
  3. 上線兼啟動

    docker-compose up -d
    

    等容器全部啟動需要一點時間,光 web 在產生 key 時就要等待了,如果不確定什麼時候可以使用的話看 web 的 log ,等輸出 service done 時就一定可以使用。

檢查 Jitsi 伺服器運作

在網址列輸入 https://{domain_name}:8443 應該就可以看到 Jitsi 伺服器的首頁了。

但如果有需要再加上限制帳密的話,需要再繼續修改以下內容
主要有三種方法,這裡記錄兩種,第一種是直接對 Jitsi 註冊帳密來驗證,另一種是帳密放在別的伺服器中,而 Jitsi 使用 JWT 的方式來驗證

記得,如果修改 .env 檔案後,一定要把 config 全部砍掉後重建重啟,才會吃到新的 .env 檔案

設定需要註冊帳密才能登入

  1. 在 .env 檔案上加入帳密的相關設定
    ENABLE_AUTH = 1
    ENABLE_GUESTS = 0
    AUTH_TYPE=internal
    
  2. 利用 prosody 的 container 註冊帳密
    docker-compose exec prosody /bin/bash
    prosodyctl --config /config/prosody.cfg.lua register TheDesiredUsername meet.jitsi TheDesiredPassword
    
    meet.jitsi 這串文字不能修改,因為對於容器內而言這是固定的

設定使用 JWT 方式才能登入

  1. 在 .env 檔案上加入帳密的相關設定
    ENABLE_AUTH = 1
    ENABLE_GUESTS = 0
    AUTH_TYPE = jwt
    JWT_APP_ID = meet_good_id //這裡輸入你想要的 APP ID
    JWT_APP_SECRET = meet_good_pw //這裡輸入你想要的 APP 密碼
    
  2. 利用 JWT.io 生出 token 測試
    進入 JWT 網站後,填入 App ID 和 App 密碼,可以產生最基本的 token
  3. 確定是否可開啟
    開啟會議室時,一樣會先出現需要登入的帳密框,這時候直接在網址後面加上 ?jwt={token} 就可以進入了

使用 iframe 內嵌 Jitsi 會議室

為了開發網站快速,其實可以在已經做好的網頁裡直接帶資訊並開啟一個新的 Jitsi 會議室

  1. 確定已經設定好 JWT 認證
  2. 在產生 token 時,可以夾帶額外要顯示在會議室介面上的資訊

HEADER

{
  "alg": "HS256",
  "typ": "JWT"
}

PAYLOAD

{
  "context": {
   "user": {
   "avatar": "https:/gravatar.com/avatar/abc123", // 大頭照
   "name": "John Doe",                            // 使用者名稱
   "email": "jdoe@example.com"                    // 電子信箱
   }
},
  "aud": "jitsi",
  "iss": "<your app id>",                         // APP ID
  "sub": "jitsi.companya.com",                    // Domain Name
  "room": "*"                                     // 聊天室名稱
}

VERIFY SIGNATURE

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  your-256-bit-secret                            // 這裡要貼上 APP 密碼
)

其中,使用者名稱,電子信箱,聊天室名稱都會直接顯示在會議室系統上面的個人資訊上

  1. 直接在 iframe 的屬性上指定會議室網址及 JWT
    < iframe src="https://meet.jitsi.demo:8443/abcroom?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb250ZXh0Ijp7InVzZXIiOnsiYXZhdGFyIjoiaHR0cHM6Ly9yb2JvaGFzaC5vcmcvam9obi1kb2UiLCJuYW1lIjoiaG93bWF1Y2giLCJlbWFpbCI6Im5vY2FsbG1lQGhvdG1haWwuY29tIn19LCJhdWQiOiJnb29kX2lkX2F1ZCIsImlzcyI6Im1lZXQyX2dvb2RfaWQiLCJzdWIiOiJtZWV0Mi53ZWljYW1wdXMuY29tIiwicm9vbSI6ImFiY3Jvb20ifQ.du2DZKEU5nf_zvEjnz59-ThsYugVzkyFRZqKOIRpt80" width="80%" height="80%" scrolling="auto" allow="microphone; camera"></iframe>
    

最後面要記得加上 allow 屬性,因為在 iframe 裡要自動讓瀏覽器端可以自動使用麥克風與相機權限

使用 iframe 已知 issue

  • 若在沒有 DNS (HTTPS) 只有 http 的狀況下,若有多個 camera 或 audio 設備時,畫面下方的 camera 或 audio 設備選單會看不到,必須使用右下角的 settings 才看得到,而且也可以選擇。選擇完後可以正常使用沒有問題。

重點

  1. 每修改一次 .env 或 docker-compose.yml 之後,需要先把 ~/.jitsimeet-config 資料夾刪除並重建後才會生效,而且要記得重建資料夾

參考資料

用docker安裝視訊會議 jitsi-meet
Docker Jitsi
JWT
Rocket Chat part 3: Installing Jitsi with JWT for secure video conferencing
Jitsi Meet API

#server #jitsi






Related Posts

Day05 - CSS色彩、背景與漸層

Day05 - CSS色彩、背景與漸層

ding229
30-Day LeetCoding Challenge 2020 April Week 3 || Leetcode 解題

30-Day LeetCoding Challenge 2020 April Week 3 || Leetcode 解題

george16886
Day05: GraphQL - Types and Schema wiht node.js

Day05: GraphQL - Types and Schema wiht node.js

yuting3656


Comments