為了在 AWS 上安裝 Jitsi 的 Docker 套件,著實的花了不少時間研究和測試,特地記錄一下目前穩定的安裝方法。
安裝 Jitsi
下載最新的版本,複製預設的 env 檔案,並設定密碼
git clone https://github.com/jitsi/docker-jitsi-meet && cd docker-jitsi-meet cp env.example .env ./gen-passwords.sh
修改 .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 填入自己這台伺服器的網域名稱
在 config 裡手動創建其他必要的資料夾,若 jigasi 和 jibri 沒用到的話可以不用開
sudo mkdir -p ~/.jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody,jicofo,jvb,jigasi,jibri}
修改 docker-compose.yml
volumes: - ${CONFIG}/web:/config - /etc/letsencrypt:/etc/letsencrypt //只要修改這裡即可 - ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts
上線兼啟動
docker-compose up -d
等容器全部啟動需要一點時間,光 web 在產生 key 時就要等待了,如果不確定什麼時候可以使用的話看 web 的 log ,等輸出 service done 時就一定可以使用。
檢查 Jitsi 伺服器運作
在網址列輸入 https://{domain_name}:8443 應該就可以看到 Jitsi 伺服器的首頁了。
但如果有需要再加上限制帳密的話,需要再繼續修改以下內容
主要有三種方法,這裡記錄兩種,第一種是直接對 Jitsi 註冊帳密來驗證,另一種是帳密放在別的伺服器中,而 Jitsi 使用 JWT 的方式來驗證
記得,如果修改 .env 檔案後,一定要把 config 全部砍掉後重建重啟,才會吃到新的 .env 檔案
設定需要註冊帳密才能登入
- 在 .env 檔案上加入帳密的相關設定
ENABLE_AUTH = 1 ENABLE_GUESTS = 0 AUTH_TYPE=internal
- 利用 prosody 的 container 註冊帳密
meet.jitsi 這串文字不能修改,因為對於容器內而言這是固定的docker-compose exec prosody /bin/bash prosodyctl --config /config/prosody.cfg.lua register TheDesiredUsername meet.jitsi TheDesiredPassword
設定使用 JWT 方式才能登入
- 在 .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 密碼
- 利用 JWT.io 生出 token 測試
進入 JWT 網站後,填入 App ID 和 App 密碼,可以產生最基本的 token - 確定是否可開啟
開啟會議室時,一樣會先出現需要登入的帳密框,這時候直接在網址後面加上 ?jwt={token} 就可以進入了
使用 iframe 內嵌 Jitsi 會議室
為了開發網站快速,其實可以在已經做好的網頁裡直接帶資訊並開啟一個新的 Jitsi 會議室
- 確定已經設定好 JWT 認證
- 在產生 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 密碼
)
其中,使用者名稱,電子信箱,聊天室名稱都會直接顯示在會議室系統上面的個人資訊上
- 直接在 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 才看得到,而且也可以選擇。選擇完後可以正常使用沒有問題。
重點
- 每修改一次 .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