1. 程式人生 > >Docker部署WebRTC Server AppRTC實現手機、瀏覽器互通簡易指南

Docker部署WebRTC Server AppRTC實現手機、瀏覽器互通簡易指南

AppRTC是什麼?

AppRTC是WebRTC Server Demo,具備Signaling Server、Room Server、TURN/STUN Server等相應功能。AppRTC作為服務端部分,可以實現Android 、iOS、瀏覽器等之間的視訊通話。

AppRTC怎麼用?

使用官網Demo Server

手動搭建部署

原始碼是在Google app engine 的基礎上部署的,由於Google Cloud服務不可用,這裡使用了GAE SDK的方式部署。
由於網路和依賴等問題,這裡不從零安裝部署,使用了Piasy的Docker部署方案。

Docker常用命令

列出所有容器(執行和停止的)docker ps -a

停止容器                    
docker stop <container-id>

移除容器可讀寫層            
docker rm <container-id>

列出所有映象                
docker images -a

刪除映象                    
sudo docker rmi c1fe6d45bdad

容器生成映象              
docker commit -m "modify ice.js"
-a "wildcreek" 4ebdd4587ced 載入映象進容器,並執行映象bash docker run --rm --net=host -e PUBLIC_IP=x.x.x.x -v /root/docker/:/apprtc_configs -it wildcreek/apprtc-server /bin/bash

Docker部署AppRTC簡易指南

這裡完全參考了Piasy的Docker部署方案,並修改了幾個小問題。piasy的demo目前測試支援android互通;此demo目前測試firefox57 和android手機互通正常,chrome 要求必須支援https (getUserMedia) 和wss,尚未改造完成暫不支援。

第一步:安裝Docker

第二步:拉取映象

docker pull wildcreek/apprtc-server

第三步:修改配置

第四步:執行Server

docker run –rm –net=host -e PUBLIC_IP=x.x.x.x -v /root/docker/:/apprtc_configs -it wildcreek/apprtc-server
./run.sh

第五步:效果預覽

這裡寫圖片描述

修改Docker容器後重新提交的簡單思路

  1. 修改 iceserver get方式獲取

    cd /apprtc/src/web_app/js

    vim util.js //將requestIceServers POST方法修改為GET

  2. 修復ice.js CORS跨域訪問問題

    resp.header(“Access-Control-Allow-Origin”, “*”)

    resp.header(“Access-Control-Allow-Credentials”,”true”)

    resp.header(“Access-Control-Allow-Headers”, “Origin, X-Requested-With, Content-Type, Accept”)

    resp.header(‘Access-Control-Allow-Methods’, ‘PUT, POST, GET, DELETE, OPTIONS’)

  3. 構建 :cd /apprtc ; grunt build

  4. 部署appengine :/usr/local/google_appengine/dev_appserver.py /apprtc/out/app_engine/

  5. 容器提交 docker commit -m “modify ice.js fix CORS” -a “wildcreek” 4ebdd4587ced wildcreek/apprtc-server

  6. 容器push: docker login ; docker push xxx/xxx

  7. nginx https轉發
    7.1 nginx安裝
    apt-get update
    apt-get install nginx
    7.2 建立私鑰和證書

首先,進入你想建立證書和私鑰的目錄,例如:
cd /nginx

建立伺服器私鑰,命令會讓你輸入一個口令:
openssl genrsa -des3 -out server.key 1024

建立簽名請求的證書(CSR):
openssl req -new -key server.key -out server.csr

在載入SSL支援的Nginx並使用上述私鑰時除去必須的口令:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

最後標記證書使用上述私鑰和CSR:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

7.3 nginx配置
sudo vim /etc/nginx/nginx.conf
//sudo vim /etc/nginx/sites-available/default

server {
listen 443;
ssl on;
server_name x.x.x.x;
ssl_certificate /nginx/server.crt;
ssl_certificate_key /nginx/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

location / {
    # redirecting to http
    proxy_pass http://x.x.x.x:8080;
}

}

7.4 nginx 啟動
service nginx -t
service nginx restart

7.5 容器提交 docker commit -m “nginx with https ,bug:need wss supprot” -a “wildcreek” 5e67a42e3fc6 wildcreek/apprtc-server

問題清單

已解決:
1. js跨域訪問
2. https支援

未解決:
1. https需要配合wss使用,程式碼中為ws,提示:An insecure WebSocket connection may not be initiated from a page loaded over HTTPS